diff --git a/.hgignore b/.hgignore
--- a/.hgignore
+++ b/.hgignore
@@ -1,72 +1,72 @@
 ~$
-^run.*$
+^(anas|test|run).*$
 \.orig$
 \.(o|Po|lo|Plo|la|a|so|dylib|pyc|tar\.bz2|tar\.gz|fifo|hepmc)$
 ^config\.guess$
 ^config\.status$
 ^config\.sub$
 ^config\.log$
 ^configure$
 ^depcomp$
 ^compile$
 ^ar-lib$
 ^install-sh$
 ^INSTALL$
 ^libtool$
 ^test-driver$
 ^ltmain\.sh$
 ^m4/ltoptions\.m4$
 ^m4/ltsugar\.m4$
 ^m4/ltversion\.m4$
 ^m4/lt~obsolete\.m4$
 ^missing$
 ^autom4te\.cache$
 ^include/Rivet/Config/stamp-h.$
 ^tmp$
 ^rivet.pc$
 Makefile$
 Makefile\.in$
 \.(pdf|toc|bbl|blg|sty|bib|html|tex)$
 Doxyfile$
 \.libs$
 \.deps$
 #Rivet.yoda
 #.*/Rivet\.yoda
 ^bin/rivet-buildplugin$
 ^bin/rivet-config$
 ^bin/rivet-nopy$
 ^aclocal\.m4$
 ^pyext/build$
 ^pyext/rivet/core.cpp$
 ^pyext/rivet/rivetwrap\.py$
 ^pyext/rivet/rivetwrap_wrap\.cc$
 ^pyext/rivet/fix-out-of-source$
 ^pyext/setup\.py$
 ^rivetenv\.(sh|csh)$
 ^test/test(Api|Cmp|NaN)$
 ^include/Rivet/Config/DummyConfig\.hh\.in$
 ^include/Rivet/Config/BuildOptions\.hh$
 ^include/Rivet/Config/DummyConfig\.hh$
 ^include/Rivet/Config/RivetConfig\.hh$
 ^doc/.*\.(log|aux|out)$
 ^doc/diffanas$
 ^test/log$
 ^test/.*\.log$
 ^test/out\.yoda$
 ^test/NaN.aida$
 ^test/Rivet.yoda$
 ^test/testBoost$
 ^test/.*\.trs$
 ^test/testMatVec$
 ^test/testMath$
 ^test/testBeams$
 ^dev$
 ^devval$
 ^newanalyses$
 ^.*plots$
 ^a\.out$
 ^a\.out\.dSYM$
 ^Rivet-.\..\..$
 ^local/.*$
 ^(for|analyses)\d\d\d$
-^src/Analyses/.*__all\.cc$
+^analyses/data$
diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5874 +1,6161 @@
+2017-06-28  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Split the smearing functions into separate header files for
+	generic/momentum, Particle, Jet, and experiment-specific smearings
+	& efficiencies.
+
+2017-06-27  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add 'JetFinder' alias for JetAlg, by analogy with ParticleFinder.
+
+2017-06-26  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Convert SmearedParticles to a more general list of combined
+	efficiency+smearing functions, with extra constructors and some
+	variadic template cleverness to allow implicit conversions from
+	single-operation eff and smearing function. Yay for C++11 ;-)
+	This work based on a macro-based version of combined eff/smear
+	functions by Karl Nordstrom -- thanks!
+
+	* Add *EffFn, *SmearFn, and *EffSmearFn types to SmearingFunctions.hh.
+
+2017-06-23  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add portable OpenMP enabling flags to AM_CXXFLAGS.
+
+2017-06-22  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Fix the smearing random number seed and make it thread-specific
+	if OpenMP is available (not yet in the build system).
+
+	* Remove the UNUSED macro and find an alternative solution for the
+	cases where it was used, since there was a risk of macro clashes
+	with embedding codes.
+
+	* Add a -o output directory option to make-plots.
+
+	* Vector4.hh: Add mT2(vec,vec) functions.
+
+2017-06-21  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add a full set of in-range kinematics functors: ptInRange,
+	(abs)etaInRange, (abs)phiInRange, deltaRInRange, deltaPhiInRange,
+	deltaEtaInRange, deltaRapInRange.
+
+	* Add a convenience JET_BTAG_EFFS functor with several constructors to handle mistag rates.
+
+	* Add const efficiency functors operating on Particle, Jet, and FourMomentum.
+
+	* Add const-efficiency constructor variants for SmearedParticles.
+
+2017-06-21  Jon Butterworth  <jmb@hep.ucl.ac.uk>
+
+	* Fix normalisations in CMS_2016_I1454211.
+
+	* Fix analysis name in ref histo paths for ATLAS_2017_I1591327.
+
+2017-06-18  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Move all standard plugin files into subdirs of src/Analyses,
+	with some custom make rules driving rivet-buildplugin.
+
+2017-06-18  David Grellscheid  <david.grellscheid@durham.ac.uk>
+
+	* Parallelise rivet-buildplugin, with source-file cat'ing and use
+	of a temporary Makefile.
+
+2016-06-18  Holger Schulz  <holger.schulz@durham.ac.uk>
+
+        * Version 2.5.4
+
+2016-06-17  Holger Schulz  <holger.schulz@durham.ac.uk>
+
+	* Fix 8 TeV DY (ATLAS_2016_I1467454), EL/MU bits were bissing.
+
+	* Add 13 TeV DY (ATLAS_2017_I1514251) and mark
+	ATLAS_2015_CONF_2015_041 obsolete
+
+	* Add missing install statement for ATLAS_2016_I1448301.yoda/plot/info leading to
+	segfault
+
+2017-06-09  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Slight improvements to Particle constructors.
+
+	* Improvement to Beam projection: before falling back to barcodes
+	1 & 2, try a manual search for status=4 particles. Based on a
+	patch from Andrii Verbytskyi.
+
+2017-06-05  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add CMS_2016_I1430892: dilepton channel ttbar charge asymmetry analysis.
+
+	* Add CMS_2016_I1413748: dilepton channel ttbar spin correlations and polarisation analysis.
+
+	* Add CMS_2017_I1518399: leading jet mass for boosted top quarks at 8 TeV.
+
+	* Add convenience constructors for ChargedLeptons projection.
+
+2017-06-03  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add FinalState and Cut (optional) constructor arguments and
+	usage to DISFinalState. Thanks to Andrii Verbytskyi for the idea
+	and initial patch.
+
+2017-05-23  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add ATLAS_2016_I1448301, Z/gamma cross section measurement at 8 TeV.
+
+	* Add ATLAS_2016_I1426515, WW production at 8 TeV.
+
+2016-05-19  Holger Schulz  <holger.schulz@durham.ac.uk>
+
+	* Add BELLE measurement of semileptonic B0bar -> D*+ ell nu decays. I
+	took the liberty to correct the data in the sense that I take the bin
+	widhts into account in the normalisation. BELLE_2017_I1512299.
+	This is a nice analysis as it probes the hadronic and the leptonic
+	side of the decay so very valuable for model building and of course it
+	is rare as it is an unfolded B measurement.
+
+2016-05-17  Holger Schulz  <holger.schulz@durham.ac.uk>
+
+	* Add ALEPH measurement of hadronic tau decays, ALEPH_2014_I1267648.
+
+	* Add ALEPH dimuon invariant mass (OS and SS) analysis, ALEPH_2016_I1492968
+
+	* The latter needed GENKTEE FastJet algorithm so I added that FastJets
+
+	* Protection against logspace exception in histobooking of
+	MC_JetAnalysis
+
+	* Fix compiler complaints about uninitialised variable in OPAL_2004.
+
+2016-05-16  Holger Schulz  <holger.schulz@durham.ac.uk>
+
+	* Tidy ALEPH_1999 charm fragmentation analysis and normalise to data
+	integral. Added DSTARPLUS and DSTARMINUS to PID.
+
+
+2017-05-16  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add ATLAS_2016_CONF_2016_092, inclusive jet cross sections using early 13 TeV data.
+
+	* Add ATLAS_2017_I1591327, isolated diphoton + X differential cross-sections.
+
+	* Add ATLAS_2017_I1589844, ATLAS_2017_I1589844_EL, ATLAS_2017_I1589844_MU:  kT splittings in Z events at 8 TeV.
+
+	* Add ATLAS_2017_I1509919, track-based underlying event at 13 TeV in ATLAS.
+
+	* Add ATLAS_2016_I1492320_2l2j and ATLAS_2016_I1492320_3l, the WWW cross-section at 8 TeV.
+
+2017-05-12  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add ATLAS_2016_I1449082, charge asymmetry in top quark pair production in dilepton channel.
+
+	* Add ATLAS_2015_I1394865, inclusive 4-lepton/ZZ lineshape.
+
+2017-05-11  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add ATLAS_2013_I1234228, high-mass Drell-Yan at 7 TeV.
+
+2017-05-10  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add CMS_2017_I1519995, search for new physics with dijet angular distributions in proton-proton collisions at sqrt{(s) = 13 TeV.
+
+	* Add CMS_2017_I1511284, inclusive energy spectrum in the very forward direction in proton-proton collisions at 13 TeV.
+
+	* Add CMS_2016_I1486238, studies of 2 b-jet + 2 jet production in proton-proton collisions at 7 TeV.
+
+	* Add CMS_2016_I1454211, boosted ttbar in pp collisions at sqrtS = 8 TeV.
+
+	* Add CMS_2016_I1421646, CMS azimuthal decorrelations at 8 TeV.
+
+2017-05-09  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add CMS_2015_I1380605, per-event yield of the highest transverse
+	momentum charged particle and charged-particle jet.
+
+	* Add CMS_2015_I1370682_PARTON, a partonic-top version of the CMS
+	7 TeV pseudotop ttbar differential cross-section analysis.
+
+	* Adding EHS_1988_I265504 from Felix Riehn: charged-particle
+	production in K+ p, pi+ p and pp interactions at 250 GeV/c.
+
+	* Fix ALICE_2012_I1116147 for pi0 and Lambda feed-down.
+
+2017-05-08  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add protection against leptons from QED FSR photon conversions
+	in assigning PartonicTop decay modes. Thanks to Markus Seidel for
+	the report and suggested fix.
+
+	* Reimplement FastJets methods in terms of new static helper functions.
+
+	* Add new mkClusterInputs, mkJet and mkJets static methods to
+	FastJets, to help with direct calls to FastJet where particle
+	lookup for constituents and ghost tags are required.
+
+	* Fix Doxygen config and Makefile target to allow working with
+	out-of-source builds. Thanks to Christian Holm Christensen.
+
+	* Improve DISLepton for HERA analyses: thanks to Andrii Verbytskyi for the patch!
+
+2017-05-02  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add binding to a pre-loaded analysis object if possible in Analysis::bookHisto1D() methods.
+
+	* Add AnalysisHandler::addData and readData methods for histo preloading.
+
+	* Extend and improve string functions for path handling.
+
+2017-03-30  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Replace non-template Analysis::refData functions with C++11 default T=Scatter2D.
+
+2017-03-29  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Allow yes/no and true/false values for LogX, etc. plot options.
+
+	* Add --errs as an alias for --mc-errs to rivet-mkhtml and rivet-cmphistos.
+
+2017-03-08  Peter Richardson <peter.richardson@durham.ac.uk>
+
+	* Added 6 analyses AMY_1990_I295160, HRS_1986_I18502, JADE_1983_I190818,
+	PLUTO_1980_I154270, TASSO_1989_I277658, TPC_1987_I235694 for charged multiplicity
+	in e+e- at CMS energies below the Z pole
+
+	* Added 2 analyses for charged multiplicity at the Z pole DELPHI_1991_I301657,
+	OPAL_1992_I321190
+
+	* Updated ALEPH_1991_S2435284 to plot the average charged multiplcity
+
+	* Added analyses OPAL_2004_I631361, OPAL_2004_I631361_qq, OPAL_2004_I648738 for
+	  gluon jets in e+e-, most need fictitious e+e- > g g process
+
+2017-03-29  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add Cut and functor selection args to HeavyHadrons accessor methods.
+
+2017-03-03  Andy Buckley  <andy.buckley@cern.ch>
+
+	* bin/rivet-mkanalysis: Add FastJets.hh include by default -- it's almost always used.
+
+2017-03-02  Andy Buckley  <andy.buckley@cern.ch>
+
+	* src/Analyses/CMS_2016_I1473674.cc: Patch from CMS to use partonic tops.
+
+	* src/Analyses/CMS_2015_I1370682.cc: Patch to inline jet finding from CMS.
+
+2017-03-01  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Convert DressedLeptons use of fromDecay to instead veto photons
+	that match fromHadron() || fromHadronicTau() -- meaning that
+	electrons and muons from leptonic taus will now be dressed.
+
+	* Move Particle and Jet std::function aliases to .fhh files, and
+	replace many uses of templates for functor arguments with
+	ParticleSelector meta-types instead.
+
+	* Move the canonical implementations of hasAncestorWith, etc. and
+	isLastWith, etc. from ParticleUtils.hh into Particle.
+
+	* Disable the event-to-event beam consistency check if the
+	ignore-beams mode is active.
+
+2017-02-27  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add BoolParticleAND, BoolJetOR, etc. functor combiners to
+	Tools/ParticleUtils.hh and Tools/JetUtils.hh.
+
+2017-02-24  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Mark ATLAS_2016_CONF_2016_078 and CMS_2016_PAS_SUS_16_14
+	analyses as validated, since their cutflows match the documentation.
+
+2017-02-22  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add aggregate signal regions to CMS_2016_PAS_SUS_16_14.
+
+2017-02-18  Andy Buckley  <andy.buckley@cern.ch>
+
+	* Add getEnvParam function, for neater use of environment variable
+	parameters with a required default.
+
+2017-02-05  Andy Buckley  <andy.buckley@cern.ch>
+
+       * Add HasBTag and HasCTag jet functors, with lower-case aliases.
+
 2017-01-21  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Removing lots of long-deprecated functions & methods.
 
 2017-01-18  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Use std::function in functor-expanded method signatures on JetAlg.
 
 2017-01-16  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Convert FinalState particles() accessors to use std::function
 	rather than a template arg for sorting, and add filtering functor
 	support -- including a mix of filtering and sorting functors. Yay
 	for C++11!
 
 	* Add ParticleEffFilter and JetEffFilter constructors from a double (encoding constant efficiency).
 
 	* Add Vector3::abseta()
 
 2016-12-13  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Version 2.5.3 release.
 
 2016-12-12  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Add cut in BZ calculation in OPAL 4 jet analysis. Paper is not clear
 	about treatment of parallel vectors, leads to division by zero and
 	nan-fill and subsequent YODA RangeError (OPAL_2001_S4553896)
 
 2016-12-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fix bugs in SmearedJets treatment of b & c tagging rates.
 
 	* Adding ATLAS_2016_I1467454 analysis (high-mass Drell-Yan at 8 TeV)
 
 	* Tweak to 'convert' call to improve the thumbnail quality from rivet-mkhtml/make-plots.
 
 2016-12-07  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Require Cython 0.24 or later.
 
 2016-12-02  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding L3_2004_I652683 (LEP 1 & 2 event shapes) and
 	LHCB_2014_I1262703 (Z+jet at 7 TeV).
 
 	* Adding leading dijet mass plots to MC_JetAnalysis (and all
 	derived classes). Thanks to Chris Gutschow!
 
 	* Adding CMS_2012_I1298807 (ZZ cross-section at 8 TeV),
 	CMS_2016_I1459051 (inclusive jet cross-sections at 13 TeV) and
 	CMS_PAS_FSQ_12_020 (preliminary 7 TeV leading-track underlying
 	event).
 
 	* Adding CDF_2015_1388868 (ppbar underlying event at 300, 900, and 1960 GeV)
 
 	* Adding ATLAS_2016_I1467230 (13 TeV min bias),
 	ATLAS_2016_I1468167 (13 TeV inelastic pp cross-section), and
 	ATLAS_2016_I1479760 (7 TeV pp double-parton scattering with 4
 	jets).
 
 2016-12-01  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding ALICE_2012_I1116147 (eta and pi0 pTs and ratio) and
 	ATLAS_2011_I929691 (7 TeV jet frag)
 
 2016-11-30  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fix bash bugs in rivet-buildplugin, including fixing the --cmd mode.
 
 2016-11-28  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add LHC Run 2 BSM analyses ATLAS_2016_CONF_2016_037 (3-lepton
 	and same-sign 2-lepton), ATLAS_2016_CONF_2016_054 (1-lepton +
 	jets), ATLAS_2016_CONF_2016_078 (ICHEP jets + MET),
 	ATLAS_2016_CONF_2016_094 (1-lepton + many jets), CMS_2013_I1223519
 	(alphaT + b-jets), and CMS_2016_PAS_SUS_16_14 (jets + MET).
 
 	* Provide convenience reversed-argument versions of apply and
 	declare methods, to allow presentational choice of declare syntax
 	in situations where the projection argument is very long, and
 	reduce requirements on the user's memory since this is one
 	situation in Rivet where there is no 'most natural' ordering
 	choice.
 
 2016-11-24  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding pTvec() function to 4-vectors and ParticleBase.
 
 	* Fix --pwd option of the rivet script
 
 2016-11-21  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add weights and scaling to Cutflow/s.
 
 2016-11-19  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add Et(const ParticleBase&) unbound function.
 
 2016-11-18  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fix missing YAML quote mark in rivet-mkanalysis.
 
 2016-11-15  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fix constness requirements on ifilter_select() and Particle/JetEffFilter::operator().
 
 	* src/Analyses/ATLAS_2016_I1458270.cc: Fix inverted particle efficiency filtering.
 
 2016-10-24  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add rough ATLAS and CMS photon reco efficiency functions from
 	Delphes (ATLAS and CMS versions are identical, hmmm)
 
 2016-10-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Tidying/fixing make-plots custom z-ticks code. Thanks to Dmitry Kalinkin.
 
 2016-10-03  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Fix SpiresID -> InspireID in some analyses (show-analysis pointed to
 	non-existing web page)
 
 2016-09-29  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Add Luminosity_fb to AnalysisInfo
 
 	* Added some keywords and Lumi to ATLAS_2016_I1458270
 
 2016-09-28  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Merge the ATLAS and CMS from-Delphes electron and muon tracking
 	efficiency functions into generic trkeff functions -- this is how
 	it should be.
 
 	* Fix return type typo in Jet::bTagged(FN) templated method.
 
 	* Add eta and pT cuts to ATLAS truth b-jet definition.
 
 	* Use rounding rather than truncation in Cutflow percentage efficiency printing.
 
 2016-09-28  Frank Siegert  <frank.siegert@cern.ch>
 
        * make-plots bugfix in y-axis labels for RatioPlotMode=deviation
 
 2016-09-27  Andy Buckley  <andy.buckley@cern.ch>
 
        * Add vector and scalar pT (rather than Et) to MissingMomentum.
 
 2016-09-27  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Analysis keyword machinery
 
 	* rivet -a @semileptonic
 
 	* rivet -a @semileptonic@^bdecays -a @semileptonic@^ddecays
 
 2016-09-22  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Release version 2.5.2
 
 2016-09-21  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add a requirement to DressedLeptons that the FinalState passed
 	as 'bareleptons' will be filtered to only contain charged leptons,
 	if that is not already the case. Thanks to Markus Seidel for the
 	suggestion.
 
 2016-09-21  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Add Simone Amoroso's plugin for hadron spectra (ALEPH_1995_I382179)
 
 	* Add Simone Amoroso's plugin for hadron spectra (OPAL_1993_I342766)
 
 2016-09-20  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Add CMS ttbar analysis from contrib, mark validated (CMS_2016_I1473674)
 
 	* Extend rivet-mkhtml --booklet to also work with pdfmerge
 
 2016-09-20  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fix make-plots automatic YMax calculation, which had a typo from code cleaning (mea culpa!).
 
 	* Fix ChargedLeptons projection, which failed to exclude neutrinos!!! Thanks to Markus Seidel.
 
 	* Add templated FN filtering arg versions of the Jet::*Tags() and
 	Jet::*Tagged() functions.
 
 2016-09-18  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add CMS partonic top analysis (CMS_2015_I1397174)
 
 2016-09-18  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Add L3 xp analysis of eta mesons, thanks Simone (L3_1992_I336180)
 
 	* Add D0 1.8 TeV jet shapes analysis, thanks Simone (D0_1995_I398175)
 
 2016-09-17  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add has{Ancestor,Parent,Child,Descendant}With functions and
 	HasParticle{Ancestor,Parent,Child,Descendant}With functors.
 
 2016-09-16  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Add ATLAS 8TeV ttbar analysis from contrib (ATLAS_2015_I1404878)
 
 2016-09-16  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add particles(GenParticlePtr) to RivetHepMC.hh
 
 	* Add hasParent, hasParentWith, and hasAncestorWith to Particle.
 
 2016-09-15  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Add ATLAS 8TeV dijet analysis from contrib (ATLAS_2015_I1393758)
 
 	* Add ATLAS 8TeV 'number of tracks in jets' analysis from contrib (ATLAS_2016_I1419070)
 
 	* Add ATLAS 8TeV g->H->WW->enumunu analysis from contrib (ATLAS_2016_I1444991)
 
 2016-09-14  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Explicit std::toupper and std::tolower to make clang happy
 
 2016-09-14  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add ATLAS Run 2 0-lepton SUSY and monojet search papers (ATLAS_2016_I1452559, ATLAS_2016_I1458270)
 
 2016-09-13  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add experimental Cutflow and Cutflows objects for BSM cut tracking.
 
 	* Add 'direct' versions of any, all, none to Utils.hh, with an
 	implicity bool() transforming function.
 
 2016-09-13  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Add and mark validated B+ to omega analysis (BABAR_2013_I1116411)
 
 	* Add and mark validated D0 to pi- analysis (BABAR_2015_I1334693)
 
 	* Add a few more particle names and use PID names in recently added
 	  analyses
 
 	* Add Simone's OPAL b-frag analysis (OPAL_2003_I599181) after some
 	cleanup and heavy usage of new features
 
 	* Restructured DELPHI_2011_I890503 in the same manner --- picks up
 	a few more B-hadrons now (e.g. 20523 and such)
 
 	* Clean up and add ATLAS 8TeV MinBias (from contrib ATLAS_2016_I1426695)
 
 2016-09-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add a static constexpr DBL_NAN to Utils.hh for convenience, and
 	move some utils stuff out of MathHeader.hh
 
 2016-09-12  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Add count function to Tools/Utils.h
 
 	* Add and mark validated B0bar and Bminus-decay to pi analysis (BELLE_2013_I1238273)
 
 	* Add and mark validated B0-decay analysis (BELLE_2011_I878990)
 
 	* Add and mark validated B to D decay analysis (BELLE_2011_I878990)
 
 2016-09-08  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add C-array version of multi-target Analysis::scale() and normalize(), and fix (semantic) constness.
 
 	* Add == and != operators for cuts applied to integers.
 
 	* Add missing delta{Phi,Eta,Rap}{Gtr,Less} functors to ParticleBaseUtils.hh
 
 2016-09-07  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add templated functor filtering args to the Particle parent/child/descendent methods.
 
 2016-09-06  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add ATLAS Run 1 medium and tight electron ID efficiency functions.
 
 	* Update configure scripts to use newer (Py3-safe) Python testing macros.
 
 2016-09-02  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add isFirstWith(out), isLastWith(out) functions, and functor
 	wrappers, using Cut and templated function/functor args.
 
 	* Add Particle::parent() method.
 
 	* Add using import/typedef of HepMC *Ptr types (useful step for HepMC 2.07 and 3.00).
 
 	* Various typo fixes (and canonical renaming) in ParticleBaseUtils functor collection.
 
 	* Add ATLAS MV2c10 and MV2c20 b-tagging effs to SmearingFunctions.hh collection.
 
 2016-09-01  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add a PartonicTops projection.
 
 	* Add overloaded versions of the Event::allParticles() method with
 	selection Cut or templated selection function arguments.
 
 2016-08-25  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add rapidity scheme arg to DeltaR functor constructors.
 
 2016-08-23  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Provide an Analysis::bookCounter(d,x,y, title) function, for
 	convenience and making the mkanalysis template valid.
 
 	* Improve container utils functions, and provide combined
 	remove_if+erase filter_* functions for both select- and
 	discard-type selector functions.
 
 2016-08-22  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Bugfix in rivet-mkhtml (NoneType: ana.spiresID() --> spiresid)
 
 	* Added <numeric> include to Rivet/Tools/Utils.h to make gcc6 happy
 
 2016-08-22  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add efffilt() functions and Particle/JetEffFilt functors to SmearingFunctions.hh
 
 2016-08-20  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding filterBy methods for Particle and Jet which accept
 	generic boolean functions as well as the Cut specialisation.
 
 2016-08-18  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add a Jet::particles(Cut&) method, for inline filtering of jet constituents.
 
 	* Add 'conjugate' behaviours to container head and tail functions
 	via negative length arg values.
 
 2016-08-15  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add convenience headers for including all final-state and
 	smearing projections, to save user typing.
 
 2016-08-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add standard MET functions for ATLAS R1 (and currently copies
 	for R2 and CMS).
 
 	* Add lots of vector/container helpers for e.g. container slicing,
 	summing, and min/max calculation.
 
 	* Adapt SmearedMET to take *two* arguments, since SET is typically
 	used to calculate MET resolution.
 
 	* Adding functors for computing vector & ParticleBase differences
 	w.r.t. another vector.
 
 2016-08-12  Holger Schulz  <holger.schulz@cern.ch>
 
         * Implemented a few more cuts in prompt photon analysis
 	(CDF_1993_S2742446) but to no avail, the rise of the data towards
 	larger costheta values cannot be reproduced --- maybe this is a
 	candidate for more scrutiny and using the boosting machinery such that
 	the c.m. cuts can be done in a non-approximate way
 
 2016-08-11  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Rename CDF_2009_S8383952 to CDF_2009_I856131 due to invalid Spires
 	entry.
 
 	* Add InspireID to all analysis known by their Spires key
 
 2016-08-09  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Release 2.5.1
 
 2016-08-08  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add a simple MC_MET analysis for out-of-the-box MET distribution testing.
 
 2016-08-08  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Add DELPHI_2011_I890503 b-quark fragmentation function measurement,
 	which superseded DELPHI_2002_069_CONF_603. The latter is marked
 	OBSOLETE.
 
 2016-08-05  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Use Jet mass and energy smearing in CDF_1997_... six-jet analysis,
 	mark validated.
 
 	* Mark CDF_2001_S4563131 validated
 
 	* D0_1996_S3214044 --- cut on jet Et rather than pT, fix filling of
 	costheta and theta plots, mark validated. Concerning the jet
 	algorithm, I tried with the implementation of fastjet
 	fastjet/D0RunIConePlugin.hh but that really does not help.
 
 	* D0_1996_S3324664 --- fix normalisations, sorting jets properly now,
 	cleanup and mark validated.
 
 
 2016-08-04  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Use Jet mass and energy smearing in CDF_1996_S310 ... jet properties
 	analysis. Cleanup analysis and mark validated. Added some more run info.
 	The same for CDF_1996_S334... (pretty much the same cuts, different
 	observables).
 
 	* Minor fixes in SmearedJets projection
 
 2016-08-03  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Protect SmearedJets against loss of tagging information if a
 	momentum smearing function is used (rather than a dedicated Jet
 	smearing fn) via implicit casts.
 
 2016-08-02  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add SmearedMET projection, wrapping MissingMomentum.
 
 	* Include base truth-level projections in SmearedParticles/Jets compare() methods.
 
 2016-07-29  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Rename TOTEM_2012_002 to proper TOTEM_2012_I1220862 name.
 
 	* Remove conditional building of obsolete, preliminary and
 	unvalidated analyses. Now always built, since there are sufficient
 	warnings.
 
 2016-07-28  Holger Schulz  <holger.schulz@cern.ch>
 
         * Mark D0_2000... W pT analysis validated
 
 	* Mark LHCB_2011_S919... phi meson analysis validated
 
 2016-07-25  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add unbound accessors for momentum properties of ParticleBase objects.
 
 	* Add Rivet/Tools/ParticleBaseUtils.hh to collect tools like functors for particle & jet filtering.
 
 	* Add vector<ptr> versions of Analysis::scale() and ::normalize(), for batched scaling.
 
 	* Add Analysis::scale() and Analysis::divide() methods for Counter types.
 
 	* Utils.hh: add a generic sum() function for containers, and use auto in loop to support arrays.
 
 	* Set data path as well as lib path in scripts with --pwd option, and use abs path to $PWD.
 
 	* Add setAnalysisDataPaths and addAnalysisDataPath to RivetPaths.hh/cc and Python.
 
 	* Pass absolutized RIVET_DATA_PATH from rivet-mkhtml to rivet-cmphistos.
 
 2016-07-24  Holger Schulz  <holger.schulz@cern.ch>
 
         * Mark CDF_2008_S77... b jet shapes validated
 
 	* Added protection against low stats yoda exception
 	  in finalize for that analysis
 
 2016-07-22  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fix newly introduced bug in make-plots which led to data point
 	markers being skipped for all but the last bin.
 
 2016-07-21  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add pid, abspid, charge, abscharge, charge3, and abscharge3 Cut
 	enums, handled by Particle cut targets.
 
 	* Add abscharge() and abscharge3() methods to Particle.
 
 	* Add optional Cut and duplicate-removal flags to Particle children & descendants methods.
 
 	* Add unbound versions of Particle is* and from* methods, for easier functor use.
 
 	* Add Particle::isPrompt() as a member rather than unbound function.
 
 	* Add protections against -ve mass from numerical precision errors in smearing functions.
 
 2016-07-20  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Move several internal system headers into the include/Rivet/Tools directory.
 
 	* Fix median-computing safety logic in ATLAS_2010_S8914702 and
 	tidy this and @todo markers in several similar analyses.
 
 	* Add to_str/toString and stream functions for Particle, and a bit
 	of Particle util function reorganisation.
 
 	* Add isStrange/Charm/Bottom PID and Particle functions.
 
 	* Add RangeError exception throwing from MathUtils.hh stats
 	functions if given empty/mismatched datasets.
 
 	* Add Rivet/Tools/PrettyPrint.hh, based on https://louisdx.github.io/cxx-prettyprint/
 
 	* Allow use of path regex group references in .plot file keyed values.
 
 2016-07-20  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Fix the --nskip behaviour on the main rivet script.
 
 2016-07-07  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Release version 2.5.0
 
 2016-07-01  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fix pandoc interface flag version detection.
 
 2016-06-28  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Release version 2.4.3
 
 	* Add ATLAS_2016_I1468168 early ttbar fully leptonic fiducial
 	cross-section analysis at 13 TeV.
 
 2016-06-21  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add ATLAS_2016_I1457605 inclusive photon analysis at 8 TeV.
 
 2016-06-15  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add a --show-bibtex option to the rivet script, for convenient
 	outputting of a BibTeX db for the used analyses.
 
 2016-06-14  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add and rename 4-vector boost calculation methods: new methods
 	beta, betaVec, gamma & gammaVec are now preferred to the
 	deprecated boostVector method.
 
 2016-06-13  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add and use projection handling methods declare(proj, pname) and
 	apply<PROJ>(evt, pname) rather than the longer and explicitly
 	'projectiony' addProjection & applyProjection.
 
 	* Start using the DEFAULT_RIVET_ANALYSIS_CTOR macro (newly created
 	preferred alias to long-present DEFAULT_RIVET_ANA_CONSTRUCTOR)
 
 	* Add a DEFAULT_RIVET_PROJ_CLONE macro for implementing the
 	clone() method boiler-plate code in projections.
 
 2016-06-10  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add a NonPromptFinalState projection, and tweak the
 	PromptFinalState and unbound Particle functions a little in
 	response. May need some more finessing.
 
 	* Add user-facing aliases to ProjectionApplier add, get, and apply
 	methods... the templated versions of which can now be called
 	without using the word 'projection', which makes the function
 	names a bit shorter and pithier, and reduces semantic repetition.
 
 2016-06-10  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding ATLAS_2015_I1397635 Wt at 8 TeV analysis.
 
 	* Adding ATLAS_2015_I1390114 tt+b(b) at 8 TeV analysis.
 
 2016-06-09  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Downgrade some non-fatal error messages from ERROR to WARNING
 	status, because *sigh* ATLAS's software treats any appearance of
 	the word 'ERROR' in its log file as a reason to report the job as
 	failed (facepalm).
 
 2016-06-07  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding ATLAS 13 TeV minimum bias analysis, ATLAS_2016_I1419652.
 
 2016-05-30  Andy Buckley  <andy.buckley@cern.ch>
 
 	* pyext/rivet/util.py: Add pandoc --wrap/--no-wrap CLI detection
 	and batch conversion.
 
 	* bin/rivet: add -o as a more standard 'output' option flag alias to -H.
 
 2016-05-23  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Remove the last ref-data bin from table 16 of
 	ATLAS_2010_S8918562, due to data corruption. The corresponding
 	HepData record will be amended by ATLAS.
 
 2016-05-12  Holger Schulz  <holger.schulz@durham.ac.uk>
 
         * Mark ATLAS_2012_I1082009 as validated after exhaustive tests with
 	Pythia8 and Sherpa in inclusive QCD mode.
 
 2016-05-11  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Specialise return error codes from the rivet script.
 
 2016-05-11  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add Event::allParticles() to provide neater (but not *helpful*)
 	access to Rivet-wrapped versions of the raw particles in the
 	Event::genEvent() record, and hence reduce HepMC digging.
 
 2016-05-05  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Version 2.4.2 release!
 
 	* Update SLD_2002_S4869273 ref data to match publication erratum,
 	now updated in HepData. Thanks to Peter Skands for the report and
 	Mike Whalley / Graeme Watt for the quick fix and heads-up.
 
 2016-04-27  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add CMS_2014_I1305624 event shapes analysis, with standalone
 	variable calculation struct embedded in an unnamed namespace.
 
 2016-04-19  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Various clean-ups and fixes in ATLAS analyses using isolated
 	photons with median pT density correction.
 
 2016-04-18  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add transformBy(LT) methods to Particle and Jet.
 
 	* Add mkObjectTransform and mkFrameTransform factory methods to LorentzTransform.
 
 2016-04-17  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add null GenVertex protection in Particle children & descendants methods.
 
 2016-04-15  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add ATLAS_2015_I1397637, ATLAS 8 TeV boosted top cross-section vs. pT
 
 2016-04-14  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add a --no-histos argument to the rivet script.
 
 2016-04-13  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add ATLAS_2015_I1351916 (8 TeV Z FB asymmetry) and
 	ATLAS_2015_I1408516 (8 TeV Z phi* and pT) analyses, and their _EL,
 	_MU variants.
 
 2016-04-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Patch PID utils for ordering issues in baryon decoding.
 
 2016-04-11  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Actually implement ZEUS_2001_S4815815... only 10 years late!
 
 2016-04-08  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add a --guess-prefix flag to rivet-config, cf. fastjet-config.
 
 	* Add RIVET_DATA_PATH variable and related functions in C++ and
 	Python as a common first-fallback for RIVET_REF_PATH,
 	RIVET_INFO_PATH, and RIVET_PLOT_PATH.
 
 	* Add --pwd options to rivet-mkhtml and rivet-cmphistos
 
 2016-04-07  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Remove implicit conventional event rotation for HERA -- this
 	needs to be done explicitly from now.
 
 	* Add comBoost functions and methods to Beam.hh, and tidy
 	LorentzTransformation.
 
 	* Restructure Beam projection functions for beam particle and
 	sqrtS extraction, and add asqrtS functions.
 
 	* Rename and improve PID and Particle Z,A,lambda functions ->
 	nuclZ,nuclA,nuclNlambda.
 
 2016-04-05  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Improve binIndex function, with an optional argument to allow
 	overflow lookup, and add it to testMath.
 
 	* Adding setPE, setPM, setPtEtaPhiM, etc. methods and
 	corresponding mk* static methods to FourMomentum, as well as
 	adding more convenience aliases and vector attributes for
 	completeness. Coordinate conversion functions taken from
 	HEPUtils::P4. New attrs also mapped to ParticleBase.
 
 2016-03-29  Andy Buckley  <andy.buckley@cern.ch>
 
 	* ALEPH_1996_S3196992.cc, ATLAS_2010_S8914702.cc,
 	ATLAS_2011_I921594.cc, ATLAS_2011_S9120807.cc,
 	ATLAS_2012_I1093738.cc, ATLAS_2012_I1199269.cc,
 	ATLAS_2013_I1217867.cc, ATLAS_2013_I1244522.cc,
 	ATLAS_2013_I1263495.cc, ATLAS_2014_I1307756.cc,
 	ATLAS_2015_I1364361.cc, CDF_2008_S7540469.cc,
 	CMS_2015_I1370682.cc, MC_JetSplittings.cc, STAR_2006_S6870392.cc:
 	Updates for new FastJets interface, and other cleaning.
 
 	* Deprecate 'standalone' FastJets constructors -- they are
 	misleading.
 
 	* More improvements around jets, including unbound conversion and
 	filtering routines between collections of Particles, Jets, and
 	PseudoJets.
 
 	* Place 'Cut' forward declaration in a new Cuts.fhh header.
 
 	* Adding a Cuts::OPEN extern const (a bit more standard- and
 	constant-looking than Cuts::open())
 
 2016-03-28  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Improvements to FastJets constructors, including specification
 	of optional AreaDefinition as a constructor arg, disabling dodgy
 	no-FS constructors which I suspect don't work properly in the
 	brave new world of automatic ghost tagging, using a bit of
 	judicious constructor delegation, and completing/exposing use of
 	shared_ptr for internal memory management.
 
 2016-03-26  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Remove Rivet/Tools/RivetBoost.hh and Boost references from
 	rivet-config, rivet-buildplugin, and configure.ac. It's gone ;-)
 
 	* Replace Boost assign usage with C++11 brace initialisers. All
 	Boost use is gone from Rivet!
 
 	* Replace Boost lexical_cast and string algorithms.
 
 2016-03-25  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Bug-fix in semi-leptonic top selection of CMS_2015_I1370682.
 
 2016-03-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Allow multi-line major tick labels on make-plots linear x and y
 	axes. Linebreaks are indicated by \n in the .dat file.
 
 2016-03-09  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Release 2.4.1
 
 2016-03-03  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add a --nskip flag to the rivet command-line tool, to allow
 	processing to begin in the middle of an event file (useful for
 	batched processing of large files, in combination with --nevts)
 
 2016-03-03  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Add ATLAS 7 TeV event shapes in Z+jets analysis (ATLAS_2016_I1424838)
 
 2016-02-29  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Update make-plots to use multiprocessing rather than threading.
 
 	* Add FastJets::trimJet method, thanks to James Monk for the
 	suggestion and patch.
 
 	* Add new preferred name PID::charge3 in place of
 	PID::threeCharge, and also convenience PID::abscharge and
 	PID::abscharge3 functions -- all derived from changes in external
 	HEPUtils.
 
 	* Add analyze(const GenEvent*) and analysis(string&) methods to
 	AnalysisHandler, plus some docstring improvements.
 
 2016-02-23  Andy Buckley  <andy.buckley@cern.ch>
 
 	* New ATLAS_2015_I1394679 analysis.
 
 	* New MC_HHJETS analysis from Andreas Papaefstathiou.
 
 	* Ref data updates for ATLAS_2013_I1219109, ATLAS_2014_I1312627,
 	and ATLAS_2014_I1319490.
 
 	* Add automatic output paging to 'rivet --show-analyses'
 
 2016-02-16  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Apply cross-section unit fixes and plot styling improvements to
 	ATLAS_2013_I1217863 analyses, thanks to Christian Gutschow.
 
 	* Fix to rivet-cmphistos to avoid overwriting RatioPlotYLabel if
 	already set via e.g. the PLOT pseudo-file. Thanks to Johann Felix
 	v. Soden-Fraunhofen.
 
 2016-02-15  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add Analysis::bookCounter and some machinery in rivet-cmphistos
 	to avoid getting tripped up by unplottable (for now) data types.
 
 	* Add --font and --format options to rivet-mkhtml and make-plots,
 	to replace the individual flags used for that purpose. Not fully
 	cleaned up, but a necessary step.
 
 	* Add new plot styling options to rivet-cmphistos and
 	rivet-mkhtml. Thanks to Gavin Hesketh.
 
 	* Modify rivet-cmphistos and rivet-mkhtml to apply plot hiding if
 	*any* path component is hidden by an underscore prefix, as
 	implemented in AOPath, plus other tidying using new AOPath
 	methods.
 
 	* Add pyext/rivet/aopaths.py, containing AOPath object for central
 	& standard decoding of Rivet-standard analysis object path
 	structures.
 
 2016-02-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Update ParticleIdUtils.hh (i.e. PID:: functions) to use the
 	functions from the latest version of MCUtils' PIDUtils.h.
 
 2016-01-15  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Change rivet-cmphistos path matching logic from match to search
 	(user can add explicit ^ marker if they want match semantics).
 
 2015-12-20  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Improve linspace (and hence also logspace) precision errors by
 	using multiplication rather than repeated addition to build edge
 	list (thanks to Holger Schulz for the suggestion).
 
 2015-12-15  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add cmphistos and make-plots machinery for handling 'suffix'
 	variations on plot paths, currently just by plotting every line,
 	with the variations in a 70% faded tint.
 
 	* Add Beam::pv() method for finding the beam interaction primary
 	vertex 4-position.
 
 	* Add a new Particle::setMomentum(E,x,y,z) method, and an origin
 	position member which is automatically populated from the
 	GenParticle, with access methods corresponding to the momentum
 	ones.
 
 2015-12-10  Andy Buckley  <andy.buckley@cern.ch>
 
 	* make-plots: improve custom tick attribute handling, allowing
 	empty lists. Also, any whitespace now counts as a tick separator
 	-- explicit whitespace in labels should be done via ~ or similar
 	LaTeX markup.
 
 2015-12-04  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Pro-actively use -m/-M arguments when initially loading
 	histograms in mkhtml, *before* passing them to cmphistos.
 
 2015-12-03  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Move contains() and has_key() functions on STL containers from std to Rivet namespaces.
 
 	* Adding IsRef attributes to all YODA refdata files; this will be
 	used to replace the /REF prefix in Rivet v3 onwards. The migration
 	has also removed leading # characters from BEGIN/END blocks, as
 	per YODA format evolution: new YODA versions as required by
 	current Rivet releases are able to read both the old and new
 	formats.
 
 2015-12-02  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add handling of a command-line PLOT 'file' argument to rivet-mkhtml, cf. rivet-cmphistos.
 
 	* Improvements to rivet-mkhtml behaviour re. consistency with
 	rivet-cmphistos in how muti-part histo paths are decomposed into
 	analysis-name + histo name, and removal of 'NONE' strings.
 
 2015-11-30  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Relax rivet/plotinfo.py pattern matching on .plot file
 	components, to allow leading whitespace and around = signs, and to
 	make the leading # optional on BEGIN/END blocks.
 
 2015-11-26  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Write out intermediate histogram files by default, with event interval of 10k.
 
 2015-11-25  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Protect make-plots against lock-up due to partial pstricks command when there are no data points.
 
 2015-11-17  Andy Buckley  <andy.buckley@cern.ch>
 
 	* rivet-cmphistos: Use a ratio label that doesn't mention 'data' when plotting MC vs. MC.
 
 2015-11-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Tweak plot and subplot sizing defaults in make-plots so the
 	total canvas is always the same size by default.
 
 2015-11-10  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Handle 2D histograms better in rivet-cmphistos (since they can't be overlaid)
 
 2015-11-05  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Allow comma-separated analysis name lists to be passed to a single -a/--analysis/--analyses option.
 
 	* Convert namespace-global const variables to be static, to suppress compiler warnings.
 
 	* Use standard MAX_DBL and MAX_INT macros as a source for MAXDOUBLE and MAXINT, to suppress GCC5 warnings.
 
 2015-11-04  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Adding LHCB inelastic xsection measurement (LHCB_2015_I1333223)
 
 	* Adding ATLAS colour flow in ttbar->semileptonic measurement (ATLAS_2015_I1376945)
 
 2015-10-07  Chris Pollard  <cpollard@cern.ch>
 
 	* Release 2.4.0
 
 2015-10-06  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Adding CMS_2015_I1327224 dijet analysis (Mjj>2 TeV)
 
 2015-10-03  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Adding CMS_2015_I1346843 Z+gamma
 
 2015-09-30  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Important improvement in FourVector & FourMomentum: new reverse()
 	method to return a 4-vector in which only the spatial component
 	has been inverted cf. operator- which flips the t/E component as
 	well.
 
 2015-09-28  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Adding D0_2000_I503361 ZPT at 1800 GeV
 
 2015-09-29  Chris Pollard  <cpollard@cern.ch>
 
 	* Adding ATLAS_2015_CONF_2015_041
 
 2015-09-29  Chris Pollard  <cpollard@cern.ch>
 
 	* Adding ATLAS_2015_I1387176
 
 2015-09-29  Chris Pollard  <cpollard@cern.ch>
 
 	* Adding ATLAS_2014_I1327229
 
 2015-09-28  Chris Pollard  <cpollard@cern.ch>
 
 	* Adding ATLAS_2014_I1326641
 
 2015-09-28  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Adding CMS_2013_I1122847 FB assymetry in DY analysis
 
 2015-09-28  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding CMS_2015_I1385107 LHA pp 2.76 TeV track-jet underlying event.
 
 2015-09-27  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding CMS_2015_I1384119 LHC Run 2 minimum bias dN/deta with no B field.
 
 2015-09-25  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding TOTEM_2014_I1328627 forward charged density in eta analysis.
 
 2015-09-23  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add CMS_2015_I1310737 Z+jets analysis.
 
 	* Allow running MC_{W,Z}INC, MC_{W,Z}JETS as separate bare lepton
 	analyses.
 
 2015-09-23  Andy Buckley  <andy.buckley@cern.ch>
 
 	* FastJets now allows use of FastJet pure ghosts, by excluding
 	them from the constituents of Rivet Jet objects. Thanks to James
 	Monk for raising the issue and providing a patch.
 
 2015-09-15  Andy Buckley  <andy.buckley@cern.ch>
 
 	* More MissingMomentum changes: add optional 'mass target'
 	argument when retrieving the vector sum as a 4-momentum, with the
 	mass defaulting to 0 rather than sqrt(sum(E)^2 - sum(p)^2).
 
 	* Require Boost 1.55 for robust compilation, as pointed out by
 	Andrii Verbytskyi.
 
 2015-09-10  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Allow access to MissingMomentum projection via WFinder.
 
 	* Adding extra methods to MissingMomentum, to make it more user-friendly.
 
 2015-09-09  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fix factor of 2 in LHCB_2013_I1218996 normalisation, thanks to
 	Felix Riehn for the report.
 
 2015-08-20  Frank Siegert  <frank.siegert@cern.ch>
 
 	* Add function to ZFinder to retrieve all fiducial dressed
 	leptons, e.g. to allow vetoing on a third one (proposed by
 	Christian Gutschow).
 
 2015-08-18  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Rename xs and counter AOs to start with underscores, and modify
 	rivet-cmphistos to skip AOs whose basenames start with _.
 
 2015-08-17  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add writing out of cross-section and total event counter by
 	default. Need to add some name protection to avoid them being
 	plotted.
 
 2015-08-16  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add templated versions of Analysis::refData() to use data types
 	other than Scatter2DPtr, and convert the cached ref data store to
 	generic AnalysisObjectPtrs to make it possible.
 
 2015-07-29  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add optional Cut arguments to all the Jet tag methods.
 
 	* Add exception handling and pre-emptive testing for a
 	non-writeable output directory (based on patch from Lukas
 	Heinrich).
 
 2015-07-24  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Version 2.3.0 release.
 
 2015-07-02  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Tidy up ATLAS higgs combination analysis.
 	* Add ALICE kaon, pion analysis (ALICE_2015_I1357424)
 	* Add ALICE strange baryon analysis (ALICE_2014_I1300380)
 	* Add CDF ZpT measurement in Z->ee events analysis (CDF_2012_I1124333)
 	* Add validated ATLAS W+charm measurement (ATLAS_2014_I1282447)
 	* Add validated CMS jet and dijet analysis (CMS_2013_I1208923)
 
 2015-07-01  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Define a private virtual operator= on Projection, to block
 	'sliced' accidental value copies of derived class instances.
 
 	* Add new muon-in-jet options to FastJet constructors, pass that
 	and invisibles enums correctly to JetAlg, tweak the default
 	strategies, and add a FastJets constructor from a
 	fastjet::JetDefinition (while deprecating the plugin-by-reference
 	constructor).
 
 2015-07-01  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Add D0 phi* measurement (D0_2015_I1324946).
 
 	* Remove WUD and MC_PHOTONJETUE analyses
 
 	* Don't abort ATLAS_2015_I1364361 if there is no stable Higgs
 	  print a warning instead and veto event
 
 2015-07-01  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add all, none, from-decay muon filtering options to JetAlg and
 	FastJets.
 
 	* Rename NONPROMPT_INVISIBLES to DECAY_INVISIBLES for clarity &
 	extensibility.
 
 	* Remove FastJets::ySubJet, splitJet, and filterJet methods --
 	they're BDRS-paper-specific and you can now use the FastJet
 	objects directly to do this and much more.
 
 	* Adding InvisiblesStrategy to JetAlg, using it rather than a bool
 	in the useInvisibles method, and updating FastJets to use this
 	approach for its particle filtering and to optionally use the enum
 	in the constructor arguments. The new default invisibles-using
 	behaviour is to still exclude _prompt_ invisibles, and the default
 	is still to exclude them all. Only one analysis
 	(src/Analyses/STAR_2006_S6870392.cc) required updating, since it
 	was the only one to be using the FastJets legacy seed_threshold
 	constructor argument.
 
 	* Adding isVisible method to Particle, taken from
 	VisibleFinalState (which now uses this).
 
 2015-06-30  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Marking many old & superseded ATLAS analyses as obsolete.
 
 	* Adding cmpMomByMass and cmpMomByAscMass sorting functors.
 
 	* Bump version to 2.3.0 and require YODA > 1.4.0 (current head at
 	time of development).
 2015-06-08  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add handling of -m/-M flags on rivet-cmphistos and rivet-mkhtml,
 	moving current rivet-mkhtml -m/-M to -a/-A (for analysis name
 	pattern matching). Requires YODA head (will be YODA 1.3.2 of
 	1.4.0).
 
 	* src/Analyses/ATLAS_2015_I1364361.cc: Now use the built-in prompt
 	photon selecting functions.
 
 	* Tweak legend positions in MC_JETS .plot file.
 
 	* Add a bit more debug output from ZFinder and WFinder.
 
 2015-05-24  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Normalisation discussion concerning ATLAS_2014_I1325553
 	is resolved. Changed YLabel accordingly.
 
 2015-05-19  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Add (preliminary) ATLAS combined Higgs analysis
 	(ATLAS_2015_I1364361). Data will be updated and more
 	histos added as soon as paper is published in journal.
 	For now using data taken from public ressource
 	https://atlas.web.cern.ch/Atlas/GROUPS/PHYSICS/PAPERS/HIGG-2014-11/
 
 2015-05-19  Peter Richardson <peter.richardson@durham.ac.uk>
 
 	* Fix ATLAS_2014_I1325553 normalisation of histograms was wrong by
 	factor of two |y| vs y problem
 
 2015-05-01  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fix MC_HJETS/HINC/HKTSPLITTINGS analyses to (ab)use the ZFinder
 	with a mass range of 115-135 GeV and a mass target of 125 GeV (was
 	previously 115-125 and mass target of mZ)
 
 2015-04-30  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Removing uses of boost::assign::list_of, preferring the existing
 	comma-based assign override for now, for C++11 compatibility.
 
 	* Convert MC_Z* analysis finalize methods to use scale() rather than normalize().
 
 2015-04-01  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Add CMS 7 TeV rapidity gap analysis (CMS_2015_I1356998).
 
 	* Remove FinalState Projection.
 
 2015-03-30  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Add ATLAS 7 TeV photon + jets analysis (ATLAS_2013_I1244522).
 
 2015-03-26  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Updates for HepMC 2.07 interface constness improvements.
 
 2015-03-25  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Add ATLAS double parton scattering in W+2j analysis (ATLAS_2013_I1216670).
 
 2015-03-24  Andy Buckley  <andy.buckley@cern.ch>
 
 	* 2.2.1 release!
 
 2015-03-23  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Add ATLAS differential Higgs analysis (ATLAS_2014_I1306615).
 
 2015-03-19  Chris Pollard <cpollard@cern.ch>
 
 	* Add ATLAS V+gamma analyses (ATLAS_2013_I1217863)
 
 2015-03-20  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding ATLAS R-jets analysis i.e. ratios of W+jets and Z+jets
 	observables (ATLAS_2014_I1312627 and _EL, _MU variants)
 
 	* include/Rivet/Tools/ParticleUtils.hh: Adding same/oppSign and
 	same/opp/diffCharge functions, operating on two Particles.
 
 	* include/Rivet/Tools/ParticleUtils.hh: Adding HasAbsPID functor
 	and removing optional abs arg from HasPID.
 
 2015-03-19  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Mark ATLAS_2012_I1083318 as VALIDATED and fix d25-x01-y02 ref data.
 
 2015-03-19  Chris Pollard <cpollard@cern.ch>
 
 	* Add ATLAS W and Z angular analyses (ATLAS_2011_I928289)
 
 2015-03-19  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add LHCb charged particle multiplicities and densities analysis (LHCB_2014_I1281685)
 
 	* Add LHCb Z y and phi* analysis (LHCB_2012_I1208102)
 
 2015-03-19  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Add ATLAS dijet analysis (ATLAS_2014_I1325553).
 
 	* Add ATLAS Z pT analysis (ATLAS_2014_I1300647).
 
 	* Add ATLAS low-mass Drell-Yan analysis (ATLAS_2014_I1288706).
 
 	* Add ATLAS gap fractions analysis (ATLAS_2014_I1307243).
 
 2015-03-18  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding CMS_2014_I1298810 and CMS_2014_I1303894 analyses.
 
 2015-03-18  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Add PDG_TAUS analysis which makes use of the TauFinder.
 
 	* Add ATLAS 'traditional' Underlying Event in Z->mumu analysis (ATLAS_2014_I1315949).
 
 2015-03-18  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Change UnstableFinalState duplicate resolution to use the last
 	in a chain rather than the first.
 
 2015-03-17  Holger Schulz  <holger.schulz@durham.ac.uk>
 
 	* Update Taufinder to use decaytyoe (can be HADRONIC, LEPTONIC or
 	ANY), in FastJet.cc --- set TauFinder mode to hadronic for tau-tagging
 
 2015-03-16  Chris Pollard  <cpollard@cern.ch>
 
 	* Removed fuzzyEquals() from Vector3::angle()
 
 2015-03-16  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding Cuts-based constructor to PrimaryHadrons.
 
 	* Adding missing compare() method to HeavyHadrons projection.
 
 2015-03-15  Chris Pollard  <cpollard@cern.ch>
 
 	* Adding FinalPartons projection which selects the quarks and
 	gluons immediately before hadronization
 
 2015-03-05  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding Cuts-based constructors and other tidying in UnstableFinalState and HeavyHadrons
 
 2015-03-03  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add support for a PLOT meta-file argument to rivet-cmphistos.
 
 2015-02-27  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Improved time reporting.
 
 2015-02-24  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add Particle::fromHadron and Particle::fromPromptTau, and add a
 	boolean 'prompt' argument to Particle::fromTau.
 
 	* Fix WFinder use-transverse-mass property setting. Thanks to Christian Gutschow.
 
 2015-02-04  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add more protection against math domain errors with log axes.
 
 	* Add some protection against nan-valued points and error bars in make-plots.
 
 2015-02-03  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Converting 'bitwise' to 'logical' Cuts combinations in all analyses.
 
 2015-02-02  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Use vector MET rather than scalar VET (doh...) in WFinder
 	cut. Thanks to Ines Ochoa for the bug report.
 
 	* Updating and tidying analyses with deprecation warnings.
 
 	* Adding more Cuts/FS constructors for Charged,Neutral,UnstableFinalState.
 
 	* Add &&, || and ! operators for without-parens-warnings Cut
 	combining. Note these don't short-circuit, but this is ok since
 	Cut comparisons don't have side-effects.
 
 	* Add absetaIn, absrapIn Cut range definitions.
 
 	* Updating use of sorted particle/jet access methods and cmp
 	functors in projections and analyses.
 
 2014-12-09  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding a --cmd arg to rivet-buildplugin to allow the output
 	paths to be sed'ed (to help deal with naive Grid
 	distribution). For example BUILDROOT=`rivet-config --prefix`;
 	rivet-buildplugin PHOTONS.cc --cmd | sed -e
 	"s:$BUILDROOT:$SITEROOT:g"
 
 2014-11-26  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Interface improvements in DressedLeptons constructor.
 
 	* Adding DEPRECATED macro to throw compiler deprecation warnings when using deprecated features.
 
 2014-11-25  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding Cut-based constructors, and various constructors with
 	lists of PDG codes to IdentifiedFinalState.
 
 2014-11-20  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Analysis updates (ATLAS, CMS, CDF, D0) to apply the changes below.
 
 	* Adding JetAlg jets(Cut, Sorter) methods, and other interface
 	improvements for cut and sorted ParticleBase retrieval from JetAlg
 	and ParticleFinder projections. Some old many-doubles versions
 	removed, syntactic sugar sorting methods deprecated.
 
 	* Adding Cuts::Et and Cuts::ptIn, Cuts::etIn, Cuts::massIn.
 
 	* Moving FastJet includes, conversions, uses etc. into Tools/RivetFastJet.hh
 
 2014-10-07  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fix a bug in the isCharmHadron(pid) function and remove isStrange* functions.
 
 2014-09-30  Andy Buckley  <andy.buckley@cern.ch>
 
 	* 2.2.0 release!
 
 	* Mark Jet::containsBottom and Jet::containsCharm as deprecated
 	methods: use the new methods. Analyses updated.
 
 	* Add Jet::bTagged(), Jet::cTagged() and Jet::tauTagged() as
 	ghost-assoc-based replacements for the 'contains' tagging methods.
 
 2014-09-17  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding support for 1D and 3D YODA scatters, and helper methods
 	for calling the efficiency, asymm and 2D histo divide functions.
 
 2014-09-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding 5 new ATLAS analyses:
 	ATLAS_2011_I921594: Inclusive isolated prompt photon analysis with full 2010 LHC data
 	ATLAS_2013_I1263495: Inclusive isolated prompt photon analysis with 2011 LHC data
 	ATLAS_2014_I1279489: Measurements of electroweak production of dijets + $Z$ boson, and distributions sensitive to vector boson fusion
 	ATLAS_2014_I1282441: The differential production cross section of the $\phi(1020)$ meson in $\sqrt{s}=7$ TeV $pp$ collisions measured with the ATLAS detector
 	ATLAS_2014_I1298811: Leading jet underlying event at 7 TeV in ATLAS
 
 	* Adding a median(vector<NUM>) function and fixing the other stats
 	functions to operate on vector<NUM> rather than vector<int>.
 
 2014-09-03  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fix wrong behaviour of LorentzTransform with a null boost vector
 	-- thanks to Michael Grosse.
 
 2014-08-26  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add calc() methods to Hemispheres as requested, to allow it to
 	be used with Jet or FourMomentum inputs outside the normal
 	projection system.
 
 2014-08-17  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Improvements to the particles methods on
 	ParticleFinder/FinalState, in particular adding the range of cuts
 	arguments cf. JetAlg (and tweaking the sorted jets equivalent) and
 	returning as a copy rather than a reference if cut/sorted to avoid
 	accidentally messing up the cached copy.
 
 	* Creating ParticleFinder projection base class, and moving
 	Particles-accessing methods from FinalState into it.
 
 	* Adding basic forms of MC_ELECTRONS, MC_MUONS, and MC_TAUS
 	analyses.
 
 2014-08-15  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Version bump to 2.2.0beta1 for use at BOOST and MCnet school.
 
 2014-08-13  Andy Buckley  <andy.buckley@cern.ch>
 
 	* New analyses:
 	ATLAS_2014_I1268975 (high mass dijet cross-section at 7 TeV)
 	ATLAS_2014_I1304688 (jet multiplicity and pT at 7 TeV)
 	ATLAS_2014_I1307756 (scalar diphoton resonance search at 8 TeV -- no histograms!)
 	CMSTOTEM_2014_I1294140 (charged particle pseudorapidity at 8 TeV)
 
 2014-08-09  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding PromptFinalState, based on code submitted by Alex
 	Grohsjean and Will Bell. Thanks!
 
 2014-08-06  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding MC_HFJETS and MC_JETTAGS analyses.
 
 2014-08-05  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Update all analyses to use the xMin/Max/Mid, xMean, xWidth,
 	etc. methods on YODA classes rather than the deprecated lowEdge
 	etc.
 
 	* Merge new HasPID functor from Holger Schulz into
 	Rivet/Tools/ParticleUtils.hh, mainly for use with the any()
 	function in Rivet/Tools/Utils.hh
 
 2014-08-04  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add ghost tagging of charms, bottoms and taus to FastJets, and
 	tag info accessors to Jet.
 
 	* Add constructors from and cast operators to FastJet's PseudoJet
 	object from Particle and Jet.
 
 	* Convert inRange to not use fuzzy comparisons on closed
 	intervals, providing old version as fuzzyInRange.
 
 2014-07-30  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Remove classifier functions accepting a Particle from the PID
 	inner namespace.
 
 2014-07-29  Andy Buckley  <andy.buckley@cern.ch>
 
 	* MC_JetAnalysis.cc: re-enable +- ratios for eta and y, now that
 	YODA divide doesn't throw an exception.
 
 	* ATLAS_2012_I1093734: fix a loop index error which led to the
 	first bin value being unfilled for half the dphi plots.
 
 	* Fix accidental passing of a GenParticle pointer as a PID code
 	int in HeavyHadrons.cc. Effect limited to incorrect deductions
 	about excited HF decay chains and should be small. Thanks to
 	Tomasz Przedzinski for finding and reporting the issue during
 	HepMC3 design work!
 
 2014-07-23  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fix to logspace: make sure that start and end values are exact,
 	not the result of exp(log(x)).
 
 2014-07-16  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fix setting of library paths for doc building: Python can't
 	influence the dynamic loader in its own process by setting an
 	environment variable because the loader only looks at the variable
 	once, when it starts.
 
 2014-07-02  Andy Buckley  <andy.buckley@cern.ch>
 
 	* rivet-cmphistos now uses the generic yoda.read() function rather
 	than readYODA() -- AIDA files can also be compared and plotted
 	directly now.
 
 2014-06-24  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add stupid missing <string> include and std:: prefix in Rivet.hh
 
 2014-06-20  Holger Schulz  <hschulz@physik.hu-berlin.de>
 
 	* bin/make-plots: Automatic generation of minor xtick labels if LogX is requested
 	but data resides e.g. in [200, 700]. Fixes m_12 plots of, e.g.
 	ATLAS_2010_S8817804
 
 2014-06-17  David Grellscheid  <David.Grellscheid@durham.ac.uk>
 
 	* pyext/rivet/Makefile.am: 'make distcheck' and out-of-source
 	builds should work now.
 
 2014-06-10  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fix use of the install command for bash completion installation on Macs.
 
 2014-06-07  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Removing direct includes of MathUtils.hh and others from analysis code files.
 
 2014-06-02  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Rivet 2.1.2 release!
 
 2014-05-30  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Using Particle absrap(), abseta() and abspid() where automatic conversion was feasible.
 
 	* Adding a few extra kinematics mappings to ParticleBase.
 
 	* Adding p3() accessors to the 3-momentum on FourMomentum, Particle, and Jet.
 
 	* Using Jet and Particle kinematics methods directly (without momentum()) where possible.
 
 	* More tweaks to make-plots 2D histo parsing behaviour.
 
 2014-05-30  Holger Schulz  <hschulz@physik.hu-berlin.de>
 
 	* Actually fill the XQ 2D histo, .plot decorations.
 
 	* Have make-plots produce colourmaps using YODA_3D_SCATTER
 	objects. Remove the grid in colourmaps.
 
 	* Some tweaks for the SFM analysis, trying to contact Martin Wunsch
 	who did the unfolding back then.
 
 2014-05-29  Holger Schulz  <hschulz@physik.hu-berlin.de>
 
 	* Re-enable 2D histo in MC_PDFS
 
 2014-05-28  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Updating analysis and project routines to use Particle::pid() by
 	preference to Particle::pdgId(), and Particle::abspid() by
 	preference to abs(Particle::pdgId()), etc.
 
 	* Adding interfacing of smart pointer types and booking etc. for
 	YODA 2D histograms and profiles.
 
 	* Improving ParticleIdUtils and ParticleUtils functions based on
 	merging of improved function collections from MCUtils, and
 	dropping the compiled ParticleIdUtils.cc file.
 
 2014-05-27  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding CMS_2012_I1090423 (dijet angular distributions),
 	CMS_2013_I1256943 (Zbb xsec and angular correlations),
 	CMS_2013_I1261026 (jet and UE properties vs. Nch) and
 	D0_2000_I499943 (bbbar production xsec and angular correlations).
 
 2014-05-26  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fixing a bug in plot file handling, and adding a texpand()
 	routine to rivet.util, to be used to expand some 'standard'
 	physics TeX macros.
 
 	* Adding ATLAS_2012_I1124167 (min bias event shapes),
 	ATLAS_2012_I1203852 (ZZ cross-section), and ATLAS_2013_I1190187
 	(WW cross-section) analyses.
 
 2014-05-16  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding any(iterable, fn) and all(iterable, fn) template functions for convenience.
 
 2014-05-15  Holger Schulz  <holger.schulz@cern.ch>
 
 	* Fix some bugs in identified hadron PIDs in OPAL_1998_S3749908.
 
 2014-05-13  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Writing out [UNVALIDATED], [PRELIMINARY], etc. in the
 	--list-analyses output if analysis is not VALIDATED.
 
 2014-05-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding CMS_2013_I1265659 colour coherence analysis.
 
 2014-05-07  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Bug fixes in CMS_2013_I1209721 from Giulio Lenzi.
 
 	* Fixing compiler warnings from clang, including one which
 	indicated a misapplied cut bug in CDF_2006_S6653332.
 
 2014-05-05  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fix missing abs() in Particle::abspid()!!!!
 
 2014-04-14  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding the namespace protection workaround for Boost described
 	at http://www.boost.org/doc/libs/1_55_0/doc/html/foreach.html
 
 2014-04-13  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding a rivet.pc template file and installation rule for pkg-config to use.
 
 	* Updating data/refdata/ALEPH_2001_S4656318.yoda to corrected version in HepData.
 
 2014-03-27  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Flattening PNG output of make-plots (i.e. no transparency) and other tweaks.
 
 2014-03-23  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Renaming the internal meta-particle class in DressedLeptons (and
 	exposed in the W/ZFinders) from ClusteredLepton to DressedLepton
 	for consistency with the change in name of its containing class.
 
 	* Removing need for cmake and unportable yaml-cpp trickery by
 	using libtool to build an embedded symbol-mangled copy of yaml-cpp
 	rather than trying to mangle and build direct from the tarball.
 
 2014-03-10  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Rivet 2.1.1 release.
 
 2014-03-07  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding ATLAS multilepton search (no ref data file), ATLAS_2012_I1204447.
 
 2014-03-05  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Also renaming Breit-Wigner functions to cdfBW, invcdfBW and bwspace.
 
 	* Renaming index_between() to the more Rivety binIndex(), since that's the only real use of such a function... plus a bit of SFINAE type relaxation trickery.
 
 2014-03-04  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding programmatic access to final histograms via AnalysisHandler::getData().
 
 	* Adding CMS 4 jet correlations analysis, CMS_2013_I1273574.
 
 	* Adding CMS W + 2 jet double parton scattering analysis, CMS_2013_I1272853.
 
 	* Adding ATLAS isolated diphoton measurement, ATLAS_2012_I1199269.
 
 	* Improving the index_between function so the numeric types don't
 	have to exactly match.
 
 	* Adding better momentum comparison functors and sortBy, sortByX
 	functions to use them easily on containers of Particle, Jet, and
 	FourMomentum.
 
 2014-02-10  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Removing duplicate and unused ParticleBase sorting functors.
 
 	* Removing unused HT increment and units in ATLAS_2012_I1180197 (unvalidated SUSY).
 
 	* Fixing photon isolation logic bug in CMS_2013_I1258128 (Z rapidity).
 
 	* Replacing internal uses of #include Rivet/Rivet.hh with
 	Rivet/Config/RivetCommon.hh, removing the MAXRAPIDITY const, and
 	repurposing Rivet/Rivet.hh as a convenience include for external
 	API users.
 
 	* Adding isStable, children, allDescendants, stableDescendants,
 	and flightLength functions to Particle.
 
 	* Replacing Particle and Jet deltaX functions with generic ones on
 	ParticleBase, and adding deltaRap variants.
 
 	* Adding a Jet.fhh forward declaration header, including fastjet::PseudoJet.
 
 	* Adding a RivetCommon.hh header to allow Rivet.hh to be used externally.
 
 	* Fixing HeavyHadrons to apply pT cuts if specified.
 
 2014-02-06  Andy Buckley  <andy.buckley@cern.ch>
 
 	* 2.1.0 release!
 
 2014-02-05  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Protect against invalid prefix value if the --prefix configure option is unused.
 
 2014-02-03  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding the ATLAS_2012_I1093734 fwd-bwd / azimuthal minbias correlations analysis.
 
 	* Adding the LHCB_2013_I1208105 forward energy flow analysis.
 
 2014-01-31  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Checking the YODA minimum version in the configure script.
 
 	* Fixing the JADE_OPAL analysis ycut values to the midpoints,
 	thanks to information from Christoph Pahl / Stefan Kluth.
 
 2014-01-29  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Removing unused/overrestrictive Isolation* headers.
 
 2014-01-27  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Re-bundling yaml-cpp, now built as a mangled static lib based on
 	the LHAPDF6 experience.
 
 	* Throw a UserError rather than an assert if AnalysisHandler::init
 	is called more than once.
 
 2014-01-25  David Grellscheid <david.grellscheid@durham.ac.uk>
 
 	* src/Core/Cuts.cc: New Cuts machinery, already used in FinalState.
 	Old-style "mineta, maxeta, minpt" constructors kept around for ease of
 	transition. Minimal set of convenience functions available, like EtaIn(),
 	should be expanded as needed.
 
 2014-01-22  Andy Buckley  <andy.buckley@cern.ch>
 
 	* configure.ac: Remove opportunistic C++11 build, until this
 	becomes mandatory (in version 2.2.0?). Anyone who wants C++11 can
 	explicitly set the CXXFLAGS (and DYLDFLAGS for pre-Mavericks Macs)
 
 2014-01-21  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* src/Core/Analysis.cc: Fixed bug in Analysis::isCompatible where
 	an 'abs' was left out when checking that beam energes does not
 	differ by more than 1GeV.
 
 	* src/Analyses/CMS_2011_S8978280.cc: Fixed checking of beam energy
 	and booking corresponding histograms.
 
 2013-12-19  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding pid() and abspid() methods to Particle.
 
 	* Adding hasCharm and hasBottom methods to Particle.
 
 	* Adding a sorting functor arg version of the ZFinder::constituents() method.
 
 	* Adding pTmin cut accessors to HeavyHadrons.
 
 	* Tweak to the WFinder constructor to place the target W (trans) mass argument last.
 
 2013-12-18  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding a GenParticle* cast operator to Particle, removing the
 	Particle and Jet copies of the momentum cmp functors, and general
 	tidying/improvement/unification of the momentum properties of jets
 	and particles.
 
 2013-12-17  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Using SFINAE techniques to improve the math util functions.
 
 	* Adding isNeutrino to ParticleIdUtils, and
 	isHadron/isMeson/isBaryon/isLepton/isNeutrino methods to Particle.
 
 	* Adding a FourMomentum cast operator to ParticleBase, so that
 	Particle and Jet objects can be used directly as FourMomentums.
 
 2013-12-16  Andy Buckley  <andy@duality>
 
 	* LeptonClusters renamed to DressedLeptons.
 
 	* Adding singular particle accessor functions to WFinder and ZFinder.
 
 	* Removing ClusteredPhotons and converting ATLAS_2010_S8919674.
 
 2013-12-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fixing a problem with --disable-analyses (thanks to David Hall)
 
 	* Require FastJet version 3.
 
 	* Bumped version to 2.1.0a0
 
 	* Adding -DNDEBUG to the default build flags, unless in --enable-debug mode.
 
 	* Adding a special treatment of RIVET_*_PATH variables: if they
 	end in :: the default search paths will not be appended. Used
 	primarily to restrict the doc builds to look only inside the build
 	dirs, but potentially also useful in other special circumstances.
 
 	* Adding a definition of exec_prefix to rivet-buildplugin.
 
 	* Adding -DNDEBUG to the default non-debug build flags.
 
 2013-11-27  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Removing accidentally still-present no-as-needed linker flag from rivet-config.
 
 	* Lots of analysis clean-up and migration to use new features and W/Z finder APIs.
 
 	* More momentum method forwarding on ParticleBase and adding
 	abseta(), absrap() etc. functions.
 
 	* Adding the DEFAULT_RIVET_ANA_CONSTRUCTOR cosmetic macro.
 
 	* Adding deltaRap() etc. function variations
 
 	* Adding no-decay photon clustering option to WFinder and ZFinder,
 	and replacing opaque bool args with enums.
 
 	* Adding an option for ignoring photons from hadron/tau decays in LeptonClusters.
 
 2013-11-22  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding Particle::fromBottom/Charm/Tau() members. LHCb were
 	aready mocking this up, so it seemed sensible to add it to the
 	interface as a more popular (and even less dangerous) version of
 	hasAncestor().
 
 	* Adding an empty() member to the JetAlg interface.
 
 2013-11-07  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding the GSL lib path to the library path in the env scripts
 	and the rivet-config --ldflags output.
 
 2013-10-25  Andy Buckley  <andy.buckley@cern.ch>
 
 	* 2.0.0 release!!!!!!
 
 2013-10-24  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Supporting zsh completion via bash completion compatibility.
 
 2013-10-22  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Updating the manual to describe YODA rather than AIDA and the new rivet-cmphistos script.
 
 	* bin/make-plots: Adding paths to error messages in histogram combination.
 
 	* CDF_2005_S6217184: fixes to low stats errors and final scatter plot binning.
 
 2013-10-21  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Several small fixes in jet shape analyses, SFM_1984, etc. found
 	in the last H++ validation run.
 
 2013-10-18  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Updates to configure and the rivetenv scripts to try harder to discover YODA.
 
 2013-09-26  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Now bundling Cython-generated files in the tarballs, so Cython
 	is not a build requirement for non-developers.
 
 2013-09-24  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Removing unnecessary uses of a momentum() indirection when
 	accessing kinematic variables.
 
 	* Clean-up in Jet, Particle, and ParticleBase, in particular
 	splitting PID functions on Particle from those on PID codes, and
 	adding convenience kinematic functions to ParticleBase.
 
 2013-09-23  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add the -avoid-version flag to libtool.
 
 	* Final analysis histogramming issues resolved.
 
 2013-08-16  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding a ConnectBins flag in make-plots, to decide whether to
 	connect adjacent, gapless bins with a vertical line. Enabled by
 	default (good for the step-histo default look of MC lines), but
 	now rivet-cmphistos disables it for the reference data.
 
 2013-08-14  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Making 2.0.0beta3 -- just a few remaining analysis migration
 	issues remaining but it's worth making another beta since there
 	were lots of framework fixes/improvements.
 
 2013-08-11  Andy Buckley  <andy.buckley@cern.ch>
 
 	* ARGUS_1993_S2669951 also fixed using scatter autobooking.
 
 	* Fixing remaining issues with booking in BABAR_2007_S7266081
 	using the feature below (far nicer than hard-coding).
 
 	* Adding a copy_pts param to some Analysis::bookScatter2D methods:
 	pre-setting the points with x values is sometimes genuinely
 	useful.
 
 2013-07-26  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Removed the (officially) obsolete CDF 2008 LEADINGJETS and
 	NOTE_9351 underlying event analyses -- superseded by the proper
 	versions of these analyses based on the final combined paper.
 
 	* Removed the semi-demo Multiplicity projection -- only the
 	EXAMPLE analysis and the trivial ALEPH_1991_S2435284 needed
 	adaptation.
 
 2013-07-24  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding a rejection of histo paths containing /TMP/ from the
 	writeData function. Use this to handle booked temporary
 	histograms... for now.
 
 2013-07-23  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Make rivet-cmphistos _not_ draw a ratio plot if there is only one line.
 
 	* Improvements and fixes to HepData lookup with rivet-mkanalysis.
 
 2013-07-22  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Add -std=c++11 or -std=c++0x to the Rivet compiler flags if supported.
 
 	* Various fixes to analyses with non-zero numerical diffs.
 
 2013-06-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding a new HeavyHadrons projection.
 
 	* Adding optional extra include_end args to logspace() and linspace().
 
 2013-06-11  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Moving Rivet/RivetXXX.hh tools headers into Rivet/Tools/.
 
 	* Adding PrimaryHadrons projection.
 
 	* Adding particles_in/out functions on GenParticle to RivetHepMC.
 
 	* Moved STL extensions from Utils.hh to RivetSTL.hh and tidying.
 
 	* Tidying, improving, extending, and documenting in RivetSTL.hh.
 
 	* Adding a #include of Logging.hh into Projection.hh, and removing
 	unnecessary #includes from all Projection headers.
 
 2013-06-10  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Moving htmlify() and detex() Python functions into rivet.util.
 
 	* Add HepData URL for Inspire ID lookup to the rivet script.
 
 	* Fix analyses' info files which accidentally listed the Inspire
 	ID under the SpiresID metadata key.
 
 2013-06-07  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Updating mk-analysis-html script to produce MathJax output
 
 	* Adding a version of Analysis::removeAnalysisObject() which takes
 	an AO pointer as its argument.
 
 	* bin/rivet: Adding pandoc-based conversion of TeX summary and
 	description strings to plain text on the terminal output.
 
 	* Add MathJax to rivet-mkhtml output, set up so the .info entries should render ok.
 
 	* Mark the OPAL 1993 analysis as UNVALIDATED: from the H++
 	benchmark runs it looks nothing like the data, and there are some
 	outstanding ambiguities.
 
 2013-06-06  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Releasing 2.0.0b2 beta version.
 
 2013-06-05  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Renaming Analysis::add() etc. to very explicit
 	addAnalysisObject(), sorting out shared_pointer polymorphism
 	issues via the Boost dynamic_pointer_cast, and adding a full set
 	of getHisto1D(), etc. explicitly named and typed accessors,
 	including ones with HepData dataset/axis ID signatures.
 
 	* Adding histo booking from an explicit reference Scatter2D (and
 	more placeholders for 2D histos / 3D scatters) and rewriting
 	existing autobooking to use this.
 
 	* Converting inappropriate uses of size_t to unsigned int in Analysis.
 
 	* Moving Analysis::addPlot to Analysis::add() (or reg()?) and
 	adding get() and remove() (or unreg()?)
 
 	* Fixing attempted abstraction of import fallbacks in rivet.util.import_ET().
 
 	* Removing broken attempt at histoDir() caching which led to all
 	histograms being registered under the same analysis name.
 
 2013-06-04  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Updating the Cython version requirement to 0.18
 
 	* Adding Analysis::integrate() functions and tidying the Analysis.hh file a bit.
 
 2013-06-03  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding explicit protection against using inf/nan scalefactors in
 	ATLAS_2011_S9131140 and H1_2000_S4129130.
 
 	* Making Analysis::scale noisly complain about invalid
 	scalefactors.
 
 2013-05-31  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Reducing the TeX main memory to ~500MB. Turns out that it *can*
 	be too large with new versions of TeXLive!
 
 2013-05-30  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Reverting bookScatter2D behaviour to never look at ref data, and
 	updating a few affected analyses. This should fix some bugs with
 	doubled datapoints introduced by the previous behaviour+addPoint.
 
 	* Adding a couple of minor Utils.hh and MathUtils.hh features.
 
 2013-05-29  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Removing Constraints.hh header.
 
 	* Minor bugfixes and improvements in Scatter2D booking and MC_JetAnalysis.
 
 2013-05-28  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Removing defunct HistoFormat.hh and HistoHandler.{hh,cc}
 
 2013-05-27  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Removing includes of Logging.hh, RivetYODA.hh, and
 	ParticleIdUtils.hh from analyses (and adding an include of
 	ParticleIdUtils.hh to Analysis.hh)
 
 	* Removing now-unused .fhh files.
 
 	* Removing lots of unnecessary .fhh includes from core classes:
 	everything still compiling ok. A good opportunity to tidy this up
 	before the release.
 
 	* Moving the rivet-completion script from the data dir to bin (the
 	completion is for scripts in bin, and this makes development
 	easier).
 
 	* Updating bash completion scripts for YODA format and
 	compare-histos -> rivet-cmphistos.
 
 2013-05-23  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding Doxy comments and a couple of useful convenience functions to Utils.hh.
 
 	* Final tweaks to ATLAS ttbar jet veto analysis (checked logic with Kiran Joshi).
 
 2013-05-15  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Many 1.0 -> weight bugfixes in ATLAS_2011_I945498.
 
 	* yaml-cpp v3 support re-introduced in .info parsing.
 
 	* Lots of analysis clean-ups for YODA TODO issues.
 
 2013-05-13  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Analysis histo booking improvements for Scatter2D, placeholders
 	for 2D histos, and general tidying.
 
 2013-05-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding configure-time differentiation between yaml-cpp API versions 3 and 5.
 
 2013-05-07  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Converting info file reading to use the yaml-cpp 0.5.x API.
 
 2013-04-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Tagging as 2.0.0b1
 
 2013-04-04  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Removing bundling of yaml-cpp: it needs to be installed by the
 	user / bootstrap script from now on.
 
 2013-04-03  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Removing svn:external m4 directory, and converting Boost
 	detection to use better boost.m4 macros.
 
 2013-03-22  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Moving PID consts to the PID namespace and corresponding code
 	updates and opportunistic clean-ups.
 
 	* Adding Particle::fromDecay() method.
 
 2013-03-09  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Version bump to 2.0.0b1 in anticipation of first beta release.
 
 	* Adding many more 'popular' particle ID code named-consts and
 	aliases, and updating the RapScheme enum with ETA -> ETARAP, and
 	fixing affected analyses (plus other opportunistic tidying / minor
 	bug-fixing).
 
 	* Fixing a symbol misnaming in ATLAS_2012_I1119557.
 
 2013-03-07  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Renaming existing uses of ParticleVector to the new 'Particles' type.
 
 	* Updating util classes, projections, and analyses to deal with
 	the HepMC return value changes.
 
 	* Adding new Particle(const GenParticle*) constructor.
 
 	* Converting Particle::genParticle() to return a const pointer
 	rather than a reference, for the same reason as below (+
 	consistency within Rivet and with the HepMC pointer-centric coding
 	design).
 
 	* Converting Event to use a different implementation of original
 	and modified GenParticles, and to manage the memory in a more
 	future-proof way. Event::genParticle() now returns a const pointer
 	rather than a reference, to signal that the user is leaving the
 	happy pastures of 'normal' Rivet behind.
 
 	* Adding a Particles typedef by analogy to Jets, and in preference
 	to the cumbersome ParticleVector.
 
 	* bin/: Lots of tidying/pruning of messy/defunct scripts.
 
 	* Creating spiresbib, util, and plotinfo rivet python module
 	submodules: this eliminates lighthisto and the standalone
 	spiresbib modules. Util contains convenience functions for Python
 	version testing, clean ElementTree import, and process renaming,
 	for primary use by the rivet-* scripts.
 
 	* Removing defunct scripts that have been replaced/obsoleted by YODA.
 
 2013-03-06  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fixing doc build so that the reference histos and titles are
 	~correctly documented. We may want to truncate some of the lists!
 
 2013-03-06  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added ATLAS_2012_I1125575 analysis
 
 	* Converted rivet-mkhtml to yoda
 
 	* Introduced rivet-cmphistos as yoda based replacement for compare-histos
 
 2013-03-05  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Replacing all AIDA ref data with YODA versions.
 
 	* Fixing the histograms entries in the documentation to be
 	tolerant to plotinfo loading failures.
 
 	* Making the findDatafile() function primarily find YODA data
 	files, then fall back to AIDA. The ref data loader will use the
 	appropriate YODA format reader.
 
 2013-02-05  David Grellscheid  <David.Grellscheid@durham.ac.uk>
 
 	* include/Rivet/Math/MathUtils.hh: added BWspace bin edge method
 	to give equal-area Breit-Wigner bins
 
 2013-02-01  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding an element to the PhiMapping enum and a new mapAngle(angle, mapping) function.
 
 	* Fixes to Vector3::azimuthalAngle and Vector3::polarAngle calculation (using the mapAngle functions).
 
 2013-01-25  Frank Siegert  <frank.siegert@cern.ch>
 
 	* Split MC_*JETS analyses into three separate bits:
 	MC_*INC (inclusive properties)
 	MC_*JETS (jet properties)
 	MC_*KTSPLITTINGS (kT splitting scales).
 
 2013-01-22  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fix TeX variable in the rivetenv scripts, especially for csh
 
 2012-12-21  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Version 1.8.2 release!
 
 2012-12-20  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding ATLAS_2012_I1119557 analysis (from Roman Lysak and Lily Asquith).
 
 2012-12-18  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding TOTEM_2012_002 analysis, from Sercan Sen.
 
 2012-12-18  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added CMS_2011_I954992 analysis
 
 2012-12-17  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added CMS_2012_I1193338 analysis
 
 	* Fixed xi cut in ATLAS_2011_I894867
 
 2012-12-17  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding analysis descriptions to the HTML analysis page ToC.
 
 2012-12-14  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added CMS_2012_PAS_FWD_11_003 analysis
 
 	* Added LHCB_2012_I1119400 analysis
 
 2012-12-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Correction to jet acceptance in CMS_2011_S9120041, from Sercan Sen: thanks!
 
 2012-12-12  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added CMS_2012_PAS_QCD_11_010 analysis
 
 2012-12-07  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Version number bump to 1.8.2 -- release approaching.
 
 	* Rewrite of ALICE_2012_I1181770 analysis to make it a bit more sane and acceptable.
 
 	* Adding a note on FourVector and FourMomentum that operator- and
 	operator-= invert both the space and time components: use of -=
 	can result in a vector with negative energy.
 
 	* Adding particlesByRapidity and particlesByAbsRapidity to FinalState.
 
 2012-12-07  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added ALICE_2012_I1181770 analysis
 
 	* Bump version to 1.8.2
 
 2012-12-06  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added ATLAS_2012_I1188891 analysis
 
 	* Added ATLAS_2012_I1118269 analysis
 
 	* Added CMS_2012_I1184941 analysis
 
 	* Added LHCB_2010_I867355 analysis
 
 	* Added TGraphErrors support to root2flat
 
 2012-11-27  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Converting CMS_2012_I1102908 analysis to use YODA.
 
 	* Adding XLabel and YLabel setting in histo/profile/scatter booking.
 
 2012-11-27  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fix make-plots png creation for SL5
 
 2012-11-23  Peter Richardson <peter.richardson@durham.ac.uk>
 
 	* Added ATLAS_2012_CONF_2012_153 4-lepton SUSY search
 
 2012-11-17  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding MC_PHOTONS by Steve Lloyd and AB, for testing general
 	unisolated photon properties, especially those associated with
 	charged leptons (e and mu).
 
 2012-11-16  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding MC_PRINTEVENT, a convenient (but verbose!) analysis for
 	printing out event details to stdout.
 
 2012-11-15  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Removing the long-unused/defunct autopackage system.
 
 2012-11-15  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added LHCF_2012_I1115479 analysis
 	* Added ATLAS_2011_I894867 analysis
 
 2012-11-14  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added CMS_2012_I1102908 analysis
 
 2012-11-14  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Converting the argument order of logspace, clarifying the
 	arguments, updating affected code, and removing Analysis::logBinEdges.
 
 	* Merging updates from the AIDA maintenance branch up to r4002
 	(latest revision for next merges is r4009).
 
 2012-11-11  Andy Buckley  <andy.buckley@cern.ch>
 
 	* include/Math/: Various numerical fixes to Vector3::angle and
 	changing the 4 vector mass treatment to permit spacelike
 	virtualities (in some cases even the fuzzy isZero assert check was
 	being violated). The angle check allows a clean-up of some
 	workaround code in MC_VH2BB.
 
 2012-10-15  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added CMS_2012_I1107658 analysis
 
 2012-10-11  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added CDF_2012_NOTE10874 analysis
 
 2012-10-04  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added ATLAS_2012_I1183818 analysis
 
 2012-07-17  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Cleanup and multiple fixes in CMS_2011_S9120041
 
 	* Bugfixed in ALEPH_2004_S5765862 and ATLAS_2010_CONF_2010_049
 	(thanks to Anil Pratap)
 
 2012-08-09  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fixing aida2root command-line help message and converting to TH*
 	rather than TGraph by default.
 
 2012-07-24  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Improvements/migrations to rivet-mkhtml, rivet-mkanalysis, and
 	rivet-buildplugin.
 
 2012-07-17  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Add CMS_2012_I1087342
 
 2012-07-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Fix rivet-mkanalysis a bit for YODA compatibility.
 
 2012-07-05  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Version 1.8.1!
 
 2012-07-05  Holger Schulz  <holger.schulz@physik.hu-berlin.de>
 
 	* Add ATLAS_2011_I945498
 
 2012-07-03  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Bugfix for transverse mass (thanks to Gavin Hesketh)
 
 2012-06-29  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Merge YODA branch into trunk. YODA is alive!!!!!!
 
 2012-06-26  Holger Schulz  <holger.schulz@physik.hu-berlin.de>
 
 	* Add ATLAS_2012_I1091481
 
 2012-06-20  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added D0_2011_I895662: 3-jet mass
 
 2012-04-24  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* fixed a few bugs in rivet-rmgaps
 
 	* Added new TOTEM dN/deta analysis
 
 2012-03-19  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Version 1.8.0!
 
 	* src/Projections/UnstableFinalState.cc: Fix compiler warning.
 
 	* Version bump for testing: 1.8.0beta1.
 
 	* src/Core/AnalysisInfo.cc: Add printout of YAML parser exception error messages to aid debugging.
 
 	* bin/Makefile.am: Attempt to fix rivet-nopy build on SLC5.
 
 	* src/Analyses/LHCB_2010_S8758301.cc: Add two missing entries to the PDGID -> lifetime map.
 
 	* src/Projections/UnstableFinalState.cc: Extend list of vetoed particles to include reggeons.
 
 2012-03-16  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Version change to 1.8.0beta0 -- nearly ready for long-awaited release!
 
 	* pyext/setup.py.in: Adding handling for the YAML library: fix for
 	Genser build from Anton Karneyeu.
 
 	* src/Analyses/LHCB_2011_I917009.cc: Hiding lifetime-lookup error
 	message if the offending particle is not a hadron.
 
 	* include/Rivet/Math/MathHeader.hh: Using unnamespaced std::isnan
 	and std::isinf as standard.
 
 2012-03-16  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Improve default plot behaviour for 2D histograms
 
 2012-03-15  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Make ATLAS_2012_I1084540 less verbose, and general code
 	cleanup of that analysis.
 
 	* New-style plugin hook in ATLAS_2011_I926145,
 	ATLAS_2011_I944826 and ATLAS_2012_I1084540
 
 	* Fix compiler warnings in ATLAS_2011_I944826 and CMS_2011_S8973270
 
 	* CMS_2011_S8941262: Weights are double, not int.
 
 	* disable inRange() tests in test/testMath.cc until we have a proper
 	fix for the compiler warnings we see on SL5.
 
 2012-03-07  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Marking ATLAS_2011_I919017 as VALIDATED (this should have
 	happened a long time ago) and adding more references.
 
 2012-02-28  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* lighthisto.py: Caching for re.compile(). This speeds up aida2flat
 	and flat2aida by more than an order of magnitude.
 
 2012-02-27  Andy Buckley  <andy.buckley@cern.ch>
 
 	* doc/mk-analysis-html: Adding more LaTeX/text -> HTML conversion
 	replacements, including better <,> handling.
 
 2012-02-26  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding CMS_2011_S8973270, CMS_2011_S8941262, CMS_2011_S9215166,
 	CMS_QCD_10_024, from CMS.
 
 	* Adding LHCB_2011_I917009 analysis, from Alex Grecu.
 
 	* src/Core/Analysis.cc, include/Rivet/Analysis.hh: Add a numeric-arg version of histoPath().
 
 2012-02-24  Holger Schulz  <holger.schulz@physik.hu-berlin.de>
 
 	* Adding ATLAS Ks/Lambda analysis.
 
 2012-02-20  Andy Buckley  <andy.buckley@cern.ch>
 
 	* src/Analyses/ATLAS_2011_I925932.cc: Using new overflow-aware
 	normalize() in place of counters and scale(..., 1/count)
 
 2012-02-14  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Splitting MC_GENERIC to put the PDF and PID plotting into
 	MC_PDFS and MC_IDENTIFIED respectively.
 
 	* Renaming MC_LEADINGJETS to MC_LEADJETUE.
 
 2012-02-14  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* DELPHI_1996_S3430090 and ALEPH_1996_S3486095:
 	fix rapidity vs {Thrust,Sphericity}-axis.
 
 2012-02-14  Andy Buckley  <andy.buckley@cern.ch>
 
 	* bin/compare-histos: Don't attempt to remove bins from MC histos
 	where they aren't found in the ref file, if the ref file is not
 	expt data, or if the new --no-rmgapbins arg is given.
 
 	* bin/rivet: Remove the conversion of requested analysis names to
 	upper-case: mixed-case analysis names will now work.
 
 2012-02-14  Frank Siegert  <frank.siegert@cern.ch>
 
 	* Bugfixes and improvements for MC_TTBAR:
 	  - Avoid assert failure with logspace starting at 0.0
 	  - Ignore charged lepton in jet finding (otherwise jet multi is always
 	    +1).
 	  - Add some dR/deta/dphi distributions as noted in TODO
 	  - Change pT plots to logspace as well (to avoid low-stat high pT bins)
 
 2012-02-10  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* rivet-mkhtml -c option now has the semantics of a .plot
 	file. The contents are appended to the dat output by
 	compare-histos.
 
 2012-02-09  David Grellscheid <david.grellscheid@durham.ac.uk>
 
 	* Fixed broken UnstableFS behaviour
 
 2012-01-25 Frank Siegert  <frank.siegert@cern.ch>
 
 	* Improvements in make-plots:
 	  - Add PlotTickLabels and RatioPlotTickLabels options (cf.
 	    make-plots.txt)
 	  - Make ErrorBars and ErrorBands non-exclusive (and change
 	    their order, such that Bars are on top of Bands)
 
 2012-01-25 Holger Schulz  <holger.schulz@physik.hu-berlin.de>
 
 	* Add ATLAS diffractive gap analysis
 
 2012-01-23  Andy Buckley  <andy.buckley@cern.ch>
 
 	* bin/rivet: When using --list-analyses, the analysis summary is
 	now printed out when log level is <= INFO, rather than < INFO.
 	The effect on command line behaviour is that useful identifying
 	info is now printed by default when using --list-analyses, rather
 	than requiring --list-analyses -v. To get the old behaviour,
 	e.g. if using the output of rivet --list-analyses for scripting,
 	now use --list-analyses -q.
 
 2012-01-22  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Tidying lighthisto, including fixing the order in which +- error
 	values are passed to the Bin constructor in fromFlatHisto.
 
 2012-01-16 Frank Siegert  <frank.siegert@cern.ch>
 
 	* Bugfix in ATLAS_2012_I1083318: Include non-signal neutrinos in
 	jet clustering.
 
 	* Add first version of ATLAS_2012_I1083318 (W+jets). Still
 	UNVALIDATED until final happiness with validation plots arises and
 	data is in Hepdata.
 
 	* Bugfix in ATLAS_2010_S8919674: Really use neutrino with highest
 	pT for Etmiss. Doesn't seem to make very much difference, but is
 	more correct in principle.
 
 2012-01-16 Peter Richardson  <peter.richardson@durham.ac.uk>
 
 	* Fixes to ATLAS_20111_S9225137 to include reference data
 
 2012-01-13 Holger Schulz  <holger.schulz@physik.hu-berlin.de>
 
 	* Add ATLAS inclusive lepton analysis
 
 2012-01-12 Hendrik Hoeth  <hendrik.hoeth@durham.ac.uk>
 
 	* Font selection support in rivet-mkhtml
 
 2012-01-11 Peter Richardson  <peter.richardson@durham.ac.uk>
 
 	* Added pi0 to list of particles.
 
 2012-01-11  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Removing references to Boost random numbers.
 
 2011-12-30  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding a placeholder rivet-which script (not currently
 	installed).
 
 	* Tweaking to avoid a very time-consuming debug printout in
 	compare-histos with the -v flag, and modifying the Rivet env vars
 	in rivet-mkhtml before calling compare-histos to eliminate
 	problems induced by relative paths (i.e. "." does not mean the
 	same thing when the directory is changed within the script).
 
 2011-12-12  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding a command line completion function for rivet-mkhtml.
 
 2011-12-12  Frank Siegert  <frank.siegert@cern.ch>
 
 	* Fix for factor of 2.0 in normalisation of CMS_2011_S9086218
 
 	* Add --ignore-missing option to rivet-mkhtml to ignore non-existing
 	AIDA files.
 
 2011-12-06  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Include underflow and overflow bins in the normalisation when
 	calling Analysis::normalise(h)
 
 2011-11-23  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Bumping version to 1.8.0alpha0 since the Jet interface changes
 	are quite a major break with backward compatibility (although the
 	vast majority of analyses should be unaffected).
 
 	* Removing crufty legacy stuff from the Jet class -- there is
 	never any ambiguity between whether Particle or FourMomentum
 	objects are the constituents now, and the jet 4-momentum is set
 	explicitly by the jet alg so that e.g. there is no mismatch if the
 	FastJet pt recombination scheme is used.
 
 	* Adding default do-nothing implementations of Analysis::init()
 	and Analysis::finalize(), since it is possible for analysis
 	implementations to not need to do anything in these methods, and
 	forcing analysis authors to write do-nothing boilerplate code is
 	not "the Rivet way"!
 
 2011-11-19  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding variant constructors to FastJets with a more natural
 	Plugin* argument, and decrufting the constructor implementations a
 	bit.
 
 	* bin/rivet: Adding a more helpful error message if the rivet
 	module can't be loaded, grouping the option parser options,
 	removing the -A option (this just doesn't seem useful anymore),
 	and providing a --pwd option as a shortcut to append "." to the
 	search path.
 
 2011-11-18  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Adding a guide to compiling a new analysis template to the
 	output message of rivet-mkanalysis.
 
 2011-11-11  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Version 1.7.0 release!
 
 	* Protecting the OPAL 2004 analysis against NaNs in the
 	hemispheres projection -- I can't track the origin of these and
 	suspect some occasional memory corruption.
 
 2011-11-09  Andy Buckley  <andy@insectnation.org>
 
 	* Renaming source files for EXAMPLE and
 	PDG_HADRON_MULTIPLICITIES(_RATIOS) analyses to match the analysis
 	names.
 
 	* Cosmetic fixes in ATLAS_2011_S9212183 SUSY analysis.
 
 	* Adding new ATLAS W pT analysis from Elena Yatsenko (slightly adapted).
 
 2011-10-20  Frank Siegert  <frank.siegert@cern.ch>
 
 	* Extend API of W/ZFinder to allow for specification of input final
 	state in which to search for leptons/photons.
 
 2011-10-19  Andy Buckley  <andy@insectnation.org>
 
 	* Adding new version of LHCB_2010_S8758301, based on submission
 	from Alex Grecu. There is some slightly dodgy-looking GenParticle*
 	fiddling going on, but apparently it's necessary (and hopefully robust).
 
 2011-10-17  Andy Buckley  <andy@insectnation.org>
 
 	* bin/rivet-nopy linker line tweak to make compilation work with
 	GCC 4.6 (-lHepMC has to be explicitly added for some reason).
 
 2011-10-13  Frank Siegert  <frank.siegert@cern.ch>
 
 	* Add four CMS QCD analyses kindly provided by CMS.
 
 2011-10-12  Andy Buckley  <andy@insectnation.org>
 
 	* Adding a separate test program for non-matrix/vector math
 	functions, and adding a new set of int/float literal arg tests for
 	the inRange functions in it.
 
 	* Adding a jet multiplicity plot for jets with pT > 30 GeV to
 	MC_TTBAR.
 
 2011-10-11  Andy Buckley  <andy@insectnation.org>
 
 	* Removing SVertex.
 
 2011-10-11  James Monk    <jmonk@cern.ch>
 
 	* root2flat was missing the first bin (plus spurious last bin)
 
 	* My version of bash does not understand the pipe syntax |& in rivet-buildplugin
 
 2011-09-30  James Monk    <jmonk@cern.ch>
 
 	* Fix bug in ATLAS_2010_S8817804 that misidentified the akt4 jets
 	as akt6
 
 2011-09-29  Andy Buckley  <andy@insectnation.org>
 
 	* Converting FinalStateHCM to a slightly more general
 	DISFinalState.
 
 2011-09-26  Andy Buckley  <andy@insectnation.org>
 
 	* Adding a default libname argument to rivet-buildplugin. If the
 	first argument doesn't have a .so library suffix, then use
 	RivetAnalysis.so as the default.
 
 2011-09-19  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* make-plots: Fixing regex for \physicscoor. Adding "FrameColor"
 	option.
 
 2011-09-17  Andy Buckley  <andy@insectnation.org>
 
 	* Improving interactive metadata printout, by not printing
 	headings for missing info.
 
 	* Bumping the release number to 1.7.0alpha0, since with these
 	SPIRES/Inspire changes and the MissingMomentum API change we need
 	more than a minor release.
 
 	* Updating the mkanalysis, BibTeX-grabbing and other places that
 	care about analysis SPIRES IDs to also be able to handle the new
 	Inspire system record IDs. The missing link is getting to HepData
 	from an Inspire code...
 
 	* Using the .info file rather than an in-code declaration to
 	specify that an analysis needs cross-section information.
 
 	* Adding Inspire support to the AnalysisInfo and Analysis
 	interfaces. Maybe we can find a way to combine the two,
 	e.g. return the SPIRES code prefixed with an "S" if no Inspire ID
 	is available...
 
 2011-09-17  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added ALICE_2011_S8909580 (strange particle production at 900 GeV)
 
 	* Feed-down correction in ALICE_2011_S8945144
 
 2011-09-16  Andy Buckley  <andy@insectnation.org>
 
 	* Adding ATLAS track jet analysis, modified from the version
 	provided by Seth Zenz: ATLAS_2011_I919017. Note that this analysis
 	is currently using the Inspire ID rather than the Spires one:
 	we're clearly going to have to update the API to handle Inspire
 	codes, so might as well start now...
 
 2011-09-14  Andy Buckley  <andy@insectnation.org>
 
 	* Adding the ATLAS Z pT measurement at 7 TeV (ATLAS_2011_S9131140)
 	and an MC analysis for VH->bb events (MC_VH2BB).
 
 2011-09-12  Andy Buckley  <andy@insectnation.org>
 
 	* Removing uses of getLog, cout, cerr, and endl from all standard
 	analyses and projections, except in a very few special cases.
 
 2011-09-10  Andy Buckley  <andy@insectnation.org>
 
 	* Changing the behaviour and interface of the MissingMomentum
 	projection to calculate vector ET correctly. This was previously
 	calculated according to the common definition of -E*sin(theta) of
 	the summed visible 4-momentum in the event, but that is incorrect
 	because the timelike term grows monotonically. Instead, transverse
 	2-vectors of size ET need to be constructed for each visible
 	particle, and vector-summed in the transverse plane.
 
 	The rewrite of this behaviour made it opportune to make an API
 	improvement: the previous method names scalarET/vectorET() have
 	been renamed to scalar/vectorEt() to better match the Rivet
 	FourMomentum::Et() method, and MissingMomentum::vectorEt() now
 	returns a Vector3 rather than a double so that the transverse
 	missing Et direction is also available.
 
 	Only one data analysis has been affected by this change in
 	behaviour: the D0_2004_S5992206 dijet delta(phi) analysis. It's
 	expected that this change will not be very significant, as it is
 	a *veto* on significant missing ET to reduce non-QCD
 	contributions. MC studies using this analysis ~always run with QCD
 	events only, so these contributions should be small. The analysis
 	efficiency may have been greatly improved, as fewer events will
 	now fail the missing ET veto cut.
 
 	* Add sorting of the ParticleVector returned by the ChargedLeptons
 	projection.
 
 	* configure.ac: Adding a check to make sure that no-one tries to
 	install into --prefix=$PWD.
 
 2011-09-04  Andy Buckley  <andy@insectnation.org>
 
 	* lighthisto fixes from Christian Roehr.
 
 2011-08-26  Andy Buckley  <andy@insectnation.org>
 
 	* Removing deprecated features: the setBeams(...) method on
 	Analysis, the MaxRapidity constant, the split(...) function, the
 	default init() method from AnalysisHandler and its test, and the
 	deprecated TotalVisibleMomentum and PVertex projections.
 
 2011-08-23  Andy Buckley  <andy@insectnation.org>
 
 	* Adding a new DECLARE_RIVET_PLUGIN wrapper macro to hide the
 	details of the plugin hook system from analysis authors. Migration
 	of all analyses and the rivet-mkanalysis script to use this as the
 	standard plugin hook syntax.
 
 	* Also call the --cflags option on root-config when using the
 	--root option with rivet-biuldplugin (thanks to Richard Corke for
 	the report)
 
 2011-08-23  Frank Siegert <frank.siegert@cern.ch>
 
 	* Added ATLAS_2011_S9126244
 	* Added ATLAS_2011_S9128077
 
 2011-08-23  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added ALICE_2011_S8945144
 
 	* Remove obsolete setBeams() from the analyses
 
 	* Update CMS_2011_S8957746 reference data to the official numbers
 
 	* Use Inspire rather than Spires.
 
 2011-08-19  Frank Siegert <frank.siegert@cern.ch>
 
 	* More NLO parton level generator friendliness: Don't crash or fail when
 	there are no beam particles.
 
 	* Add --ignore-beams option to skip compatibility check.
 
 2011-08-09  David Mallows <dave.mallows@gmail.com>
 
 	* Fix aida2flat to ignore empty dataPointSet
 
 2011-08-07  Andy Buckley  <andy@insectnation.org>
 
 	* Adding TEXINPUTS and LATEXINPUTS prepend definitions to the
 	variables provided by rivetenv.(c)sh. A manual setting of these
 	variables that didn't include the Rivet TEXMFHOME path was
 	breaking make-plots on lxplus, presumably since the system LaTeX
 	packages are so old there.
 
 2011-08-02  Frank Siegert  <frank.siegert@cern.ch>
 
 	Version 1.6.0 release!
 
 2011-08-01  Frank Siegert  <frank.siegert@cern.ch>
 
 	* Overhaul of the WFinder and ZFinder projections, including a change
 	of interface. This solves potential problems with leptons which are not
 	W/Z constituents being excluded from the RemainingFinalState.
 
 2011-07-29  Andy Buckley  <andy@insectnation.org>
 
 	* Version 1.5.2 release!
 
 	* New version of aida2root from James Monk.
 
 2011-07-29  Frank Siegert  <frank.siegert@cern.ch>
 
 	* Fix implementation of --config file option in make-plots.
 
 2011-07-27  David Mallows <dave.mallows@gmail.com>
 
 	* Updated MC_TTBAR.plot to reflect updated analysis.
 
 2011-07-25  Andy Buckley  <andy@insectnation.org>
 
 	* Adding a useTransverseMass flag method and implementation to
 	InvMassFinalState, and using it in the WFinder, after feedback
 	from Gavin Hesketh. This was the neatest way I could do it :S Some
 	other tidying up happened along the way.
 
 	* Adding transverse mass massT and massT2 methods and functions
 	for FourMomentum.
 
 2011-07-22  Frank Siegert  <frank.siegert@cern.ch>
 
 	* Added ATLAS_2011_S9120807
 
 	* Add two more observables to MC_DIPHOTON and make its isolation cut
 	more LHC-like
 
 	* Add linear photon pT histo to MC_PHOTONJETS
 
 2011-07-20  Andy Buckley  <andy@insectnation.org>
 
 	* Making MC_TTBAR work with semileptonic ttbar events and generally
 	tidying the code.
 
 2011-07-19  Andy Buckley  <andy@insectnation.org>
 
 	* Version bump to 1.5.2.b01 in preparation for a release in the
 	very near future.
 
 2011-07-18  David Mallows <dave.mallows@gmail.com>
 
 	* Replaced MC_TTBAR: Added t,tbar reconstruction. Not yet working.
 
 2011-07-18  Andy Buckley  <andy@insectnation.org>
 
 	* bin/rivet-buildplugin.in: Pass the AM_CXXFLAGS
 	variable (including the warning flags) to the C++ compiler when
 	building user analysis plugins.
 
 	* include/LWH/DataPointSet.h: Fix accidental setting of errorMinus
 	= scalefactor * error_Plus_. Thanks to Anton Karneyeu for the bug
 	report!
 
 2011-07-18  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added CMS_2011_S8884919 (charged hadron multiplicity in NSD
 	events corrected to pT>=0).
 
 	* Added CMS_2010_S8656010 and CMS_2010_S8547297 (charged
 	hadron pT and eta in NSD events)
 
 	* Added CMS_2011_S8968497 (chi_dijet)
 
 	* Added CMS_2011_S8978280 (strangeness)
 
 2011-07-13  Andy Buckley  <andy@insectnation.org>
 
 	* Rivet PDF manual updates, to not spread disinformation about
 	bootstrapping a Genser repo.
 
 2011-07-12  Andy Buckley  <andy@insectnation.org>
 
 	* bin/make-plots: Protect property reading against unstripped \r
 	characters from DOS newlines.
 
 	* bin/rivet-mkhtml: Add a -M unmatch regex flag (note that these
 	are matching the analysis path rather than individual histos on
 	this script), and speed up the initial analysis identification and
 	selection by avoiding loops of regex comparisons for repeats of
 	strings which have already been analysed.
 
 	* bin/compare-histos: remove the completely (?) unused histogram
 	list, and add -m and -M regex flags, as for aida2flat and
 	flat2aida.
 
 2011-06-30  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* fix fromFlat() in lighthistos: It would ignore histogram paths
 	before.
 
 	* flat2aida: preserve histogram order from .dat files
 
 2011-06-27  Andy Buckley  <andy@insectnation.org>
 
 	* pyext/setup.py.in: Use CXXFLAGS and LDFLAGS safely in the Python
 	extension build, and improve the use of build/src directory
 	arguments.
 
 2011-06-23  Andy Buckley  <andy@insectnation.org>
 
 	* Adding a tentative rivet-updateanalyses script, based on
 	lhapdf-getdata, which will download new analyses as requested. We
 	could change our analysis-providing behaviour a bit to allow this
 	sort of delivery mechanism to be used as the normal way of getting
 	analysis updates without us having to make a whole new Rivet
 	release. It is nice to be able to identify analyses with releases,
 	though, for tracking whether bugs have been addressed.
 
 2011-06-10  Frank Siegert  <frank.siegert@cern.ch>
 
 	* Bugfixes in WFinder.
 
 2011-06-10  Andy Buckley  <andy@insectnation.org>
 
 	* Adding \physicsxcoor and \physicsycoor treatment to make-plots.
 
 2011-06-06  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Allow for negative cross-sections. NLO tools need this.
 
 	* make-plots: For RatioPlotMode=deviation also consider the MC
 	uncertainties, not just data.
 
 2011-06-04  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Add support for goodness-of-fit calculations to make-plots.
 	The results are shown in the legend, and one histogram can
 	be selected to determine the color of the plot margin. See
 	the documentation for more details.
 
 2011-06-04  Andy Buckley  <andy@insectnation.org>
 
 	* Adding auto conversion of Histogram2D to DataPointSets in the
 	AnalysisHandler _normalizeTree method.
 
 2011-06-03  Andy Buckley  <andy@insectnation.org>
 
 	* Adding a file-weight feature to the Run object, which will
 	optionally rescale the weights in the provided HepMC files. This
 	should be useful for e.g. running on multiple differently-weighted
 	AlpGen HepMC files/streams. The new functionality is used by the
 	rivet command via an optional weight appended to the filename with
 	a colon delimiter, e.g. "rivet fifo1.hepmc fifo2.hepmc:2.31"
 
 2011-06-01  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Add BeamThrust projection
 
 2011-05-31  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fix LIBS for fastjet-3.0
 
 	* Add basic infrastructure for Taylor plots in make-plots
 
 	* Fix OPAL_2004_S6132243: They are using charged+neutral.
 
 	* Release 1.5.1
 
 2011-05-22  Andy Buckley  <andy@insectnation.org>
 
 	* Adding plots of stable and decayed PID multiplicities to
 	MC_GENERIC (useful for sanity-checking generator setups).
 
 	* Removing actually-unused ProjectionApplier.fhh forward
 	declaration header.
 
 2011-05-20  Andy Buckley  <andy@insectnation.org>
 
 	* Removing import of ipython shell from rivet-rescale, having just
 	seen it throw a multi-coloured warning message on a student's
 	lxplus Rivet session!
 
 	* Adding support for the compare-histos --no-ratio flag when using
 	rivet-mkhtml. Adding --rel-ratio, --linear, etc. is an exercise
 	for the enthusiast ;-)
 
 2011-05-10  Andy Buckley  <andy@insectnation.org>
 
 	* Internal minor changes to the ProjectionHandler and
 	ProjectionApplier interfaces, in particular changing the
 	ProjectionHandler::create() function to be called getInstance and
 	to return a reference rather than a pointer. The reference change
 	is to make way for an improved singleton implementation, which
 	cannot yet be used due to a bug in projection memory
 	management. The code of the improved singleton is available, but
 	commented out, in ProjectionManager.hh to allow for easier
 	migration and to avoid branching.
 
 2011-05-08  Andy Buckley  <andy@insectnation.org>
 
 	* Extending flat2aida to be able to read from and write to
 	stdin/out as for aida2flat, and also eliminating the internal
 	histo parsing representation in favour of the one in
 	lighthisto. lighthisto's fromFlat also needed a bit of an
 	overhaul: it has been extended to parse each histo's chunk of
 	text (including BEGIN and END lines) in fromFlatHisto, and for
 	fromFlat to parse a collection of histos from a file, in keeping
 	with the behaviour of fromDPS/fromAIDA. Merging into Professor is
 	now needed.
 
 	* Extending aida2flat to have a better usage message, to accept
 	input from stdin for command chaining via pipes, and to be a bit
 	more sensibly internally structured (although it also now has to
 	hold all histos in memory before writing out -- that shouldn't be
 	a problem for anything other than truly huge histo files).
 
 2011-05-04  Andy Buckley  <andy@insectnation.org>
 
 	* compare-histos: If using --mc-errs style, prefer dotted and
 	dashdotted line styles to dashed, since dashes are often too long
 	to be distinguishable from solid lines. Even better might be to
 	always use a solid line for MC errs style, and to add more colours.
 
 	* rivet-mkhtml: use a no-mc-errors drawing style by default,
 	to match the behaviour of compare-histos, which it calls. The
 	--no-mc-errs option has been replaced with an --mc-errs option.
 
 2011-05-04  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Ignore duplicate files in compare-histos.
 
 2011-04-25  Andy Buckley  <andy@insectnation.org>
 
 	* Adding some hadron-specific N and sumET vs. |eta| plots to MC_GENERIC.
 
 	* Re-adding an explicit attempt to get the beam particles, since
 	HepMC's IO_HERWIG seems to not always set them even though it's
 	meant to.
 
 2011-04-19  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added ATLAS_2011_S9002537 W asymmetry analysis
 
 2011-04-14  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* deltaR, deltaPhi, deltaEta now available in all combinations of
 	FourVector, FourMomentum, Vector3, doubles. They also accept jets
 	and particles as arguments now.
 
 2011-04-13  David Grellscheid <david.grellscheid@durham.ac.uk>
 
 	* added ATLAS 8983313: 0-lepton BSM
 
 2011-04-01  Andy Buckley  <andy@insectnation.org>
 
 	* bin/rivet-mkanalysis: Don't try to download SPIRES or HepData
 	info if it's not a standard analysis (i.e. if the SPIRES ID is not
 	known), and make the default .info file validly parseable by YAML,
 	which was an unfortunate gotcha for anyone writing a first
 	analysis.
 
 2011-03-31  Andy Buckley  <andy@insectnation.org>
 
 	* bin/compare-histos: Write more appropriate ratio plot labels
 	when not comparing to data, and use the default make-plots labels
 	when comparing to data.
 
 	* bin/rivet-mkhtml: Adding a timestamp to the generated pages, and
 	a -t/--title option to allow setting the main HTML page title on
 	the command line: otherwise it becomes impossible to tell these
 	pages apart when you have a lot of them, except by URL!
 
 2011-03-24  Andy Buckley  <andy@insectnation.org>
 
 	* bin/aida2flat: Adding a -M option to *exclude* histograms whose
 	paths match a regex. Writing a negative lookahead regex with
 	positive matching was far too awkward!
 
 2011-03-18  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* src/Core/AnalysisHandler.cc (AnalysisHandler::removeAnalysis):
 	Fixed strange shared pointer assignment that caused seg-fault.
 
 2011-03-13  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* filling of functions works now in a more intuitive way (I hope).
 
 2011-03-09  Andy Buckley  <andy@insectnation.org>
 
 	* Version 1.5.0 release!
 
 2011-03-08  Andy Buckley  <andy@insectnation.org>
 
 	* Adding some extra checks for external packages in make-plots.
 
 2011-03-07  Andy Buckley  <andy@insectnation.org>
 
 	* Changing the accuracy of the beam energy checking to 1%, to make
 	the UI a bit more forgiving. It's still best to specify exactly the right
 	energy of course!
 
 2011-03-01  Andy Buckley  <andy@insectnation.org>
 
 	* Adding --no-plottitle to compare-histos (+ completion).
 
 	* Fixing segfaults in UA1_1990_S2044935 and UA5_1982_S875503.
 
 	* Bump ABI version numbers for 1.5.0 release.
 
 	* Use AnalysisInfo for storage of the NeedsCrossSection analysis flag.
 
 	* Allow field setting in AnalysisInfo.
 
 2011-02-27  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Support LineStyle=dashdotted in make-plots
 
 	* New command line option --style for compare-histos. Options are
 	"default", "bw" and "talk".
 
 	* cleaner uninstall
 
 2011-02-26  Andy Buckley  <andy@insectnation.org>
 
 	* Changing internal storage and return type of Particle::pdgId()
 	to PdgId, and adding Particle::energy().
 
 	* Renaming Analysis::energies() as Analysis::requiredEnergies().
 
 	* Adding beam energies into beam consistency checking:
 	Analysis::isCompatible methods now also require the beam energies
 	to be provided.
 
 	* Removing long-deprecated AnalysisHandler::init() constructor and
 	AnalysisHandler::removeIncompatibleAnalyses() methods.
 
 2011-02-25  Andy Buckley  <andy@insectnation.org>
 
 	* Adding --disable-obsolete, which takes its value from the value
 	of --disable-preliminary by default.
 
 	* Replacing RivetUnvalidated and RivetPreliminary plugin libraries
 	with optionally-configured analysis contents in the
 	experiment-specific plugin libraries. This avoids issues with
 	making libraries rebuild consistently when sources were reassigned
 	between libraries.
 
 2011-02-24  Andy Buckley  <andy@insectnation.org>
 
 	* Changing analysis plugin registration to fall back through
 	available paths rather than have RIVET_ANALYSIS_PATH totally
 	override the built-in paths. The first analysis hook of a given
 	name to be found is now the one that's used: any duplicates found
 	will be warned about but unused. getAnalysisLibPaths() now returns
 	*all* the search paths, in keeping with the new search behaviour.
 
 2011-02-22  Andy Buckley  <andy@insectnation.org>
 
 	* Moving the definition of the MSG_* macros into the Logging.hh
 	header. They can't be used everywhere, though, as they depend on
 	the existence of a this->getLog() method in the call scope. This
 	move makes them available in e.g. AnalysisHandler and other bits
 	of framework other than projections and analyses.
 
 	* Adding a gentle print-out from the Rivet AnalysisHandler if
 	preliminary analyses are being used, and strengthening the current
 	warning if unvalidated analyses are used.
 
 	* Adding documentation about the validation "process" and
 	the (un)validated and preliminary analysis statuses.
 
 	* Adding the new RivetPreliminary analysis library, and the
 	corresponding --disable-preliminary configure flag. Analyses in
 	this library are subject to change names, histograms, reference
 	data values, etc. between releases: make sure you check any
 	dependences on these analyses when upgrading Rivet.
 
 	* Change the Python script ref data search behaviours to use Rivet
 	ref data by default where available, rather than requiring a -R
 	option. Where relevant, -R is still a valid option, to avoid
 	breaking legacy scripts, and there is a new --no-rivet-refs option
 	to turn the default searching *off*.
 
 	* Add the prepending and appending optional arguments to the path
 	searching functions. This will make it easier to combine the
 	search functions with user-supplied paths in Python scripts.
 
 	* Make make-plots killable!
 
 	* Adding Rivet version to top of run printout.
 
 	* Adding Run::crossSection() and printing out the cross-section in
 	pb at the end of a Rivet run.
 
 2011-02-22  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Make lighthisto.py aware of 2D histograms
 
 	* Adding published versions of the CDF_2008 leading jets and DY
 	analyses, and marking the preliminary ones as "OBSOLETE".
 
 2011-02-21  Andy Buckley  <andy@insectnation.org>
 
 	* Adding PDF documentation for path searching and .info/.plot
 	files, and tidying overfull lines.
 
 	* Removing unneeded const declarations from various return by
 	value path and internal binning functions. Should not affect ABI
 	compatibility but will force recompilation of external packages
 	using the RivetPaths.hh and Utils.hh headers.
 
 	* Adding findAnalysis*File(fname) functions, to be used by Rivet
 	scripts and external programs to find files known to Rivet
 	according to Rivet's (newly standard) lookup rule.
 
 	* Changing search path function behaviour to always return *all*
 	search directories rather than overriding the built-in locations
 	if the environment variables are set.
 
 2011-02-20  Andy Buckley  <andy@insectnation.org>
 
 	* Adding the ATLAS 2011 transverse jet shapes analysis.
 
 2011-02-18  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Support for transparency in make-plots
 
 2011-02-18  Frank Siegert <frank.siegert@cern.ch>
 
 	* Added ATLAS prompt photon analysis ATLAS_2010_S8914702
 
 2011-02-10  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Simple NOOP constructor for Thrust projection
 
 	* Add CMS event shape analysis. Data read off the plots. We
 	will get the final numbers when the paper is accepted by
 	the journal.
 
 2011-02-10  Frank Siegert <frank.siegert@cern.ch>
 
 	* Add final version of ATLAS dijet azimuthal decorrelation
 
 2011-02-10  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* remove ATLAS conf note analyses for which we have final data
 	* reshuffle histograms in ATLAS minbias analysis to match Hepdata
 	* small pT-cut fix in ATLAS track based UE analysis
 
 2011-01-31  Andy Buckley  <andy@insectnation.org>
 
 	* Doc tweaks and adding cmp-by-|p| functions for Jets, to match
 	those added by Hendrik for Particles.
 
 	* Don't sum photons around muons in the D0 2010 Z pT analysis.
 
 2011-01-27  Andy Buckley  <andy@insectnation.org>
 
 	* Adding ATLAS 2010 min bias and underlying event analyses and data.
 
 2011-01-23  Andy Buckley  <andy@insectnation.org>
 
 	* Make make-plots write out PDF rather than PS by default.
 
 2011-01-12  Andy Buckley  <andy@insectnation.org>
 
 	* Fix several rendering and comparison bugs in rivet-mkhtml.
 
 	* Allow make-plots to write into an existing directory, at the
 	user's own risk.
 
 	* Make rivet-mkhtml produce PDF-based output rather than PS by
 	default (most people want PDF these days). Can we do the same
 	change of default for make-plots?
 
 	* Add getAnalysisPlotPaths() function, and use it in compare-histos
 
 	* Use proper .info file search path function internally in AnalysisInfo::make.
 
 2011-01-11  Andy Buckley  <andy@insectnation.org>
 
 	* Clean up ATLAS dijet analysis.
 
 2010-12-30  Andy Buckley  <andy@insectnation.org>
 
 	* Adding a run timeout option, and small bug-fixes to the event
 	timeout handling, and making first event timeout work nicely with
 	the run timeout. Run timeout is intended to be used in conjunction
 	with timed batch token expiry, of the type that likes to make 0
 	byte AIDA files on LCG when Grid proxies time out.
 
 2010-12-21  Andy Buckley  <andy@insectnation.org>
 
 	* Fix the cuts in the CDF 1994 colour coherence analysis.
 
 2010-12-19  Andy Buckley  <andy@insectnation.org>
 
 	* Fixing CDF midpoint cone jet algorithm default construction to
 	have an overlap threshold of 0.5 rather than 0.75. This was
 	recommended by the FastJet manual, and noticed while adding the
 	ATLAS and CMS cones.
 
 	* Adding ATLAS and CMS old iterative cones as "official" FastJets
 	constructor options (they could always have been used by explicit
 	instantiation and attachment of a Fastjet plugin object).
 
 	* Removing defunct and unused ClosestJetShape projection.
 
 2010-12-16  Andy Buckley  <andy@insectnation.org>
 
 	* bin/compare-histos, pyext/lighthisto.py: Take ref paths from
 	rivet module API rather than getting the environment by hand.
 
 	* pyext/lighthisto.py: Only read .plot info from the first
 	matching file (speed-up compare-histos).
 
 2010-12-14  Andy Buckley  <andy@insectnation.org>
 
 	* Augmenting the physics vector functionality to make FourMomentum
 	support maths operators with the correct return type (FourMomentum
 	rather than FourVector).
 
 2010-12-11  Andy Buckley  <andy@insectnation.org>
 
 	* Adding a --event-timeout option to control the event timeout,
 	adding it to the completion script, and making sure that the init
 	time check is turned OFF once successful!
 
 	* Adding an 3600 second timeout for initialising an event file. If
 	it takes longer than (or anywhere close to) this long, chances are
 	that the event source is inactive for some reason (perhaps
 	accidentally unspecified and stdin is not active, or the event
 	generator has died at the other end of the pipe. The reason for
 	not making it something shorter is that e.g. Herwig++ or Sherpa
 	can have long initialisation times to set up the MPI handler or to
 	run the matrix element integration. An timeout after an hour is
 	still better than a batch job which runs for two days before you
 	realise that you forgot to generate any events!
 
 2010-12-10  Andy Buckley  <andy@insectnation.org>
 
 	* Fixing unbooked-histo segfault in UA1_1990_S2044935 at 63 GeV.
 
 2010-12-08  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fixes in ATLAS_2010_CONF_083, declaring it validated
 
 	* Added ATLAS_2010_CONF_046, only two plots are implemented.
 	The paper will be out soon, and we don't need the other plots
 	right now. Data is read off the plots in the note.
 
 	* New option "SmoothLine" for HISTOGRAM sections in make-plots
 
 	* Changed CustomTicks to CustomMajorTicks and added CustomMinorTicks
 	in make-plots.
 
 2010-12-07  Andy Buckley  <andy@insectnation.org>
 
 	* Update the documentation to explain this latest bump to path
 	lookup behaviours.
 
 	* Various improvements to existing path lookups. In particular,
 	the analysis lib path locations are added to the info and ref
 	paths to avoid having to set three variables when you have all
 	three file types in the same personal plugin directory.
 
 	* Adding setAnalysisLibPaths and addAnalysisLibPath
 	functions. rivet --analysis-path{,-append} now use these and work
 	correctly. Hurrah!
 
 	* Add --show-analyses as an alias for --show-analysis, following a
 	comment at the ATLAS tutorial.
 
 2010-12-07  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Change LegendXPos behaviour in make-plots. Now the top left
 	corner of the legend is used as anchor point.
 
 2010-12-03  Andy Buckley  <andy@insectnation.org>
 
 	* 1.4.0 release.
 
 	* Add bin-skipping to compare-histos to avoid one use of
 	rivet-rmgaps (it's still needed for non-plotting post-processing
 	like Professor).
 
 2010-12-03  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fix normalisation issues in UA5 and ALEPH analyses
 
 2010-11-27  Andy Buckley  <andy@insectnation.org>
 
 	* MathUtils.hh: Adding fuzzyGtrEquals and fuzzyLessEquals, and
 	tidying up the math utils collection a bit.
 
 	* CDF 1994 colour coherence analysis overhauled and
 	correction/norm factors fixed. Moved to VALIDATED status.
 
 	* Adding programmable completion for aida2flat and flat2aida.
 
 	* Improvements to programmable completion using the neat _filedir
 	completion shell function which I just discovered.
 
 2010-11-26  Andy Buckley  <andy@insectnation.org>
 
 	* Tweak to floating point inRange to use fuzzyEquals for CLOSED
 	interval equality comparisons.
 
 	* Some BibTeX generation improvements, and fixing the ATLAS dijet
 	BibTeX key.
 
 	* Resolution upgrade in PNG make-plots output.
 
 	* CDF_2005_S6217184.cc, CDF_2008_S7782535.cc: Updates to use the
 	new per-jet JetAlg interface (and some other fixes).
 
 	* JetAlg.cc: Changed the interface on request to return per-jet
 	rather than per-event jet shapes, with an extra jet index argument.
 
 	* MathUtils.hh: Adding index_between(...) function, which is handy
 	for working out which bin a value falls in, given a set of bin edges.
 
 2010-11-25  Andy Buckley  <andy@insectnation.org>
 
 	* Cmp.hh: Adding ASC/DESC (and ANTISORTED) as preferred
 	non-EQUIVALENT enum value synonyms over misleading
 	SORTED/UNSORTED.
 
 	* Change of rapidity scheme enum name to RapScheme
 
 	* Reworking JetShape a bit further: constructor args now avoid
 	inconsistencies (it was previously possible to define incompatible
 	range-ends and interval). Internal binning implementation also
 	reworked to use a vector of bin edges: the bin details are
 	available via the interface. The general jet pT cuts can be
 	applied via the JetShape constructor.
 
 	* MathUtils.hh: Adding linspace and logspace utility
 	functions. Useful for defining binnings.
 
 	* Adding more general cuts on jet pT and (pseudo)rapidity.
 
 2010-11-11  Andy Buckley  <andy@insectnation.org>
 
 	* Adding special handling of FourMomentum::mass() for computed
 	zero-mass vectors for which mass2 can go (very slightly) negative
 	due to numerical precision.
 
 2010-11-10  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Adding ATLAS-CONF-2010-083 conference note. Data is read from plots.
 	When I run Pythia 6 the bins close to pi/2 are higher than in the note,
 	so I call this "unvalidated". But then ... the note doesn't specify
 	a tune or even just a version for the generators in the plots. Not even
 	if they used Pythia 6 or Pythia 8. Probably 6, since they mention AGILe.
 
 2010-11-10  Andy Buckley  <andy@insectnation.org>
 
 	* Adding a JetAlg::useInvisibles(bool) mechanism to allow ATLAS
 	jet studies to include neutrinos. Anyone who chooses to use this
 	mechanism had better be careful to remove hard neutrinos manually
 	in the provided FinalState object.
 
 2010-11-09  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Adding ATLAS-CONF-2010-049 conference note. Data is read from plots.
 	Fragmentation functions look good, but I can't reproduce the MC lines
 	(or even the relative differences between them) in the jet cross-section
 	plots. So consider those unvalidated for now. Oh, and it seems ATLAS
 	screwed up the error bands in their ratio plots, too. They are
 	upside-down.
 
 2010-11-07  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Adding ATLAS-CONF-2010-081 conference note. Data is read from plots.
 
 2010-11-06  Andy Buckley  <andy@insectnation.org>
 
 	* Deprecating the old JetShape projection and renaming to
 	ClosestJetShape: the algorithm has a tenuous relationship with
 	that actually used in the CDF (and ATLAS) jet shape analyses. CDF
 	analyses to be migrated to the new JetShape projection... and some
 	of that projection's features, design elements, etc. to be
 	finished off: we may as well take this opportunity to clear up
 	what was one of our nastiest pieces of code.
 
 2010-11-05  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Adding ATLAS-CONF-2010-031 conference note. Data is read from plots.
 
 2010-10-29  Andy Buckley  <andy@insectnation.org>
 
 	* Making rivet-buildplugin use the same C++ compiler and CXXFLAGS
 	variable as used for the Rivet system build.
 
 	* Fixing NeutralFinalState projection to, erm, actually select
 	neutral particles (by Hendrik).
 
 	* Allow passing a general FinalState reference to the JetShape
 	projection, rather than requiring a VetoedFS.
 
 2010-10-07  Andy Buckley  <andy@insectnation.org>
 
 	* Adding a --with-root flag to rivet-buildplugin to add
 	root-config --libs flags to the plugin build command.
 
 2010-09-24  Andy Buckley  <andy@insectnation.org>
 
 	* Releasing as Rivet 1.3.0.
 
 	* Bundling underscore.sty to fix problems with running make-plots
 	on dat files generated by compare-histos from AIDA files with
 	underscores in their names.
 
 2010-09-16  Andy Buckley  <andy@insectnation.org>
 
 	* Fix error in N_effective definition for weighted profile errors.
 
 2010-08-18  Andy Buckley  <andy@insectnation.org>
 
 	* Adding MC_GENERIC analysis. NB. Frank Siegert also added MC_HJETS.
 
 2010-08-03  Andy Buckley  <andy@insectnation.org>
 
 	* Fixing compare-histos treatment of what is now a ref file, and
 	speeding things up... again. What a mess!
 
 2010-08-02  Andy Buckley  <andy@insectnation.org>
 
 	* Adding rivet-nopy: a super-simple Rivet C++ command line
 	interface which avoids Python to make profiling and debugging
 	easier.
 
 	* Adding graceful exception handling to the AnalysisHandler event
 	loop methods.
 
 	* Changing compare-histos behaviour to always show plots for which
 	there is at least one MC histo. The default behaviour should now
 	be the correct one in 99% of use cases.
 
 2010-07-30  Andy Buckley  <andy@insectnation.org>
 
 	* Merging in a fix for shared_ptrs not being compared for
 	insertion into a set based on raw pointer value.
 
 2010-07-16  Andy Buckley  <andy@insectnation.org>
 
 	* Adding an explicit library dependency declaration on libHepMC,
 	and hence removing the -lHepMC from the rivet-config --libs
 	output.
 
 2010-07-14  Andy Buckley  <andy@insectnation.org>
 
 	* Adding a manual section on use of Rivet (and AGILe) as
 	libraries, and how to use the -config scripts to aid compilation.
 
 	* FastJets projection now allows setting of a jet area definition,
 	plus a hacky mapping for getting the area-enabled cluster
 	sequence. Requested by Pavel Starovoitov & Paolo Francavilla.
 
 	* Lots of script updates in last two weeks!
 
 2010-06-30  Andy Buckley  <andy@insectnation.org>
 
 	* Minimising amount of Log class mapped into SWIG.
 
 	* Making Python ext build checks fail with error rather than
 	warning if it has been requested (or, rather, not explicitly
 	disabled).
 
 2010-06-28  Andy Buckley  <andy@insectnation.org>
 
 	* Converting rivet Python module to be a package, with the dlopen
 	flag setting etc. done around the SWIG generated core wrapper
 	module (rivet.rivetwrap).
 
 	* Requiring Python >= 2.4.0 in rivet scripts (and adding a Python
 	version checker function to rivet module)
 
 	* Adding --epspng option to make-plots (and converting to use subprocess.Popen).
 
 2010-06-27  Andy Buckley  <andy@insectnation.org>
 
 	* Converting JADE_OPAL analysis to use the fastjet
 	exclusive_ymerge_*max* function, rather than just
 	exclusive_ymerge: everything looks good now. It seems that fastjet
 	>= 2.4.2 is needed for this to work properly.
 
 2010-06-24  Andy Buckley  <andy@insectnation.org>
 
 	* Making rivet-buildplugin look in its own bin directory when
 	trying to find rivet-config.
 
 2010-06-23  Andy Buckley  <andy@insectnation.org>
 
 	* Adding protection and warning about numerical precision issues
 	in jet mass calculation/histogramming to the MC_JetAnalysis
 	analysis.
 
 	* Numerical precision improvement in calculation of
 	Vector4::mass2.
 
 	* Adding relative scale ratio plot flag to compare-histos
 
 	* Extended command completion to rivet-config, compare-histos, and
 	make-plots.
 
 	* Providing protected log messaging macros,
 	MSG_{TRACE,DEBUG,INFO,WARNING,ERROR} cf. Athena.
 
 	* Adding environment-aware functions for Rivet search path list access.
 
 2010-06-21  Andy Buckley  <andy@insectnation.org>
 
 	* Using .info file beam ID and energy info in HTML and LaTeX documentation.
 
 	* Using .info file beam ID and energy info in command-line printout.
 
 	* Fixing a couple of references to temporary variables in the
 	analysis beam info, which had been introduced during refactoring:
 	have reinstated reference-type returns as the more efficient
 	solution. This should not affect API compatibility.
 
 	* Making SWIG configure-time check include testing for
 	incompatibilities with the C++ compiler (re. the recurring _const_
 	char* literals issue).
 
 	* Various tweaks to scripts: make-plots and compare-histos
 	processes are now renamed (on Linux), rivet-config is avoided when
 	computing the Rivet version,and RIVET_REF_PATH is also set using
 	the rivet --analysis-path* flags. compare-histos now uses multiple
 	ref data paths for .aida file globbing.
 
 	* Hendrik changed VetoedFinalState comparison to always return
 	UNDEFINED if vetoing on the results of other FS projections is
 	being used. This is the only simple way to avoid problems
 	emanating from the remainingFinalState thing.
 
 2010-06-19  Andy Buckley  <andy@insectnation.org>
 
 	* Adding --analysis-path and --analysis-path-append command-line
 	flags to the rivet script, as a "persistent" way to set or extend
 	the RIVET_ANALYSIS_PATH variable.
 
 	* Changing -Q/-V script verbosity arguments to more standard
 	-q/-v, after Hendrik moaned about it ;)
 
 	* Small fix to TinyXML operator precendence: removes a warning,
 	and I think fixes a small bug.
 
 	* Adding plotinfo entries for new jet rapidity and jet mass plots
 	in MC_JetAnalysis derivatives.
 
 	* Moving MC_JetAnalysis base class into a new
 	libRivetAnalysisTools library, with analysis base class and helper
 	headers to be stored in the reinstated Rivet/Analyses include
 	directory.
 
 2010-06-08  Andy Buckley  <andy@insectnation.org>
 
 	* Removing check for CEDARSTD #define guard, since we no longer
 	compile against AGILe and don't have to be careful about
 	duplication.
 
 	* Moving crappy closest approach and decay significance functions
 	from Utils into SVertex, which is the only place they have ever
 	been used (and is itself almost entirely pointless).
 
 	* Overhauling particle ID <-> name system to clear up ambiguities
 	between enums, ints, particles and beams. There are no more enums,
 	although the names are still available as const static ints, and
 	names are now obtained via a singleton class which wraps an STL
 	map for name/ID lookups in both directions.
 
 2010-05-18  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fixing factor-of-2 bug in the error calculation when scaling
 	histograms.
 
 	* Fixing D0_2001_S4674421 analysis.
 
 2010-05-11  Andy Buckley  <andy@insectnation.org>
 
 	* Replacing TotalVisibleMomentum with MissingMomentum in analyses
 	and WFinder. Using vector ET rather than scalar ET in some places.
 
 2010-05-07  Andy Buckley  <andy@insectnation.org>
 
 	* Revamping the AnalysisHandler constructor and data writing, with
 	some LWH/AIDA mangling to bypass the stupid AIDA idea of having to
 	specify the sole output file and format when making the data
 	tree. Preferred AnalysisHandler constructor now takes only one arg
 	-- the runname -- and there is a new AH.writeData(outfile) method
 	to replace AH.commitData(). Doing this now to begin migration to
 	more flexible histogramming in the long term.
 
 2010-04-21  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fixing LaTeX problems (make-plots) on ancient machines, like lxplus.
 
 2010-04-29  Andy Buckley  <andy@insectnation.org>
 
 	* Fixing (I hope!) the treatment of weighted profile bin errors in LWH.
 
 2010-04-21  Andy Buckley  <andy@insectnation.org>
 
 	* Removing defunct and unused KtJets and Configuration classes.
 
 	* Hiding some internal details from Doxygen.
 
 	* Add @brief Doxygen comments to all analyses, projections and
 	core classes which were missing them.
 
 2010-04-21  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* remove obsolete reference to InitialQuarks from DELPHI_2002
 	* fix normalisation in CDF_2000_S4155203
 
 2010-04-20  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* bin/make-plots: real support for 2-dim histograms plotted as
 	colormaps, updated the documentation accordingly.
 	* fix misleading help comment in configure.ac
 
 2010-04-08  Andy Buckley  <andy@insectnation.org>
 
 	* bin/root2flat: Adding this little helper script, minimally
 	modified from one which Holger Schulz made for internal use in
 	ATLAS.
 
 2010-04-05  Andy Buckley  <andy@insectnation.org>
 
 	* Using spiresbib in rivet-mkanalysis: analysis templates made
 	with rivet-mkanalysis will now contain a SPIRES-dumped BibTeX key
 	and entry if possible!
 
 	* Adding BibKey and BibTeX entries to analysis metadata files, and
 	updating doc build to use them rather than the time-consuming
 	SPIRES screen-scraping. Added SPIRES BibTeX dumps to all analysis
 	metadata using new (uninstalled & unpackaged) doc/get-spires-data
 	script hack.
 
 	* Updating metadata files to add Energies, Beams and PtCuts
 	entries to all of them.
 
 	* Adding ToDo, NeedsCrossSection, and better treatment of Beams
 	and Energies entries in metadata files and in AnalysisInfo and
 	Analysis interfaces.
 
 2010-04-03  Andy Buckley  <andy@insectnation.org>
 
 	* Frank Siegert: Update of rivet-mkhtml to conform to improved
 	compare-histos.
 
 	* Frank Siegert: LWH output in precision-8 scientific notation, to
 	solve a binning precision problem... the first time weve noticed a
 	problem!
 
 	* Improved treatment of data/reference datasets and labels in
 	compare-histos.
 
 	* Rewrite of rivet-mkanalysis in Python to make way for neat
 	additions.
 
 	* Improving SWIG tests, since once again the user's biuld system
 	must include SWIG (no test to check that it's a 'good SWIG', since
 	the meaning of that depends on which compiler is being used and we
 	hope that the user system is consistent... evidence from Finkified
 	Macs and bloody SLC5 notwithstanding).
 
 2010-03-23  Andy Buckley  <andy@insectnation.org>
 
 	* Tag as patch release 1.2.1.
 
 2010-03-22  Andy Buckley  <andy@insectnation.org>
 
 	* General tidying of return arguments and intentionally unused
 	parameters to keep -Wextra happy (some complaints remain from
 	TinyXML, FastJet, and HepMC).
 
 	* Some extra bug fixes: in FastJets projection with explicit
 	plugin argument, removing muon veto cut on FoxWolframMoments.
 
 	* Adding UNUSED macro to help with places where compiler warnings
 	can't be helped.
 
 	* Turning on -Wextra warnings, and fixing some violations.
 
 2010-03-21  Andy Buckley  <andy@insectnation.org>
 
 	* Adding MissingMomentum projection, as replacement for ~all uses
 	of now-deprecated TotalVisibleMomentum projection.
 
 	* Fixing bug with TotalVisibleMomentum projection usage in MC_SUSY
 	analysis.
 
 	* Frank Siegert fixed major bug in pTmin param passing to FastJets
 	projection. D'oh: requires patch release.
 
 2010-03-02  Andy Buckley  <andy@insectnation.org>
 
 	* Tagging for 1.2.0 release... at last!
 
 2010-03-01  Andy Buckley  <andy@insectnation.org>
 
 	* Updates to manual, manual generation scripts, analysis info etc.
 
 	* Add HepData URL to metadata print-out with rivet --show-analysis
 
 	* Fix average Et plot in UA1 analysis to only apply to the tracker
 	acceptance (but to include neutral particle contributions,
 	i.e. the region of the calorimeter in the tracker acceptance).
 
 	* Use Et rather than pT in filling the scalar Et measure in
 	TotalVisibleMomentum.
 
 	* Fixes to UA1 normalisation (which is rather funny in the paper).
 
 2010-02-26  Andy Buckley  <andy@insectnation.org>
 
 	* Update WFinder to not place cuts and other restrictions on the
 	neutrino.
 
 2010-02-11  Andy Buckley  <andy@insectnation.org>
 
 	* Change analysis loader behaviour to use ONLY RIVET_ANALYSIS_PATH
 	locations if set, otherwise use ONLY the standard Rivet analysis
 	install path. Should only impact users of personal plugin
 	analyses, who should now explicitly set RIVET_ANALYSIS_PATH to
 	load their analysis... and who can now create personal versions of
 	standard analyses without getting an error message about duplicate
 	loading.
 
 2010-01-15  Andy Buckley  <andy@insectnation.org>
 
 	* Add tests for "stable" heavy flavour hadrons in jets (rather
 	than just testing for c/b hadrons in the ancestor lists of stable
 	jet constituents)
 
 2009-12-23  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* New option "RatioPlotMode=deviation" in make-plots.
 
 2009-12-14  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* New option "MainPlot" in make-plots. For people who only want
 	the ratio plot and nothing else.
 
 	* New option "ConnectGaps" in make-plots. Set to 1 if you
 	want to connect gaps in histograms with a line when ErrorBars=0.
 	Works both in PLOT and in HISTOGRAM sections.
 
 	* Eliminated global variables for coordinates in make-plots and
 	enabled multithreading.
 
 2009-12-14  Andy Buckley  <andy@insectnation.org>
 
 	* AnalysisHandler::execute now calls AnalysisHandler::init(event)
 	if it has not yet been initialised.
 
 	* Adding more beam configuration features to Beam and
 	AnalysisHandler: the setRunBeams(...) methods on the latter now
 	allows a beam configuration for the run to be specified without
 	using the Run class.
 
 2009-12-11  Andy Buckley  <andy@insectnation.org>
 
 	* Removing use of PVertex from few remaining analyses. Still used
 	by SVertex, which is itself hardly used and could maybe be
 	removed...
 
 2009-12-10  Andy Buckley  <andy@insectnation.org>
 
 	* Updating JADE_OPAL to do the histo booking in init(), since
 	sqrtS() is now available at that stage.
 
 	* Renaming and slightly re-engineering all MC_*_* analyses to not
 	be collider-specific (now the Analysis::sqrtS/beams()) methods
 	mean that histograms can be dynamically binned.
 
 	* Creating RivetUnvalidated.so plugin library for unvalidated
 	analyses. Unvalidated analyses now need to be explicitly enabled
 	with a --enable-unvalidated flag on the configure script.
 
 	* Various min bias analyses updated and validated.
 
 2009-12-10  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Propagate SPECIAL and HISTOGRAM sections from .plot files
 	through compare-histos
 
 	* STAR_2006_S6860818: <pT> vs particle mass, validate analysis
 
 2009-12-04  Andy Buckley  <andy@insectnation.org>
 
 	* Use scaling rather than normalising in DELPHI_1996: this is
 	generally desirable, since normalizing to 1 for 1/sig dsig/dx
 	observables isn't correct if any events fall outside the histo
 	bounds.
 
 	* Many fixes to OPAL_2004.
 
 	* Improved Hemispheres interface to remove unnecessary consts on
 	returned doubles, and to also return non-squared versions
 	of (scaled) hemisphere masses.
 
 	* Add "make pyclean" make target at the top level to make it
 	easier for developers to clean their Python module build when the
 	API is extended.
 
 	* Identify use of unvalidated analyses with a warning message at
 	runtime.
 
 	* Providing Analysis::sqrtS() and Analysis::beams(), and making
 	sure they're available by the time the init methods are called.
 
 2009-12-02  Andy Buckley  <andy@insectnation.org>
 
 	* Adding passing of first event sqrt(s) and beams to analysis handler.
 
 	* Restructuring running to only use one HepMC input file (no-one
 	was using multiple ones, right?) and to break down the Run class
 	to cleanly separate the init and event loop phases. End of file is
 	now neater.
 
 2009-12-01  Andy Buckley  <andy@insectnation.org>
 
 	* Adding parsing of beam types and pairs of energies from YAML.
 
 2009-12-01  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fixing trigger efficiency in CDF_2009_S8233977
 
 2009-11-30  Andy Buckley  <andy@insectnation.org>
 
 	* Using shared pointers to make I/O object memory management
 	neater and less error-prone.
 
 	* Adding crossSectionPerEvent() method [==
 	crossSection()/sumOfWeights()] to Analysis. Useful for histogram
 	scaling since numerator of sumW_passed/sumW_total (to calculate
 	pass-cuts xsec) is cancelled by dividing histo by sumW_passed.
 
 	* Clean-up of Particle class and provision of inline PID::
 	functions which take a Particle as an argument to avoid having to
 	explicitly call the Particle::pdgId() method.
 
 2009-11-30  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fixing division by zero in Profile1D bin errors for
 	bins with just a single entry.
 
 2009-11-24  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* First working version of STAR_2006_S6860818
 
 2009-11-23  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Adding missing CDF_2001_S4751469 plots to uemerge
 	* New "ShowZero" option in make-plots
 	* Improving lots of plot defaults
 	* Fixing typos / non-existing bins in CDF_2001_S4751469 and
 	CDF_2004_S5839831 reference data
 
 2009-11-19  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fixing our compare() for doubles.
 
 2009-11-17  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Zeroth version of STAR_2006_S6860818 analysis (identified
 	strange particles). Not working yet for unstable particles.
 
 2009-11-11  Andy Buckley  <andy@insectnation.org>
 
 	* Adding separate jet-oriented and photon-oriented observables to
 	MC PHOTONJETUE analysis.
 
 	* Bug fix in MC leading jets analysis, and general tidying of
 	leading jet analyses to insert units, etc. (should not affect any
 	current results)
 
 2009-11-10  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fixing last issues in STAR_2006_S6500200 and setting it to
 	VALIDATED.
 	* Noramlise STAR_2006_S6870392 to cross-section
 
 2009-11-09  Andy Buckley  <andy@insectnation.org>
 
 	* Overhaul of jet caching and ParticleBase interface.
 
 	* Adding lists of analyses' histograms (obtained by scanning the
 	plot info files) to the LaTeX documentation.
 
 2009-11-07  Andy Buckley  <andy@insectnation.org>
 
 	* Adding checking system to ensure that Projections aren't
 	registered before the init phase of analyses.
 
 	* Now that the ProjHandler isn't full of defunct pointers (which
 	tend to coincidentally point to *new* Projection pointers rather
 	than undefined memory, hence it wasn't noticed until recently!),
 	use of a duplicate projection name is now banned with a helpful
 	message at runtime.
 
 	* (Huge) overhaul of ProjectionHandler system to use shared_ptr:
 	projections are now deleted much more efficiently, naturally
 	cleaning themselves out of the central repository as they go out
 	of scope.
 
 2009-11-06  Andy Buckley  <andy@insectnation.org>
 
 	* Adding Cmp<double> specialisation, using fuzzyEquals().
 
 2009-11-05  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fixing histogram division code.
 
 2009-11-04  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* New analysis STAR_2006_S6500200 (pion and proton pT spectra in
 	pp collisions at 200 GeV). It is still unclear if they used a cut
 	in rapidity or pseudorapidity, thus the analysis is declared
 	"UNDER DEVELOPMENT" and "DO NOT USE".
 	* Fixing compare() in NeutralFinalState and MergedFinalState
 
 2009-11-04  Andy Buckley  <andy@insectnation.org>
 
 	* Adding consistence checking on beam ID and sqrt(s) vs. those
 	from first event.
 
 2009-11-03  Andy Buckley  <andy@insectnation.org>
 
 	* Adding more assertion checks to linear algebra testing.
 
 2009-11-02  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fixing normalisation issue with stacked histograms in
 	make-plots.
 
 2009-10-30  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* CDF_2009_S8233977: Updating data and axes labels to match final
 	paper. Normalise to cross-section instead of data.
 
 2009-10-23  Andy Buckley  <andy@insectnation.org>
 
 	* Fixing Cheese-3 plot in CDF 2004... at last!
 
 2009-10-23  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fix muon veto in CDF_1994_S2952106, CDF_2005_S6217184,
 	CDF_2008_S7782535, and D0_2004_S5992206
 
 2009-10-19  Andy Buckley  <andy@insectnation.org>
 
 	* Adding analysis info files for MC SUSY and PHOTONJETUE analyses.
 
 	* Adding MC UE analysis in photon+jet events.
 
 2009-10-19  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Adding new NeutralFinalState projection. Note that this final
 	state takes E_T instead of p_T as argument (makes more sense for
 	neutral particles). The compare() method does not yet work as
 	expected (E_T comparison still missing).
 
 	* Adding new MergedFinalState projection. This merges two final
 	states, removing duplicate particles. Duplicates are identified by
 	looking at the genParticle(), so users need to take care of any
 	manually added particles themselves.
 
 	* Fixing most open issues with the STAR_2009_UE_HELEN analysis.
 	There is only one question left, regarding the away region.
 
 	* Set the default split-merge value for SISCone in our FastJets
 	projection to the recommended (but not Fastjet-default!) value of
 	0.75.
 
 2009-10-17  Andy Buckley  <andy@insectnation.org>
 
 	* Adding parsing of units in cross-sections passed to the "-x"
 	flag, i.e. "-x 101 mb" is parsed internally into 1.01e11 pb.
 
 2009-10-16  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Disabling DELPHI_2003_WUD_03_11 in the Makefiles, since I don't
 	trust the data.
 
 	* Getting STAR_2009_UE_HELEN to work.
 
 2009-10-04  Andy Buckley  <andy@insectnation.org>
 
 	* Adding triggers and other tidying to (still unvalidated)
 	UA1_1990 analysis.
 
 	* Fixing definition of UA5 trigger to not be intrinscally
 	different for pp and ppbar: this is corrected for (although it
 	takes some readng to work this out) in the 1982 paper, which I
 	think is the only one to compare the two modes.
 
 	* Moving projection setup and registration into init() method for
 	remaining analyses.
 
 	* Adding trigger implementations as projections for CDF Runs 0 &
 	1, and for UA5.
 
 2009-10-01  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Moving projection setup and registration into init() method for
 	analyses from ALEPH, CDF and the MC_ group.
 
 	* Adding generic SUSY validation analysis, based on plots used in
 	ATLAS Herwig++ validation.
 
 	* Adding sorted particle accessors to FinalState (cf. JetAlg).
 
 2009-09-29  Andy Buckley  <andy@insectnation.org>
 
 	* Adding optional use of args as regex match expressions with
 	-l/--list-analyses.
 
 2009-09-03  Andy Buckley  <andy.buckley@cern.ch>
 
 	* Passing GSL include path to compiler, since its absence was
 	breaking builds on systems with no GSL installation in a standard
 	location (such as SLC5, for some mysterious reason!)
 
 	* Removing lib extension passing to compiler from the configure
 	script, because Macs and Linux now both use .so extensions for the
 	plugin analysis modules.
 
 2009-09-02  Andy Buckley  <andy@insectnation.org>
 
 	* Adding analysis info file path search with RIVET_DATA_PATH
 	variable (and using this to fix doc build.)
 
 	* Improvements to AnalysisLoader path search.
 
 	* Moving analysis sources back into single directory, after a
 	proletarian uprising ;)
 
 2009-09-01  Andy Buckley  <andy@insectnation.org>
 
 	* Adding WFinder and WAnalysis, based on Z proj and analysis, with
 	some tidying of the Z code.
 
 	* ClusteredPhotons now uses an IdentifiedFS to pick the photons to
 	be looped over, and only clusters photons around *charged* signal
 	particles.
 
 2009-08-31  Andy Buckley  <andy@insectnation.org>
 
 	* Splitting analyses by directory, to make it easier to disable
 	building of particular analysis group plugin libs.
 
 	* Removing/merging headers for all analyses except for the special
 	MC_JetAnalysis base class.
 
 	* Exit with an error message if addProjection is used twice from
 	the same parent with distinct projections.
 
 2009-08-28  Andy Buckley  <andy@insectnation.org>
 
 	* Changed naming convention for analysis plugin libraries, since
 	the loader has changed so much: they must now *start* with the
 	word "Rivet" (i.e. no lib prefix).
 
 	* Split standard plugin analyses into several plugin libraries:
 	these will eventually move into separate subdirs for extra build
 	convenience.
 
 	* Started merging analysis headers into the source files, now that
 	we can (the plugin hooks previously forbade this).
 
 	* Replacement of analysis loader system with a new one based on
 	ideas from ThePEG, which uses dlopen-time instantiation of
 	templated global variables to reduce boilerplate plugin hooks to
 	one line in analyses.
 
 2009-07-14  Frank Siegert  <frank.siegert@durham.ac.uk>
 
 	* Replacing in-source histo-booking metadata with .plot files.
 
 2009-07-14  Andy Buckley  <andy@insectnation.org>
 
 	* Making Python wrapper files copy into place based on bundled
 	versions for each active HepMC interface (2.3, 2.4 & 2.5), using a
 	new HepMC version detector test in configure.
 
 	* Adding YAML metadata files and parser, removing same metadata
 	from the analysis classes' source headers.
 
 2009-07-07  Andy Buckley  <andy@insectnation.org>
 
 	* Adding Jet::hadronicEnergy()
 
 	* Adding VisibleFinalState and automatically using it in JetAlg
 	projections.
 
 	* Adding YAML parser for new metadata (and eventually ref data)
 	files.
 
 2009-07-02  Andy Buckley  <andy@insectnation.org>
 
 	* Adding Jet::neutralEnergy() (and Jet::totalEnergy() for
 	convenience/symmetry).
 
 2009-06-25  Andy Buckley  <andy@insectnation.org>
 
 	* Tidying and small efficiency improvements in CDF_2008_S7541902
 	W+jets analysis (remove unneeded second stage of jet storing,
 	sorting the jets twice, using foreach, etc.).
 
 2009-06-24  Andy Buckley  <andy@insectnation.org>
 
 	* Fixing Jet's containsBottom and containsCharm methods, since B
 	hadrons are not necessarily to be found in the final
 	state. Discovered at the same time that HepMC::GenParticle defines
 	a massively unhelpful copy constructor that actually loses the
 	tree information; it would be better to hide it entirely!
 
 	* Adding RivetHepMC.hh, which defines container-type accessors to
 	HepMC particles and vertices, making it possible to use Boost
 	foreach and hence avoiding the usual huge boilerplate for-loops.
 
 2009-06-11  Andy Buckley  <andy@insectnation.org>
 
 	* Adding --disable-pdfmanual option, to make the bootstrap a bit
 	more robust.
 
 	* Re-enabling D0IL in FastJets: adding 10^-10 to the pTmin removes
 	the numerical instability!
 
 	* Fixing CDF_2004 min/max cone analysis to use calo jets for the
 	leading jet Et binning. Thanks to Markus Warsinsky
 	for (re)discovering this bug: I was sure it had been fixed. I'm
 	optimistic that this will fix the main distributions, although
 	Swiss Cheese "minus 3" is still likely to be broken. Early tests
 	look okay, but it'll take more stats before we can remove the "do
 	not trust" sign.
 
 2009-06-10  Andy Buckley  <andy@insectnation.org>
 
 	* Providing "calc" methods so that Thrust and Sphericity
 	projections can be used as calculators without having to use the
 	projecting/caching system.
 
 2009-06-09  Andy Buckley  <andy@insectnation.org>
 
 	* 1.1.3 release!
 
 	* More doc building and SWIG robustness tweaks.
 
 2009-06-07  Andy Buckley  <andy@insectnation.org>
 
 	* Make doc build from metadata work even before the library is
 	installed.
 
 2009-06-07  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fix phi rotation in CDF_2008_LEADINGJETS.
 
 2009-06-07  Andy Buckley  <andy@insectnation.org>
 
 	* Disabling D0 IL midpoint cone (using CDF modpoint instead),
 	since there seems to be a crashing bug in FastJet's
 	implementation: we can't release that way, since ~no D0 analyses
 	will run.
 
 2009-06-03  Andy Buckley  <andy@insectnation.org>
 
 	* Putting SWIG-generated source files under SVN control to make
 	life easier for people who we advise to check out the SVN head
 	version, but who don't have a sufficiently modern copy of SWIG to
 
 	* Adding the --disable-analyses option, for people who just want
 	to use Rivet as a framework for their own analyses.
 
 	* Enabling HepMC cross-section reading, now that HepMC 2.5.0 has
 	been released.
 
 2009-05-23  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Using gsl-config to locate libgsl
 
 	* Fix the paths for linking such that our own libraries are found
 	before any system libraries, e.g. for the case that there is an
 	outdated fastjet version installed on the system while we want to
 	use our own up-to-date version.
 
 	* Change dmerge to ymerge in the e+e- analyses using JADE or
 	DURHAM from fastjet. That's what it is called in fastjet-2.4 now.
 
 2009-05-18  Andy Buckley  <andy@insectnation.org>
 
 	* Adding use of gsl-config in configure script.
 
 2009-05-16  Andy Buckley  <andy@insectnation.org>
 
 	* Removing argument to vetoEvent macro, since no weight
 	subtraction is now needed. It's now just an annotated return, with
 	built-in debug log message.
 
 	* Adding an "open" FinalState, which is only calculated once per
 	even, then used by all other FSes, avoiding the loop over
 	non-status 1 particles.
 
 2009-05-15  Andy Buckley  <andy@insectnation.org>
 
 	* Removing incorrect setting of DPS x-errs in CDF_2008 jet shape
 	analysis: the DPS autobooking already gets this bit right.
 
 	* Using Jet rather than FastJet::PseudoJet where possible, as it
 	means that the phi ranges match up nicely between Particle and the
 	Jet object. The FastJet objects are only really needed if you want
 	to do detailed things like look at split/merge scales for
 	e.g. diff jet rates or "y-split" analyses.
 
 	* Tidying and debugging CDF jet shape analyses and jet shape
 	plugin... ongoing, but I think I've found at least one real bug,
 	plus a lot of stuff that can be done a lot more nicely.
 
 	* Fully removing deprecated math functions and updating affected
 	analyses.
 
 2009-05-14  Andy Buckley  <andy@insectnation.org>
 
 	* Removing redundant rotation in DISKinematics... this was a
 	legacy of Peter using theta rather than pi-theta in his rotation.
 
 	* Adding convenience phi, rho, eta, theta, and perp,perp2 methods
 	to the 3 and 4 vector classes.
 
 2009-05-12  Andy Buckley  <andy@insectnation.org>
 
 	* Adding event auto-rotation for events with one proton... more
 	complete approach?
 
 2009-05-09  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Renaming CDF_2008_NOTE_9337 to CDF_2009_S8233977.
 
 	* Numerous small bug fixes in ALEPH_1996_S3486095.
 
 	* Adding data for one of the Rick-Field-style STAR UE analyses.
 
 2009-05-08  Andy Buckley  <andy@insectnation.org>
 
 	* Adding rivet-mkanalysis script, to make generating new analysis
 	source templates easier.
 
 2009-05-07  Andy Buckley  <andy@insectnation.org>
 
 	* Adding null vector check to Vector3::azimuthalAngle().
 
 	* Fixing definition of HCM/Breit frames in DISKinematics, and
 	adding asserts to check that the transformation is doing what it
 	should.
 
 2009-05-05  Andy Buckley  <andy@insectnation.org>
 
 	* Removing eta and Et cuts from CDF 2000 Z pT analysis, based on
 	our reading of the paper, and converting most of the analysis to a
 	call of the ZFinder projection.
 
 2009-05-05  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Support non-default seed_threshold in CDF cone jet algorithms.
 
 	* New analyses STAR_2006_S6870392 and STAR_2008_S7993412. In
 	STAR_2008_S7993412 only the first distribution is filled at the
 	moment. STAR_2006_S6870392 is normalised to data instead of the
 	Monte Carlo cross-section, since we don't have that available in
 	the HepMC stream yet.
 
 2009-05-05  Andy Buckley  <andy@insectnation.org>
 
 	* Changing Event wrapper to copy whole GenEvents rather than
 	pointers, use std units if supported in HepMC, and run a
 	placeholder function for event auto-orientation.
 
 2009-04-28  Andy Buckley  <andy@insectnation.org>
 
 	* Removing inclusion of IsolationTools header by analyses that
 	aren't actually using the isolation tools... which is all of
 	them. Leaving the isolation tools in place for now, as there might
 	still be use cases for them and there's quite a lot of code there
 	that deserves a second chance to be used!
 
 2009-04-24  Andy Buckley  <andy@insectnation.org>
 
 	* Deleting Rivet implementations of TrackJet and D0ILConeJets: the
 	code from these has now been incorporated into FastJet 2.4.0.
 
 	* Removed all mentions of the FastJet JADE patch and the HAVE_JADE
 	preprocessor macro.
 
 	* Bug fix to D0_2008_S6879055 to ensure that cuts compare to both
 	electron and positron momenta (was just comparing against
 	electrons, twice, probably thanks to the miracle of cut and
 	paste).
 
 	* Converting all D0 IL Cone jets to use FastJets. Involved tidying
 	D0_2004 jet azimuthal decorrelation analysis and D0_2008_S6879055
 	as part of migration away from using the getLorentzJets method,
 	and removing the D0ILConeJets header from quite a few analyses
 	that weren't using it at all.
 
 	* Updating CDF 2001 to use FastJets in place of TrackJet, and
 	adding axis labels to its plots.
 
 	* Note that ZEUS_2001_S4815815 uses the wrong jet definition: it
 	should be a cone but curently uses kT.
 
 	* Fixing CDF_2005_S6217184 to use correct (midpoint, R=0.7) jet
 	definition. That this was using a kT definition with R=1.0 was
 	only made obvious when the default FastJets constructor was
 	removed.
 
 	* Removing FastJets default constructor: since there are now
 	several good (IRC safe) jet definitions available, there is no
 	obvious safe default and analyses should have to specify which
 	they use.
 
 	* Moving FastJets constructors into implementation file to reduce
 	recompilation dependencies, and adding new plugins.
 
 	* Ensuring that axis labels actually get written to the output
 	data file.
 
 2009-04-22  Andy Buckley  <andy@insectnation.org>
 
 	* Adding explicit FastJet CDF jet alg overlap_threshold
 	constructor param values, since the default value from 2.3.x is
 	now removed in version 2.4.0.
 
 	* Removing use of HepMC ThreeVector::mag method (in one place
 	only) since this has been removed in version 2.5.0b.
 
 	* Fix to hepmc.i (included by rivet.i) to ignore new HepMC 2.5.0b
 	GenEvent stream operator.
 
 2009-04-21  Andy Buckley  <andy@insectnation.org>
 
 	* Dependency on FastJet now requires version 2.4.0 or later. Jade
 	algorithm is now native.
 
 	* Moving all analysis constructors and Projection headers from the
 	analysis header files into their .cc implementation files, cutting
 	header dependencies.
 
 	* Removing AIDA headers: now using LWH headers only, with
 	enhancement to use axis labels. This facility is now used by the
 	histo booking routines, and calling the booking function versions
 	which don't specify axis labels will result in a runtime warning.
 
 2009-04-07  Andy Buckley  <andy@insectnation.org>
 
 	* Adding $(DESTDIR) prefix to call to Python module "setup.py
 	install"
 
 	* Moving HepMC SWIG mappings into Python Rivet module for now:
 	seems to work-around the SL type-mapping bug.
 
 2009-04-03  Andy Buckley  <andy@insectnation.org>
 
 	* Adding MC analysis for LHC UE: higher-pT replica of Tevatron
 	2008 leading jets study.
 
 	* Adding CDF_1990 pseudorapidity analysis.
 
 	* Moving CDF_2001 constructor into implementation file.
 
 	* Cleaning up CDF_2008_LEADINGJETS a bit, e.g. using foreach
 	loops.
 
 	* Adding function interface for specifying axis labels in histo
 	bookings. Currently has no effect, since AIDA doesn't seem to have
 	a mechanism for axis labels. It really is a piece of crap.
 
 2009-03-18  Andy Buckley  <andy@insectnation.org>
 
 	* Adding docs "make upload" and other tweaks to make the doc files
 	fit in with the Rivet website.
 
 	* Improving LaTex docs to show email addresses in printable form
 	and to group analyses by collider or other metadata.
 
 	* Adding doc script to include run info in LaTeX docs, and to make
 	HTML docs.
 
 	* Removing WZandh projection, which wasn't generator independent
 	and whose sole usage was already replaced by ZFinder.
 
 	* Improvements to constructors of ZFinder and InvMassFS.
 
 	* Changing ExampleTree to use real FS-based Z finding.
 
 2009-03-16  Andy Buckley  <andy@insectnation.org>
 
 	* Allow the -H histo file spec to give a full name if wanted. If
 	it doesn't end in the desired extension, it will be added.
 
 	* Adding --runname option (and API elements) to choose a run name
 	to be prepended as a "top level directory" in histo paths. An
 	empty value results in no extra TLD.
 
 2009-03-06  Andy Buckley  <andy@insectnation.org>
 
 	* Adding R=0.2 photon clustering to the electrons in the CDF 2000
 	Z pT analysis.
 
 2009-03-04  Andy Buckley  <andy@insectnation.org>
 
 	* Fixing use of fastjet-config to not use the user's PATH
 	variable.
 
 	* Fixing SWIG type table for HepMC object interchange.
 
 2009-02-20  Andy Buckley  <andy@insectnation.org>
 
 	* Adding use of new metadata in command line analysis querying
 	with the rivet command, and in building the PDF Rivet manual.
 
 	* Adding extended metadata methods to the Analysis interface and
 	the Python wrapper. All standard analyses comply with this new
 	interface.
 
 2009-02-19  Andy Buckley  <andy@insectnation.org>
 
 	* Adding usefully-scoped config headers, a Rivet::version()
 	function which uses them, and installing the generated headers to
 	fix "external" builds against an installed copy of Rivet. The
 	version() function has been added to the Python wrapper.
 
 2009-02-05  Andy Buckley  <andy@insectnation.org>
 
 	* Removing ROOT dependency and linking. Woo! There's no need for
 	this now, because the front-end accepts no histo format switch and
 	we'll just use aida2root for output conversions. Simpler this way,
 	and it avoids about half of our compilation bug reports from 32/64
 	bit ROOT build confusions.
 
 2009-02-04  Andy Buckley  <andy@insectnation.org>
 
 	* Adding automatic generation of LaTeX manual entries for the
 	standard analyses.
 
 2009-01-20  Andy Buckley  <andy@insectnation.org>
 
 	* Removing RivetGun and TCLAP source files!
 
 2009-01-19  Andy Buckley  <andy@insectnation.org>
 
 	* Added psyco Python optimiser to rivet, make-plots and
 	compare-histos.
 
 	* bin/aida2root: Added "-" -> "_" mangling, following requests.
 
 2009-01-17  Andy Buckley  <andy@insectnation.org>
 
 	* 1.1.2 release.
 
 2009-01-15  Andy Buckley  <andy@insectnation.org>
 
 	* Converting Python build system to bundle SWIG output in tarball.
 
 2009-01-14  Andy Buckley  <andy@insectnation.org>
 
 	* Converting AIDA/LWH divide function to return a DPS so that bin
 	width factors don't get all screwed up. Analyses adapted to use
 	the new division operation (a DPS/DPS divide would also be
 	nice... but can wait for YODA).
 
 2009-01-06  Andy Buckley  <andy@insectnation.org>
 
 	* bin/make-plots: Added --png option for making PNG output files,
 	using 'convert' (after making a PDF --- it's a bit messy)
 
 	* bin/make-plots: Added --eps option for output filtering through
 	ps2eps.
 
 2009-01-05  Andy Buckley  <andy@insectnation.org>
 
 	* Python: reworking Python extension build to use distutils and
 	newer m4 Python macros. Probably breaks distcheck but is otherwise
 	more robust and platform independent (i.e. it should now work on
 	Macs).
 
 2008-12-19  Andy Buckley  <andy@insectnation.org>
 
 	* make-plots: Multi-threaded make-plots and cleaned up the LaTeX
 	building a bit (necessary to remove the implicit single global
 	state).
 
 2008-12-18  Andy Buckley  <andy@insectnation.org>
 
 	* make-plots: Made LaTeX run in no-stop mode.
 
 	* compare-histos: Updated to use a nicer labelling syntax on the
 	command line and to successfully build MC-MC plots.
 
 2008-12-16  Andy Buckley  <andy@insectnation.org>
 
 	* Made LWH bin edge comparisons safe against numerical errors.
 
 	* Added Particle comparison functions for sorting.
 
 	* Removing most bad things from ExampleTree and tidying up. Marked
 	WZandh projection for removal.
 
 2008-12-03  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added the two missing observables to the CDF_2008_NOTE_9337 analysis,
 	i.e. track pT and sum(ET). There is a small difference between our MC
 	output and the MC plots of the analysis' author, we're still waiting
 	for the author's comments.
 
 2008-12-02  Andy Buckley  <andy@insectnation.org>
 
 	* Overloading use of a std::set in the interface, since the
 	version of SWIG on Sci Linux doesn't have a predefined mapping for
 	STL sets.
 
 2008-12-02  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fixed uemerge. The output was seriously broken by a single line
 	of debug information in fillAbove(). Also changed uemerge output
 	to exponential notation.
 
 	* Unified ref and mc histos in compare-histos. Histos with one
 	bin are plotted linear. Option for disabling the ratio plot.
 	Several fixes for labels, legends, output directories, ...
 
 	* Changed rivetgun's fallback directory for parameter files to
 	$PREFIX/share/AGILe, since that's where the steering files now are.
 
 	* Running aida2flat in split mode now produces make-plots compatible
 	dat-files for direct plotting.
 
 2008-11-28  Andy Buckley  <andy@insectnation.org>
 
 	* Replaced binreloc with an upgraded and symbol-independent copy.
 
 2008-11-25  Andy Buckley  <andy@insectnation.org>
 
 	* Added searching of $RIVET_REF_PATH for AIDA reference data
 	files.
 
 2008-11-24  Andy Buckley  <andy@insectnation.org>
 
 	* Removing "get"s and other obsfucated syntax from
 	ProjectionApplier (Projection and Analysis) interfaces.
 
 2008-11-21  Andy Buckley  <andy@insectnation.org>
 
 	* Using new "global" Jet and V4 sorting functors in
 	TrackJet. Looks like there was a sorting direction problem before...
 
 	* Verbose mode with --list-analyses now shows descriptions as well
 	as analysis names.
 
 	* Moved data/Rivet to data/refdata and moved data/RivetGun
 	contents to AGILe (since generator steering is no longer a Rivet
 	thing)
 
 	* Added unchecked ratio plots to D0 Run II jet + photon analysis.
 
 	* Added D0 inclusive photon analysis.
 
 	* Added D0 Z rapidity analysis.
 
 	* Tidied up constructor interface and projection chain
 	implementation of InvMassFinalState.
 
 	* Added ~complete set of Jet and FourMomentum sorting functors.
 
 2008-11-20  Andy Buckley  <andy@insectnation.org>
 
 	* Added IdentifiedFinalState.
 
 	* Moved a lot of TrackJet and Jet code into .cc files.
 
 	* Fixed a caching bug in Jet: cache flag resets should never be
 	conditional, since they are then sensitive to initialisation
 	errors.
 
 	* Added quark enum values to ParticleName.
 
 	* Rationalised JetAlg interfaces somewhat, with "size()" and
 	"jets()" methods in the interface.
 
 	* Added D0 W charge asymmetry and D0 inclusive jets analyses.
 
 2008-11-18  Andy Buckley  <andy@insectnation.org>
 
 	* Adding D0 inclusive Z pT shape analysis.
 
 	* Added D0 Z + jet pT and photon + jet pT spectrum analyses.
 
 	* Lots of tidying up of particle, event, particle name etc.
 
 	* Now the first event is used to detect the beam type and remove
 	incompatible analyses.
 
 2008-11-17  Andy Buckley  <andy@insectnation.org>
 
 	* Added bash completion for rivetgun.
 
 	* Starting to provide stand-alone call methods on projections so
 	they can be used without the caching infrastructure. This could
 	also be handy for unit testing.
 
 	* Adding functionality (sorting function and built-in sorting
 	schemes) to the JetAlg interface.
 
 2008-11-10  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fix floating point number output format in aida2flat and flat2aida
 
 	* Added CDF_2002_S4796047: CDF Run-I charged multiplicity distribution
 
 	* Renamed CDF_2008_MINBIAS to CDF_2008_NOTE_9337, since the
 	note is publicly available now.
 
 2008-11-10  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added DELPHI_2003_WUD_03_11: Delphi 4-jet angular distributions.
 	There is still a problem with the analysis, so don't use it yet.
 	But I need to commit the code because my laptop is broken ...
 
 2008-11-06  Andy Buckley  <andy@insectnation.org>
 
 	* Code review: lots of tidying up of projections and analyses.
 
 	* Fixes for compatibility with the LLVM C & C++ compiler.
 
 	* Change of Particle interface to remove "get"-prefixed method
 	names.
 
 2008-11-05  Andy Buckley  <andy@insectnation.org>
 
 	* Adding ability to query analysis metadata from the command line.
 
 	* Example of a plugin analyis now in plugindemo, with a make check
 	test to make sure that the plugin analysis is recognised by the
 	command line "rivet" tool.
 
 	* GCC 4.3 fix to mat-vec tests.
 
 2008-11-04  Andy Buckley  <andy@insectnation.org>
 
 	* Adding native logger control from Python interface.
 
 2008-11-03  Andy Buckley  <andy@insectnation.org>
 
 	* Adding bash_completion for rivet executable.
 
 2008-10-31  Andy Buckley  <andy@insectnation.org>
 
 	* Clean-up of histo titles and analysis code review.
 
 	* Added momentum construction functions from FastJet PseudoJets.
 
 2008-10-28  Andy Buckley  <andy@insectnation.org>
 
 	* Auto-booking of histograms with a name, rather than the HepData
 	ID 3-tuple is now possible.
 
 	* Fix in CDF 2001 pT spectra to get the normalisations to depend
 	on the pT_lead cutoff.
 
 2008-10-23  Andy Buckley  <andy@insectnation.org>
 
 	* rivet handles signals neatly, as for rivetgun, so that premature
 	killing of the analysis process will still result in an analysis
 	file.
 
 	* rivet now accepts cross-section as a command line argument and,
 	if it is missing and is required, will prompt the user for it
 	interactively.
 
 2008-10-22  Andy Buckley  <andy@insectnation.org>
 
 	* rivet (Python interface) now can list analyses, check when
 	adding analyses that the given names are valid, specify histo file
 	name, and provide sensibly graded event number logging.
 
 2008-10-20  Andy Buckley  <andy@insectnation.org>
 
 	* Corrections to CDF 2004 analysis based on correspondance with
 	Joey Huston. M bias dbns now use whole event within |eta| < 0.7,
 	and Cheese plots aren't filled at all if there are insufficient
 	jets (and the correct ETlead is used).
 
 2008-10-08  Andy Buckley  <andy@insectnation.org>
 
 	* Added AnalysisHandler::commitData() method, to allow the Python
 	interface to write out a histo file without having to know
 	anything about the histogramming API.
 
 	* Reduced SWIG interface file to just map a subset of Analysis and
 	AnalysisHandler functionality. This will be the basis for a new
 	command line interface.
 
 2008-10-06  Andy Buckley  <andy@insectnation.org>
 
 	* Converted FastJets plugin to use a Boost shared_pointer to the
 	cached ClusterSequence. The nullness of the pointer is now used to
 	indicate an empty tracks (and hence jets) set. Once FastJet
 	natively support empty CSeqs, we can rewrite this a bit more
 	neatly and ditch the shared_ptr.
 
 2008-10-02  Andy Buckley  <andy@insectnation.org>
 
 	* The CDF_2004 (Acosta) data file now includes the full range of
 	pT for the min bias data at both 630 and 1800 GeV. Previously,
 	only the small low-pT insert plot had been entered into HepData.
 
 2008-09-30  Andy Buckley  <andy@insectnation.org>
 
 	* Lots of updates to CDF_2004 (Acosta) UE analysis, including
 	sorting jets by E rather than Et, and factorising transverse cone
 	code into a function so that it can be called with a random
 	"leading jet" in min bias mode. Min bias histos are now being
 	trial-filled just with tracks in the transverse cones, since the
 	paper is very unclear on this.
 
 	* Discovered a serious caching problem in FastJets projection when
 	an empty tracks vector is passed from the
 	FinalState. Unfortunately, FastJet provides no API way to solve
 	the problem, so we'll have to report this upstream. For now, we're
 	solving this for CDF_2004 by explicitly vetoing events with no
 	tracks.
 
 	* Added Doxygen to the build with target "dox"
 
 	* Moved detection of whether cross-section information is needed
 	into the AnalysisHandler, with dynamic computation by scanning
 	contained analyses.
 
 	* Improved robustness of event reading to detect properly when the
 	input file is smaller than expected.
 
 2008-09-29  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* New analysis: CDF_2000_S4155203
 
 2008-09-23  Andy Buckley  <andy@insectnation.org>
 
 	* rivetgun can now be built and run without AGILe. Based on a
 	patch by Frank Siegert.
 
 2008-09-23  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Some preliminary numbers for the CDF_2008_LEADINGJETS analysis
 	(only transverse region and not all observables. But all we have now.)
 
 2008-09-17  Andy Buckley  <andy@insectnation.org>
 
 	* Breaking up the mammoth "generate" function, to make Python
 	mapping easier, among other reasons.
 
 	* Added if-zero-return-zero checking to angle mapping functions,
 	to avoid problems where 1e-19 gets mapped on to 2 pi and then
 	fails boundary asserts.
 
 	* Added HistoHandler singleton class, which will be a central
 	repository for holding analyses' histogram objects to be accessed
 	via a user-chosen name.
 
 2008-08-26  Andy Buckley  <andy@insectnation.org>
 
 	* Allowing rivet-config to return combined flags.
 
 2008-08-14  Andy Buckley  <andy@insectnation.org>
 
 	* Fixed some g++ 4.3 compilation bugs, including "vector" not
 	being a valid name for a method which returns a physics vector,
 	since it clashes with std::vector (which we globally import). Took
 	the opportunity to rationalise the Jet interface a bit, since
 	"particle" was used to mean "FourMomentum", and "Particle" types
 	required a call to "getFullParticle". I removed the "gets" at the
 	same time, as part of our gradual migration to a coherent naming
 	policy.
 
 2008-08-11  Andy Buckley  <andy@insectnation.org>
 
 	* Tidying of FastJets and added new data files from HepData.
 
 2008-08-10  James Monk  <jmonk@hep.ucl.ac.uk>
 
 	* FastJets now uses user_index property of fastjet::PseudoJet to
 	reconstruct PID information in jet contents.
 
 2008-08-07  Andy Buckley  <andy@insectnation.org>
 
 	* Reworking of param file and command line parsing. Tab characters
 	are now handled by the parser, in a way equivalent to spaces.
 
 2008-08-06  Andy Buckley  <andy@insectnation.org>
 
 	* Added extra histos and filling to Acosta analysis - all HepData
 	histos should now be filled, depending on sqrt{s}. Also trialling
 	use of LaTeX math mode in titles.
 
 2008-08-05  Andy Buckley  <andy@insectnation.org>
 
 	* More data files for CDF analyses (2 x 2008, 1 x 1994), and moved
 	the RivetGun AtlasPythia6.params file to more standard
 	fpythia-atlas.params (and added to the install list).
 
 2008-08-04  Andy Buckley  <andy@insectnation.org>
 
 	* Reduced size of available options blocks in RivetGun help text
 	by removing "~" negating variants (which are hardly ever used in
 	practice) and restricting beam particles to
 	PROTON, ANTIPROTON,ELECTRON and POSITRON.
 
 	* Fixed Et sorting in Acosta analysis.
 
 2008-08-01  Andy Buckley  <andy@insectnation.org>
 
 	* Added AIDA headers to the install list, since
 	external (plugin-type) analyses need them to be present for
 	compilation to succeed.
 
 2008-07-29  Andy Buckley  <andy@insectnation.org>
 
 	* Fixed missing ROOT compile flags for libRivet.
 
 	* Added command line repetition to logging.
 
 2008-07-29  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Included the missing numbers and three more observables
 	in the CDF_2008_NOTE_9351 analysis.
 
 2008-07-29  Andy Buckley  <andy@insectnation.org>
 
 	* Fixed wrong flags on rivet-config
 
 2008-07-28  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Renamed CDF_2008_DRELLYAN to CDF_2008_NOTE_9351. Updated
 	numbers and cuts to the final version of this CDF note.
 
 2008-07-28  Andy Buckley  <andy@insectation.org>
 
 	* Fixed polar angle calcuation to use atan2.
 
 	* Added "mk" prefixes and x/setX convention to math classes.
 
 2008-07-28  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Fixed definition of FourMomentum::pT (it had been returning pT2)
 
 2008-07-27  Andy Buckley  <andy@insectnation.org>
 
 	* Added better tests for Boost headers.
 
 	* Added testing for -ansi, -pedantic and -Wall compiler flags.
 
 2008-07-25  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* updated DELPHI_2002_069_CONF_603 according to information
 	from the author
 
 2008-07-17  Andy Buckley  <andy@insectnation.org>
 
 	* Improvements to aida2flat: now can produce one output file per
 	histo, and there is a -g "gnuplot mode" which comments out the
 	YODA/make_plot headers to make the format readable by gnuplot.
 
 	* Import boost::assign namespace contents into the Rivet namespace
 	--- provides very useful intuitive collection initialising
 	functions.
 
 2008-07-15  Andy Buckley  <andy.buckley@dur.ac.uk>
 
 	* Fixed missing namespace in vector/matrix testing.
 
 	* Removed Boost headers: now a system dependency.
 
 	* Fixed polarRadius infinite loop.
 
 2008-07-09  Andy Buckley  <andy@insectnation.org>
 
 	* Fixed definitions of mapAngleMPiToPi, etc. and used them to fix
 	the Jet::getPhi method.
 
 	* Trialling use of "foreach" loop in CDF_2004: it works! Very nice.
 
 2008-07-08  Andy Buckley  <andy@insectnation.org>
 
 	* Removed accidental reference to an "FS" projection in
 	FinalStateHCM's compare method. rivetgun -A now works again.
 
 	* Added TASSO, SLD and D0_2008 reference data. The TASSO and SLD
 	papers aren't installed or included in the tarball since there are
 	currently no plans to implement these analyses.
 
 	* Added Rivet namespacing to vector, matrix etc. classes. This
 	required some re-writing and the opportunity was taken to move
 	some canonical function definitions inside the classes and to
 	improve the header structure of the Math area.
 
 2008-07-07  Andy Buckley  <andy@insectnation.org>
 
 	* Added Rivet namespace to Units.hh and Constants.hh.
 
 	* Added Doxygen "@brief" flags to analyses.
 
 	* Added "RIVET_" namespacing to all header guards.
 
 	* Merged Giulio Lenzi's isolation/vetoing/invmass projections and
 	D0 2008 analysis.
 
 2008-06-23  Jon Butterworth  <J.Butterworth@ucl.ac.uk>
 
 	* Modified FastJet to fix ysplit and split and filter.
 
 	* Modified ExampleTree to show how to call them.
 
 2008-06-19  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added first version of the CDF_2008_DRELLYAN analysis described on
 	http://www-cdf.fnal.gov/physics/new/qcd/abstracts/UEinDY_08.html
 	There is a small difference between the analysis and this
 	implementation, but it's too small to be visible.
 	The fpythia-cdfdrellyan.params parameter file is for this analysis.
 
 	* Added first version of the CDF_2008_MINBIAS analysis described on
 	http://www-cdf.fnal.gov/physics/new/qcd/abstracts/minbias_08.html
 	The .aida file is read from the plots on the web and will change.
 	I'm still discussing some open questions about the analysis with
 	the author.
 
 2008-06-18  Jon Butterworth  <J.Butterworth@ucl.ac.uk>
 
 	* Added First versions of splitJet and filterJet methods to
 	fastjet.cc. Not yet tested, buyer beware.
 
 2008-06-18  Andy Buckley  <andy@insectnation.org>
 
 	* Added extra sorted Jets and Pseudojets methods to FastJets, and
 	added ptmin argument to the JetAlg getJets() method, requiring a
 	change to TrackJet.
 
 2008-06-13  Andy Buckley  <andy@insectnation.org>
 
 	* Fixed processing of "RG" parameters to ensure that invalid
 	iterators are never used.
 
 2008-06-10  Andy Buckley  <andy@insectnation.org>
 
 	* Updated AIDA reference files, changing "/HepData" root path to
 	"/REF". Still missing a couple of reference files due to upstream
 	problems with the HepData records.
 
 2008-06-09  Andy Buckley  <andy@insectnation.org>
 
 	* rivetgun now handles termination signals (SIGTERM, SIGINT and
 	SIGHUP) gracefully, finishing the event loop and finalising
 	histograms. This means that histograms will always get written
 	out, even if not all the requested events have been generated.
 
 2008-06-04  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added DELPHI_2002_069_CONF_603 analysis
 
 2008-05-30  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* Added InitialQuarks projection
 	* Added OPAL_1998_S3780481 analysis
 
 2008-05-29  Andy Buckley  <andy@insectnation.org>
 
 	* distcheck compatibility fixes and autotools tweaks.
 
 2008-05-28  Andy Buckley  <andy@insectnation.org>
 
 	* Converted FastJet to use Boost smart_ptr for its plugin
 	handling, to solve double-delete errors stemming from the heap
 	cloning of projections.
 
 	* Added (a subset of) Boost headers, particularly the smart
 	pointers.
 
 2008-05-24  Andy Buckley  <andy@insectnation.org>
 
 	* Added autopackage spec files.
 
 	* Merged these changes into the trunk.
 
 	* Added a registerClonedProjection(...) method to
 	ProjectionHandler: this is needed so that cloned projections will
 	have valid pointer entries in the ProjectHandler repository.
 
 	* Added clone() methods to all projections (need to use this,
 	since the templated "new PROJ(proj)" approach to cloning can't
 	handle object polymorphism.
 
 2008-05-19  Andy Buckley  <andy@insectnation.org>
 
 	* Moved projection-applying functions into ProjectionApplier base
 	class (from which Projection and Analysis both derive).
 
 	* Added Rivet-specific exceptions in place of std::runtime_error.
 
 	* Removed unused HepML reference files.
 
 	* Added error handling for requested analyses with wrong case
 	convention / missing name.
 
 2008-05-15  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* New analysis PDG_Hadron_Multiplicities
 
 	* flat2aida converter
 
 2008-05-15  Andy Buckley  <andy@insectnation.org>
 
 	* Removed unused mysterious Perl scripts!
 
 	* Added RivetGun.HepMC logging of HepMC event details.
 
 2008-05-14  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* New analysis DELPHI_1995_S3137023. This analysis contains
 	the xp spectra of Xi+- and Sigma(1385)+-.
 
 2008-05-13  Andy Buckley  <andy@insectnation.org>
 
 	* Improved logging interface: log levels are now integers (for
 	cross-library compatibility and level setting also applies to
 	existing loggers.
 
 2008-05-09  Andy Buckley  <andy@insectnation.org>
 
 	* Improvements to robustness of ROOT checks.
 
 	* Added --version flag on config scripts and rivetgun.
 
 2008-05-06  Hendrik Hoeth <hendrik.hoeth@cern.ch>
 
 	* New UnstableFinalState projection which selects all hadrons,
 	leptons and real photons including unstable particles.
 
 	* In the DELPHI_1996_S3430090 analysis the multiplicities for
 	pi+/pi- and p0 are filled, using the UnstableFinalState projection.
 
 2008-05-06  Andy Buckley  <andy@insectnation.org>
 
 	* FastJets projection now protects against the case where no
 	particles exist in the final state (where FastJet throws an
 	exception).
 
 	* AIDA file writing is now separated from the
 	AnalysisHandler::finalize method... API users can choose what to
 	do with the histo objects, be that writing out or further
 	processing.
 
 2008-04-29  Andy Buckley  <andy@insectnation.org>
 
 	* Increased default tolerances in floating point comparisons as
 	they were overly stringent and valid f.p. precision errors were
 	being treated as significant.
 
 	* Implemented remainder of Acosta UE analysis.
 
 	* Added proper getEtSum() to Jet.
 
 	* Added Et2() member and function to FourMomentum.
 
 	* Added aida2flat conversion script.
 
 	* Fixed ambiguity in TrackJet algorithm as to how the iteration
 	continues when tracks are merged into jets in the inner loop.
 
 2008-04-28  Andy Buckley  <andy@insectnation.org>
 
 	* Merged in major "ProjectionHandler" branch. Projections are now
 	all stored centrally in the singleton ProjectionHandler container,
 	rather than as member pointers in projections and analyses. This
 	also affects the applyProjection mechanism, which is now available
 	as a templated method on Analysis and Projection. Still a few
 	wrinkles need to be worked out.
 
 	* The branch changes required a comprehensive review of all
 	existing projections and analyses: lots of tidying up of these
 	classes, as well as the auxiliary code like math utils, has taken
 	place. Too much to list and track, unfortunately!
 
 2008-03-28  Andy Buckley  <buckley@pc54.hep.ucl.ac.uk>
 
 	* Started second CDF UE analysis ("Acosta"): histograms defined.
 
 	* Fixed anomalous factor of 2 in LWH conversion from Profile1D
 	to DataPointSet.
 
 	* Added pT distribution histos to CDF 2001 UE analysis.
 
 2008-03-26  Andy Buckley  <andy@insectnation.org>
 
 	* Removed charged+neutral versions of histograms and projections
 	from DELPHI analysis since they just duplicate the more robust
 	charged-only measurements and aren't really of interest for
 	tuning.
 
 2008-03-10  Andy Buckley  <andy@insectnation.org>
 
 	* Profile histograms now use error computation with proper
 	weighting, as described here:
 	http://en.wikipedia.org/wiki/Weighted_average
 
 2008-02-28  Andy Buckley  <andy@insectnation.org>
 
 	* Added --enable-jade flag for Professor studies with patched
 	FastJet.
 
 	* Minor fixes to LCG tag generator and gfilt m4 macros.
 
 	* Fixed projection slicing issues with Field UE analysis.
 
 	* Added Analysis::vetoEvent(e) function, which keeps track of the
 	correction to the sum of weights due to event vetoing in analysis
 	classes.
 
 2008-02-26  Andy Buckley  <andy@insectnation.org>
 
 	* Vector<N> and derived classes now initialise to have zeroed
 	components when the no-arg constructor is used.
 
 	* Added Analysis::scale() function to scale 1D
 	histograms. Analysis::normalize() uses it internally, and the
 	DELPHI (A)EEC, whose histo weights are not pure event weights, and
 	normalised using scale(h, 1/sumEventWeights).
 
 2008-02-21  Hendrik Hoeth  <hendrik.hoeth@cern.ch>
 
 	* Added EEC and AEEC to the DELPHI_1996_S3430090 analysis. The
 	normalisation of these histograms is still broken (ticket #163).
 
 2008-02-19  Hendrik Hoeth  <hendrik.hoeth@cern.ch>
 
 	* Many fixes to the DELPHI_1996_S3430090 analysis: bugfix in the
 	calulation of eigenvalues/eigenvectors in MatrixDiag.hh for the
 	sphericity, rewrite of Thrust/Major/Minor, fixed scaled momentum,
 	hemisphere masses, normalisation in single particle events,
 	final state slicing problems in the projections for Thrust,
 	Sphericity and Hemispheres.
 
 2008-02-08  Andy Buckley  <andy@insectnation.org>
 
 	* Applied fixes and extensions to DIS classes, based on
 	submissions by Dan Traynor.
 
 2008-02-06  Andy Buckley  <andy@insectnation.org>
 
 	* Made projection pointers used for cut combining into const
 	pointers. Required some redefinition of the Projection* comparison
 	operator.
 
 	* Temporarily added FinalState member to ChargedFinalState to stop
 	projection lifetime crash.
 
 2008-02-01  Andy Buckley  <andy@insectnation.org>
 
 	* Fixed another misplaced factor of bin width in the
 	Analysis::normalize() method.
 
 2008-01-30  Andy Buckley  <andy@insectnation.org>
 
 	* Fixed the conversion of IHistogram1D to DPS, both via the
 	explicit Analysis::normalize() method and the implicit
 	AnalysisHandler::treeNormalize() route. The root of the problem is
 	the AIDA choice of the word "height" to represent the sum of
 	weights in a bin: i.e. the bin width is not taken into account
 	either in computing bin height or error.
 
 2008-01-22  Andy Buckley  <andy@insectnation.org>
 
 	* Beam projection now uses HepMC GenEvent::beam_particles() method
 	to get the beam particles. This is more portable and robust for
 	C++ generators, and equivalent to the existing "first two" method
 	for Fortran generators.
 
 2008-01-17  Andy Buckley  <andy@insectnation.org>
 
 	* Added angle range fix to pseudorapidity function (thanks to
 	Piergiulio Lenzi).
 
 2008-01-10  Andy Buckley  <andy@insectnation.org>
 
 	* Changed autobooking plot codes to use zero-padding (gets the
 	order right in JAS, file browser, ROOT etc.). Also changed the
 	'ds' part to 'd' for consistency. HepData's AIDA output has been
 	correspondingly updated, as have the bundled data files.
 
 2008-01-04  Andy Buckley  <andy@insectnation.org>
 
 	* Tidied up JetShape projection a bit, including making the
 	constructor params const references. This seems to have sorted the
 	runtime segfault in the CDF_2005 analysis.
 
 	* Added caching of the analysis bin edges from the AIDA file -
 	each analysis object will now only read its reference file once,
 	which massively speeds up the rivetgun startup time for analyses
 	with large numbhers of autobooked histos (e.g. the
 	DELPHI_1996_S3430090 analysis).
 
 2008-01-02  Andy Buckley  <andy@insectnation.org>
 
 	* CDF_2001_S4751469 now uses the LossyFinalState projection, with
 	an 8% loss rate.
 
 	* Added LossyFinalState and HadronicFinalState, and fixed a
 	"polarity" bug in the charged final state projection (it was
 	keeping only the *uncharged* particles).
 
 	* Now using isatty(1) to determine whether or not color escapes
 	can be used. Also removed --color argument, since it can't have an
 	effect (TCLAP doesn't do position-based flag toggling).
 
 	* Made Python extension build optional (and disabled by default).
 
 2008-01-01  Andy Buckley  <andy@insectnation.org>
 
 	* Removed some unwanted DEBUG statements, and lowered the level of
 	some infrastructure DEBUGs to TRACE level.
 
 	* Added bash color escapes to the logger system.
 
 2007-12-21  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* include/LWH/ManagedObject.h: Fixed infinite loop in
 	encodeForXML cf. ticket #135.
 
 2007-12-20  Andy Buckley  <andy@insectnation.org>
 
 	* Removed HepPID, HepPDT and Boost dependencies.
 
 	* Fixed XML entity encoding in LWH. Updated CDF_2007_S7057202
 	analysis to not do its own XML encoding of titles.
 
 2007-12-19  Andy Buckley  <andy@insectnation.org>
 
 	* Changed units header to set GeV = 1 (HepMC convention) and using
 	units in CDF UE analysis.
 
 2007-12-15  Andy Buckley  <andy@insectnation.org>
 
 	* Introduced analysis metadata methods for all analyses (and made
 	them part of the Analysis interface).
 
 2007-12-11  Andy Buckley  <andy@insectnation.org>
 
 	* Added JetAlg base projection for TrackJet, FastJet etc.
 
 2007-12-06  Andy Buckley  <andy@insectnation.org>
 
 	* Added checking for Boost library, and the standard Boost test
 	program for shared_ptr.
 
 	* Got basic Python interface running - required some tweaking
 	since Python and Rivet's uses of dlopen collide (another
 	RTLD_GLOBAL issue - see
 	http://muttley.hates-software.com/2006/01/25/c37456e6.html )
 
 2007-12-05  Andy Buckley  <andy@insectnation.org>
 
 	* Replaced all use of KtJets projection with FastJets
 	projection. KtJets projection disabled but left undeleted for
 	now. CLHEP and KtJet libraries removed from configure searches and
 	Makefile flags.
 
 2007-12-04  Andy Buckley  <andy@insectnation.org>
 
 	* Param file loading now falls back to the share/RivetGun
 	directory if a local file can't be found and the provided name has
 	no directory separators in it.
 
 	* Converted TrackJet projection to update the jet centroid with
 	each particle added, using pT weighting in the eta and phi
 	averaging.
 
 2007-12-03  Andy Buckley  <andy@insectnation.org>
 
 	* Merged all command line handling functions into one large parse
 	function, since only one executable now needs them. This removes a
 	few awkward memory leaks.
 
 	* Removed rivet executable - HepMC file reading functionality will
 	move into rivetgun.
 
 	* Now using HepMC IO_GenEvent format (IO_Ascii and
 	IO_ExtendedAscii are deprecated). Now requires HepMC >= 2.3.0.
 
 	* Added forward declarations of GSL diagonalisation routines,
 	eliminating need for GSL headers to be installed on build machine.
 
 2007-11-27  Andy Buckley  <andy@insectnation.org>
 
 	* Removed charge differentiation from Multiplicity projection (use
 	CFS proj) and updated ExampleAnalysis to produce more useful numbers.
 
 	* Introduced binreloc for runtime path determination.
 
 	* Fixed several bugs in FinalState, ChargedFinalState, TrackJet
 	and Field analysis.
 
 	* Completed move to new analysis naming scheme.
 
 2007-11-26  Andy Buckley  <andy@insectnation.org>
 
 	* Removed conditional HAVE_FASTJET bits: FastJet is now compulsory.
 
 	* Merging appropriate RivetGun parts into Rivet. RivetGun currently broken.
 
 2007-11-23  Andy Buckley  <andy@insectnation.org>
 
 	* Renaming analyses to Spires-ID scheme: currently of form
 	S<SpiresID>, to become <Expt>_<YYYY>_<SpiresID>.
 
 2007-11-20  Andy Buckley  <andy@insectnation.org>
 
 	* Merged replacement vectors, matrices and boosts into trunk.
 
 2007-11-15  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* src/Analysis.cc, include/Rivet/Analysis.hh: Introduced normalize
 	function. See ticket #126.
 
 2007-10-31  Andy Buckley  <andy@insectnation.org>
 
  	* Tagging as 1.0b2 for HERA-LHC meeting.
 
 
 2007-10-25  Andy Buckley  <andy@insectnation.org>
 
 	* Added AxesDefinition base interface to Sphericity and Thrust,
 	used by Hemispheres.
 
 	* Exposed BinaryCut class, improved its interface and fixed a few
 	bugs. It's now used by VetoedFinalState for momentum cuts.
 
 	* Removed extra output from autobooking AIDA reader.
 
 	* Added automatic DPS booking.
 
 2007-10-12  Andy Buckley  <andy@insectnation.org>
 
 	* Improved a few features of the build system
 
 2007-10-09  James Monk
 
 	* Fixed dylib dlopen on Mac OS X.
 
 2007-10-05  Andy Buckley  <andy@insectnation.org>
 
 	* Added new reference files.
 
 
 2007-10-03  Andy Buckley  <andy@insectnation.org>
 
 	* Fixed bug in configure.ac which led to explicit CXX setting
 	being ignored.
 
 	* Including Logging.hh in Projection.hh, hence new transitive
 	dependency on Logging.hh being installed. Since this is the normal
 	behaviour, I don't think this is a problem.
 
 	* Fixed segfaulting bug due to use of addProjection() in
 	locally-scoped contained projections. This isn't a proper fix,
 	since the whole framework should be designed to avoid the
 	possibility of bugs like this.
 
 	* Added newly built HepML and AIDA reference files for current
 	analyses.
 
 2007-10-02  Andy Buckley  <andy@insectnation.org>
 
 	* Fixed possible null-pointer dereference in Particle copy
 	constructor and copy assignment: this removes one of two blocker
 	segfaults, the other of which is related to the copy-assignment of
 	the TotalVisMomentum projection in the ExampleTree analysis.
 
 2007-10-01  Andy Buckley  <andy@insectnation.org>
 
 	* Fixed portable path to Rivet share directory.
 
 2007-09-28  Andy Buckley  <andy@insectnation.org>
 
 	* Added more functionality to the rivet-config script: now has
 	libdir, includedir, cppflags, ldflags and ldlibs options.
 
 2007-09-26  Andy Buckley  <andy@insectnation.org>
 
 	* Added the analysis library closer function to the
 	AnalysisHandler finalize() method, and also moved the analysis
 	delete loop into AnalysisHandler::finalize() so as not to try
 	deleting objects whose libraries have already closed.
 
 	* Replaced the RivetPaths.cc.in method for portable paths with
 	something using -D defines - much simpler!
 
 2007-09-21  Lars Sonnenschein  <sonne@mail.cern.ch>
 
 	* Added HepEx0505013 analysis and JetShape projection (some fixes
 	by AB.)
 
 	* Added GetLorentzJets member function to D0 RunII cone jet projection
 
 2007-09-21  Andy Buckley  <andy@insectnation.org>
 
 	* Fixed lots if bugs and bad practice in HepEx0505013 (to make it
 	compile-able!)
 
 	* Downclassed the log messages from the Test analysis to DEBUG
 	level.
 
 	* Added isEmpty() method to final state projection.
 
 	* Added testing for empty final state and useful debug log
 	messages to sphericity projection.
 
 2007-09-20  Andy Buckley  <andy@insectnation.org>
 
 	* Added Hemispheres projection, which calculates event hemisphere
 	masses and broadenings.
 
 2007-09-19  Andy Buckley  <andy@insectnation.org>
 
 	* Added an explicit copy assignment operator to Particle: the
 	absence of one of these was responsible for the double-delete
 	error.
 
 	* Added a "fuzzy equals" utility function for float/double types
 	to Utils.hh (which already contains a variety of handy little
 	functions).
 
 	* Removed deprecated Beam::operator().
 
 	* Added ChargedFinalState projection and de-pointered the
 	contained FinalState projection in VetoedFinalState.
 
 2007-09-18  Andy Buckley  <andy@insectnation.org>
 
 	* Major bug fixes to the regularised version of the sphericity
 	projection (and hence the Parisi tensor projection). Don't trust
 	C & D param results from any previous version!
 
 	* Added extra methods to thrust and sphericity projections to get
 	the oblateness and the sphericity basis (currently returns dummy
 	axes since I can't yet work out how to get the similarity
 	transform eigenvectors from CLHEP)
 
 2007-09-14  Andy Buckley  <andy@insectnation.org>
 
 	* Merged in a branch of pluggable analysis mechanisms.
 
 2007-06-25  Jon Butterworth  <jmb@hep.ucl.ac.uk>
 
 	* Fixed some bugs in the root output for DataPoint.h
 
 2007-06-25  Andy Buckley  <andy@insectnation.org>
 
 	* include/Rivet/**/Makefile.am: No longer installing headers for
 	"internal" functionality.
 
 	* include/Rivet/Projections/*.hh: Removed the private restrictions
 	on copy-assignment operators.
 
 2007-06-18  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* include/LWH/Tree.h: Fixed minor bug in listObjectNames.
 
 	* include/LWH/DataPointSet.h: Fixed setCoordinate functions so
 	that they resize the vector of DataPoints if it initially was
 	empty.
 
 	* include/LWH/DataPoint.h: Added constructor taking a vector of
 	measuremts.
 
 2007-06-16  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* include/LWH/Tree.h: Implemented the listObjectNames and ls
 	functions.
 
 	* include/Rivet/Projections/FinalStateHCM.hh,
 	include/Rivet/Projections/VetoedFinalState.hh: removed
 	_theParticles and corresponding access function. Use base class
 	variable instead.
 
 	* include/Rivet/Projections/FinalState.hh: Made _theParticles
 	protected.
 
 2007-06-13  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* src/Projections/FinalStateHCM.cc,
 	src/Projections/DISKinematics.cc: Equality checks using
 	GenParticle::operator== changed to check for pointer equality.
 
 	* include/Rivet/Analysis/HepEx9506012.hh: Uses modified DISLepton
 	projection.
 
 	* include/Rivet/Particle.hh: Added member function to check if a
 	GenParticle is associated.
 
 	* include/Rivet/Projections/DISLepton.hh,
 	src/Projections/DISLepton.cc: Fixed bug in projection. Introduced
 	final state projection to limit searching for scattered
 	lepton. Still not properly tested.
 
 2007-06-08  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* include/Rivet/Projections/PVertex.hh,
 	src/Projections/PVertex.cc: Fixed the projection to simply get the
 	signal_process_vertex from the GenEvent. This is the way it should
 	work. If the GenEvent does not have a signal_process_vertex
 	properly set up in this way, the problem is with the class that
 	fills the GenEvent.
 
 2007-06-06  Jon Butterworth  <jmb@hep.ucl.ac.uk>
 
 	* Merged TotalVisibleMomentum and CalMET
 	* Added pT ranges to Vetoed final state projection
 
 2007-05-27  Jon Butterworth  <jmb@hep.ucl.ac.uk>
 
 	* Fixed initialization of VetoedFinalStateProjection in ExampleTree
 
 2007-05-27  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* include/Rivet/Projections/KtJets.*: Make sure the KtEvent is
 	deleted properly.
 
 2007-05-26  Jon Butterworth  <jmb@hep.ucl.ac.uk>
 
 	* Added leptons to the ExampleTree.
 	* Added TotalVisibleEnergy projection, and added output to ExampleTree.
 
 2007-05-25  Jon Butterworth  <jmb@hep.ucl.ac.uk>
 
 	* Added a charged lepton projection
 
 2007-05-23  Andy Buckley  <andy@insectnation.org>
 
 	* src/Analysis/HepEx0409040.cc: Changed range of the histograms to
 	the "pi" range rather than the "128" range.
 
 	* src/Analysis/Analysis.cc: Fixed a bug in the AIDA path building.
 	Histogram auto-booking now works.
 
 2007-05-23  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* src/Analysis/HepEx9506012.cc: Now uses the histogram booking
 	function in the Analysis class.
 
 2007-05-23  Jon Butterworth  <jmb@hep.ucl.ac.uk>
 
 	* Fixed bug in PRD65092002 (was failing on zero jets)
 
 2007-05-23  Andy Buckley  <andy@insectnation.org>
 
 	* Added (but haven't properly tested) a VetoedFinalState projection.
 
 	* Added normalize() method for AIDA 1D histograms.
 
 	* Added configure checking for Mac OS X version, and setting the
 	development target flag accordingly.
 
 2007-05-22  Andy Buckley  <andy@insectnation.org>
 
 	* Added an ostream method for AnalysisName enums.
 
 	* Converted Analyses and Projections to use projection lists, cuts
 	and beam constraints.
 
 	* Added beam pair combining to the BeamPair sets of Projections
 	by finding set meta-intersections.
 
 	* Added methods to Cuts, Analysis and Projection to make Cut
 	definition easier.
 
 	* Fixed default fall-through in cut handling switch statement and
 	now using -numeric_limits<double>::max() rather than min()
 
 	* Added more control of logging presentation via static flag
 	methods on Log.
 
 2007-05-13  Andy Buckley  <andy@insectnation.org>
 
 	* Added self-consistency checking mechanisms for Cuts and Beam
 
 	* Re-implemented the cut-handling part of RivetInfo as a Cuts class.
 
 	* Changed names of Analysis and Projection name() and handler()
 	methods to getName() and getHandler() to be more consistent with
 	the rest of the public method names in those classes.
 
 2007-05-02  Andy Buckley  <andy@insectnation.org>
 
 	* Added auto-booking of histogram bins from AIDA XML files. The
 	AIDA files are located via a C++ function which is generated from
 	RivetPaths.cc.in by running configure.
 
 
 2007-04-18  Andy Buckley  <andy@insectnation.org>
 
 	* Added a preliminary version of the Rick Field UE analysis, under
 	the name PRD65092002.
 
 2007-04-19  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* src/Analysis/HepEx0409040.cc: The reason this did not compile
 	under gcc-4 is that some iterators into a vector were wrongly
 	assued to be pointers and were initialized to 0 and later compared
 	to 0. I've changed this to initialize to end() of the
 	corresponding vector and to compare with the same end() later.
 
 2007-04-05  Andy Buckley  <andy@insectnation.org>
 
 	* Lots of name changes in anticipation of the MCNet
 	school. RivetHandler is now AnalysisHandler (since that's what it
 	does!), BeamParticle has become ParticleName, and RivetInfo has
 	been split into Cut and BeamConstraint portions.
 
 	* Added BeamConstraint mechanism, which can be used to determine
 	if an analysis is compatible with the beams being used in the
 	generator. The ParticleName includes an "ANY" wildcard for this
 	purpose.
 
 2006-03-19  Andy Buckley  <andy@insectnation.org>
 
 	* Added "rivet" executable which can read in HepMC ASCII dump
 	files and apply Rivet analyses on the events.
 
 2007-02-24  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* src/Projections/KtJets.cc: Added comparison of member variables
 	in compare() function
 
 	* all: Merged changes from polymorphic-projections branch into
 	trunk
 
 2007-02-17  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* all: projections and analysis handlers: All projections which
 	uses other projctions now has a pointer rather than a copy of
 	those projections to allow for polymorphism. The constructors has
 	also been changed to require the used projections themselves,
 	rather than the arguments needed to construct them.
 
 2007-02-17  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* src/Projections/FinalState.cc,
 	include/Rivet/Projections/FinalState.icc (Rivet),
 	include/Rivet/Projections/FinalState.hh: Added cut in transverse
 	momentum on the particles to be included in the final state.
 
 2007-02-06  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* include/LWH/HistogramFactory.h: Fixed divide-by-zero in divide
 	function. Also fixed bug in error calculation in divide
 	function. Introduced checkBin function to make sure two histograms
 	are equal even if they have variable bin widths.
 
 	* include/LWH/Histogram1D.h: In normalize(double), do not do anything
 	if the sum of the bins are zero to avoid dividing by zero.
 
 2007-01-20  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* src/Test/testLWH.cc: Modified to output files using the Tree.
 
 	* configure.ac: Removed AC_CONFIG_AUX_DIR([include/Rivet/Config])
 	since the directory does not exist anymore.
 
 2006-12-21  Andy Buckley  <andy@insectnation.org>
 
 	* Rivet will now conditionally install the AIDA and LWH headers if
 	it can't find them when configure'ing.
 
 	* Started integrating Leif's LWH package to fulfill the AIDA
 	duties.
 
 	* Replaced multitude of CLHEP wrapper headers with a single
 	RivetCLHEP.h header.
 
 2006-11-20  Andy Buckley  <andy@insectnation.org>
 
 	* Introduced log4cpp logging.
 
 	* Added analysis enum, which can be used as input to an analysis
 	factory by Rivet users.
 
 2006-11-02  Andy Buckley  <andy@insectnation.org>
 
 	* Yet more, almost pointless, administrative moving around of
 	things with the intention of making the structure a bit
 	better-defined:
 
 	* The RivetInfo and RivetHandler classes have been
 	moved from src/Analysis into src as they are really the main Rivet
 	interface classes. The Rivet.h header has also been moved into the
 	"header root".
 
 	* The build of a single shared library in lib has been disabled,
 	with the library being built instead in src.
 
 2006-10-14  Andy Buckley  <andy@insectnation.org>
 
 	* Introduced a minimal subset of the Sherpa math tools, such as
 	Vector{3,4}D, Matrix, etc. The intention is to eventually cut the
 	dependency on CLHEP.
 
 2006-07-28  Andy Buckley  <andy@insectnation.org>
 
 	* Moving things around: all sources now in directories under src
 
 2006-06-04  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* Analysis/Examples/HZ95108.*: Now uses CentralEtHCM. Also set GeV
 	units on the relevant histograms.
 
 	* Projections/CentralEtHCM.*: Making a special class just to get
 	out one number - the summed Et in the central rapidity bin - may
 	seem like an overkill. But in case some one else might nees it...
 
 2006-06-03  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* Analysis/Examples/HZ95108.*: Added the hz95108 energy flow
 	analysis from HZtool.
 
 	* Projections/DISLepton.*: Since many HERA measurements do not
 	care if we have electron or positron beam, it is now possible to
 	specify lepton or anti-lepton.
 
 	* Projections/Event.*: Added member and access function for the
 	weight of an event (taken from the GenEvent object.weights()[0].
 
 	* Analysis/RivetHandler.*: Now depends explicitly on the AIDA
 	interface. An AIDA analysis factory must be specified in the
 	constructor, where a tree and histogram factory is automatically
 	created. Added access functions to the relevant AIDA objects.
 
 	* Analysis/AnalysisBase.*: Added access to the RivetHandler and
 	its AIDA factories.
 
 2005-12-27  Leif Lonnblad  <Leif.Lonnblad@thep.lu.se>
 
 	* configure.ac: Added -I$THEPEGPATH/include to AM_CPPFLAGS.
 
 	* Config/Rivet.h: Added some std incudes and using std::
 	declaration.
 
 	* Analysis/RivetInfo.*: Fixed some bugs. The RivetInfo facility
 	now works, although it has not been thoroughly tested.
 
 	* Analysis/Examples/TestMultiplicity.*: Re-introduced
 	FinalStateHCM for testing purposes but commented it away again.
 
 	* .: Made a number of changes to implement handling of RivetInfo
 	objects.
diff --git a/Doxyfile.in b/Doxyfile.in
--- a/Doxyfile.in
+++ b/Doxyfile.in
@@ -1,1798 +1,1798 @@
 # Doxyfile 1.8.1.2
 
 # This file describes the settings to be used by the documentation system
 # doxygen (www.doxygen.org) for a project.
 #
 # All text after a hash (#) is considered a comment and will be ignored.
 # The format is:
 #       TAG = value [value, ...]
 # For lists items can also be appended using:
 #       TAG += value [value, ...]
 # Values that contain spaces should be placed between quotes (" ").
 
 #---------------------------------------------------------------------------
 # Project related configuration options
 #---------------------------------------------------------------------------
 
 # This tag specifies the encoding used for all characters in the config file
 # that follow. The default is UTF-8 which is also the encoding used for all
 # text before the first occurrence of this tag. Doxygen uses libiconv (or the
 # iconv built into libc) for the transcoding. See
 # http://www.gnu.org/software/libiconv for the list of possible encodings.
 
 DOXYFILE_ENCODING      = UTF-8
 
 # The PROJECT_NAME tag is a single word (or sequence of words) that should
 # identify the project. Note that if you do not use Doxywizard you need
 # to put quotes around the project name if it contains spaces.
 
 PROJECT_NAME           = "Rivet"
 
 # The PROJECT_NUMBER tag can be used to enter a project or revision number.
 # This could be handy for archiving the generated documentation or
 # if some version control system is used.
 
 PROJECT_NUMBER         = @PACKAGE_VERSION@
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
 # for a project that appears at the top of each page and should give viewer
 # a quick idea about the purpose of the project. Keep the description short.
 
 PROJECT_BRIEF          =
 
 # With the PROJECT_LOGO tag one can specify an logo or icon that is
 # included in the documentation. The maximum height of the logo should not
 # exceed 55 pixels and the maximum width should not exceed 200 pixels.
 # Doxygen will copy the logo to the output directory.
 
 PROJECT_LOGO           =
 
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
 # base path where the generated documentation will be put.
 # If a relative path is entered, it will be relative to the location
 # where doxygen was started. If left blank the current directory will be used.
 
 OUTPUT_DIRECTORY       = doxy
 
 # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
 # 4096 sub-directories (in 2 levels) under the output directory of each output
 # format and will distribute the generated files over these directories.
 # Enabling this option can be useful when feeding doxygen a huge amount of
 # source files, where putting all generated files in the same directory would
 # otherwise cause performance problems for the file system.
 
 CREATE_SUBDIRS         = NO
 
 # The OUTPUT_LANGUAGE tag is used to specify the language in which all
 # documentation generated by doxygen is written. Doxygen will use this
 # information to generate all constant output in the proper language.
 # The default language is English, other supported languages are:
 # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
 # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
 # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
 # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
 # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
 # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
 
 OUTPUT_LANGUAGE        = English
 
 # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
 # include brief member descriptions after the members that are listed in
 # the file and class documentation (similar to JavaDoc).
 # Set to NO to disable this.
 
 BRIEF_MEMBER_DESC      = YES
 
 # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
 # the brief description of a member or function before the detailed description.
 # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
 # brief descriptions will be completely suppressed.
 
 REPEAT_BRIEF           = YES
 
 # This tag implements a quasi-intelligent brief description abbreviator
 # that is used to form the text in various listings. Each string
 # in this list, if found as the leading text of the brief description, will be
 # stripped from the text and the result after processing the whole list, is
 # used as the annotated text. Otherwise, the brief description is used as-is.
 # If left blank, the following values are used ("$name" is automatically
 # replaced with the name of the entity): "The $name class" "The $name widget"
 # "The $name file" "is" "provides" "specifies" "contains"
 # "represents" "a" "an" "the"
 
 ABBREVIATE_BRIEF       =
 
 # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
 # Doxygen will generate a detailed section even if there is only a brief
 # description.
 
 ALWAYS_DETAILED_SEC    = NO
 
 # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
 # inherited members of a class in the documentation of that class as if those
 # members were ordinary class members. Constructors, destructors and assignment
 # operators of the base classes will not be shown.
 
 INLINE_INHERITED_MEMB  = NO
 
 # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
 # path before files name in the file list and in the header files. If set
 # to NO the shortest path that makes the file name unique will be used.
 
 FULL_PATH_NAMES        = YES
 
 # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
 # can be used to strip a user-defined part of the path. Stripping is
 # only done if one of the specified strings matches the left-hand part of
 # the path. The tag can be used to show relative paths in the file list.
 # If left blank the directory from which doxygen is run is used as the
 # path to strip.
 
 STRIP_FROM_PATH        =
 
 # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
 # the path mentioned in the documentation of a class, which tells
 # the reader which header file to include in order to use a class.
 # If left blank only the name of the header file containing the class
 # definition is used. Otherwise one should specify the include paths that
 # are normally passed to the compiler using the -I flag.
 
 STRIP_FROM_INC_PATH    =
 
 # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
 # (but less readable) file names. This can be useful if your file system
 # doesn't support long names like on DOS, Mac, or CD-ROM.
 
 SHORT_NAMES            = NO
 
 # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
 # will interpret the first line (until the first dot) of a JavaDoc-style
 # comment as the brief description. If set to NO, the JavaDoc
 # comments will behave just like regular Qt-style comments
 # (thus requiring an explicit @brief command for a brief description.)
 
 JAVADOC_AUTOBRIEF      = NO
 
 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will
 # interpret the first line (until the first dot) of a Qt-style
 # comment as the brief description. If set to NO, the comments
 # will behave just like regular Qt-style comments (thus requiring
 # an explicit \brief command for a brief description.)
 
 QT_AUTOBRIEF           = NO
 
 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
 # treat a multi-line C++ special comment block (i.e. a block of //! or ///
 # comments) as a brief description. This used to be the default behaviour.
 # The new default is to treat a multi-line C++ comment block as a detailed
 # description. Set this tag to YES if you prefer the old behaviour instead.
 
 MULTILINE_CPP_IS_BRIEF = NO
 
 # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
 # member inherits the documentation from any documented member that it
 # re-implements.
 
 INHERIT_DOCS           = YES
 
 # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
 # a new page for each member. If set to NO, the documentation of a member will
 # be part of the file/class/namespace that contains it.
 
 SEPARATE_MEMBER_PAGES  = NO
 
 # The TAB_SIZE tag can be used to set the number of spaces in a tab.
 # Doxygen uses this value to replace tabs by spaces in code fragments.
 
 TAB_SIZE               = 8
 
 # This tag can be used to specify a number of aliases that acts
 # as commands in the documentation. An alias has the form "name=value".
 # For example adding "sideeffect=\par Side Effects:\n" will allow you to
 # put the command \sideeffect (or @sideeffect) in the documentation, which
 # will result in a user-defined paragraph with heading "Side Effects:".
 # You can put \n's in the value part of an alias to insert newlines.
 
 ALIASES                =
 
 # This tag can be used to specify a number of word-keyword mappings (TCL only).
 # A mapping has the form "name=value". For example adding
 # "class=itcl::class" will allow you to use the command class in the
 # itcl::class meaning.
 
 TCL_SUBST              =
 
 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
 # sources only. Doxygen will then generate output that is more tailored for C.
 # For instance, some of the names that are used will be different. The list
 # of all members will be omitted, etc.
 
 OPTIMIZE_OUTPUT_FOR_C  = NO
 
 # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
 # sources only. Doxygen will then generate output that is more tailored for
 # Java. For instance, namespaces will be presented as packages, qualified
 # scopes will look different, etc.
 
 OPTIMIZE_OUTPUT_JAVA   = NO
 
 # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
 # sources only. Doxygen will then generate output that is more tailored for
 # Fortran.
 
 OPTIMIZE_FOR_FORTRAN   = NO
 
 # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
 # sources. Doxygen will then generate output that is tailored for
 # VHDL.
 
 OPTIMIZE_OUTPUT_VHDL   = NO
 
 # Doxygen selects the parser to use depending on the extension of the files it
 # parses. With this tag you can assign which parser to use for a given extension.
 # Doxygen has a built-in mapping, but you can override or extend it using this
 # tag. The format is ext=language, where ext is a file extension, and language
 # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
 # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
 # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
 # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
 # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
 
 EXTENSION_MAPPING      =
 
 # If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
 # comments according to the Markdown format, which allows for more readable
 # documentation. See http://daringfireball.net/projects/markdown/ for details.
 # The output of markdown processing is further processed by doxygen, so you
 # can mix doxygen, HTML, and XML commands with Markdown formatting.
 # Disable only in case of backward compatibilities issues.
 
 MARKDOWN_SUPPORT       = YES
 
 # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
 # to include (a tag file for) the STL sources as input, then you should
 # set this tag to YES in order to let doxygen match functions declarations and
 # definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
 # func(std::string) {}). This also makes the inheritance and collaboration
 # diagrams that involve STL classes more complete and accurate.
 
 BUILTIN_STL_SUPPORT    = YES
 
 # If you use Microsoft's C++/CLI language, you should set this option to YES to
 # enable parsing support.
 
 CPP_CLI_SUPPORT        = NO
 
 # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
 # Doxygen will parse them like normal C++ but will assume all classes use public
 # instead of private inheritance when no explicit protection keyword is present.
 
 SIP_SUPPORT            = NO
 
 # For Microsoft's IDL there are propget and propput attributes to indicate getter
 # and setter methods for a property. Setting this option to YES (the default)
 # will make doxygen replace the get and set methods by a property in the
 # documentation. This will only work if the methods are indeed getting or
 # setting a simple type. If this is not the case, or you want to show the
 # methods anyway, you should set this option to NO.
 
 IDL_PROPERTY_SUPPORT   = YES
 
 # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
 # tag is set to YES, then doxygen will reuse the documentation of the first
 # member in the group (if any) for the other members of the group. By default
 # all members of a group must be documented explicitly.
 
 DISTRIBUTE_GROUP_DOC   = NO
 
 # Set the SUBGROUPING tag to YES (the default) to allow class member groups of
 # the same type (for instance a group of public functions) to be put as a
 # subgroup of that type (e.g. under the Public Functions section). Set it to
 # NO to prevent subgrouping. Alternatively, this can be done per class using
 # the \nosubgrouping command.
 
 SUBGROUPING            = YES
 
 # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
 # unions are shown inside the group in which they are included (e.g. using
 # @ingroup) instead of on a separate page (for HTML and Man pages) or
 # section (for LaTeX and RTF).
 
 INLINE_GROUPED_CLASSES = NO
 
 # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
 # unions with only public data fields will be shown inline in the documentation
 # of the scope in which they are defined (i.e. file, namespace, or group
 # documentation), provided this scope is documented. If set to NO (the default),
 # structs, classes, and unions are shown on a separate page (for HTML and Man
 # pages) or section (for LaTeX and RTF).
 
 INLINE_SIMPLE_STRUCTS  = NO
 
 # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
 # is documented as struct, union, or enum with the name of the typedef. So
 # typedef struct TypeS {} TypeT, will appear in the documentation as a struct
 # with name TypeT. When disabled the typedef will appear as a member of a file,
 # namespace, or class. And the struct will be named TypeS. This can typically
 # be useful for C code in case the coding convention dictates that all compound
 # types are typedef'ed and only the typedef is referenced, never the tag name.
 
 TYPEDEF_HIDES_STRUCT   = NO
 
 # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
 # determine which symbols to keep in memory and which to flush to disk.
 # When the cache is full, less often used symbols will be written to disk.
 # For small to medium size projects (<1000 input files) the default value is
 # probably good enough. For larger projects a too small cache size can cause
 # doxygen to be busy swapping symbols to and from disk most of the time
 # causing a significant performance penalty.
 # If the system has enough physical memory increasing the cache will improve the
 # performance by keeping more symbols in memory. Note that the value works on
 # a logarithmic scale so increasing the size by one will roughly double the
 # memory usage. The cache size is given by this formula:
 # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
 # corresponding to a cache size of 2^16 = 65536 symbols.
 
 SYMBOL_CACHE_SIZE      = 0
 
 # Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
 # set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
 # their name and scope. Since this can be an expensive process and often the
 # same symbol appear multiple times in the code, doxygen keeps a cache of
 # pre-resolved symbols. If the cache is too small doxygen will become slower.
 # If the cache is too large, memory is wasted. The cache size is given by this
 # formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
 # corresponding to a cache size of 2^16 = 65536 symbols.
 
 LOOKUP_CACHE_SIZE      = 0
 
 #---------------------------------------------------------------------------
 # Build related configuration options
 #---------------------------------------------------------------------------
 
 # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
 # documentation are documented, even if no documentation was available.
 # Private class members and static file members will be hidden unless
 # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
 
 EXTRACT_ALL            = NO
 
 # If the EXTRACT_PRIVATE tag is set to YES all private members of a class
 # will be included in the documentation.
 
 EXTRACT_PRIVATE        = NO
 
 # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation.
 
 EXTRACT_PACKAGE        = NO
 
 # If the EXTRACT_STATIC tag is set to YES all static members of a file
 # will be included in the documentation.
 
 EXTRACT_STATIC         = YES
 
 # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
 # defined locally in source files will be included in the documentation.
 # If set to NO only classes defined in header files are included.
 
 EXTRACT_LOCAL_CLASSES  = NO
 
 # This flag is only useful for Objective-C code. When set to YES local
 # methods, which are defined in the implementation section but not in
 # the interface are included in the documentation.
 # If set to NO (the default) only methods in the interface are included.
 
 EXTRACT_LOCAL_METHODS  = NO
 
 # If this flag is set to YES, the members of anonymous namespaces will be
 # extracted and appear in the documentation as a namespace called
 # 'anonymous_namespace{file}', where file will be replaced with the base
 # name of the file that contains the anonymous namespace. By default
 # anonymous namespaces are hidden.
 
 EXTRACT_ANON_NSPACES   = NO
 
 # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
 # undocumented members of documented classes, files or namespaces.
 # If set to NO (the default) these members will be included in the
 # various overviews, but no documentation section is generated.
 # This option has no effect if EXTRACT_ALL is enabled.
 
 HIDE_UNDOC_MEMBERS     = NO
 
 # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
 # undocumented classes that are normally visible in the class hierarchy.
 # If set to NO (the default) these classes will be included in the various
 # overviews. This option has no effect if EXTRACT_ALL is enabled.
 
 HIDE_UNDOC_CLASSES     = NO
 
 # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
 # friend (class|struct|union) declarations.
 # If set to NO (the default) these declarations will be included in the
 # documentation.
 
 HIDE_FRIEND_COMPOUNDS  = NO
 
 # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
 # documentation blocks found inside the body of a function.
 # If set to NO (the default) these blocks will be appended to the
 # function's detailed documentation block.
 
 HIDE_IN_BODY_DOCS      = NO
 
 # The INTERNAL_DOCS tag determines if documentation
 # that is typed after a \internal command is included. If the tag is set
 # to NO (the default) then the documentation will be excluded.
 # Set it to YES to include the internal documentation.
 
 INTERNAL_DOCS          = NO
 
 # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
 # file names in lower-case letters. If set to YES upper-case letters are also
 # allowed. This is useful if you have classes or files whose names only differ
 # in case and if your file system supports case sensitive file names. Windows
 # and Mac users are advised to set this option to NO.
 
 CASE_SENSE_NAMES       = YES
 
 # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
 # will show members with their full class and namespace scopes in the
 # documentation. If set to YES the scope will be hidden.
 
 HIDE_SCOPE_NAMES       = NO
 
 # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
 # will put a list of the files that are included by a file in the documentation
 # of that file.
 
 SHOW_INCLUDE_FILES     = YES
 
 # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
 # will list include files with double quotes in the documentation
 # rather than with sharp brackets.
 
 FORCE_LOCAL_INCLUDES   = NO
 
 # If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
 # is inserted in the documentation for inline members.
 
 INLINE_INFO            = YES
 
 # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
 # will sort the (detailed) documentation of file and class members
 # alphabetically by member name. If set to NO the members will appear in
 # declaration order.
 
 SORT_MEMBER_DOCS       = YES
 
 # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
 # brief documentation of file, namespace and class members alphabetically
 # by member name. If set to NO (the default) the members will appear in
 # declaration order.
 
 SORT_BRIEF_DOCS        = NO
 
 # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
 # will sort the (brief and detailed) documentation of class members so that
 # constructors and destructors are listed first. If set to NO (the default)
 # the constructors will appear in the respective orders defined by
 # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
 # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
 # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
 
 SORT_MEMBERS_CTORS_1ST = YES
 
 # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
 # hierarchy of group names into alphabetical order. If set to NO (the default)
 # the group names will appear in their defined order.
 
 SORT_GROUP_NAMES       = NO
 
 # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
 # sorted by fully-qualified names, including namespaces. If set to
 # NO (the default), the class list will be sorted only by class name,
 # not including the namespace part.
 # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
 # Note: This option applies only to the class list, not to the
 # alphabetical list.
 
 SORT_BY_SCOPE_NAME     = YES
 
 # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
 # do proper type resolution of all parameters of a function it will reject a
 # match between the prototype and the implementation of a member function even
 # if there is only one candidate or it is obvious which candidate to choose
 # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
 # will still accept a match between prototype and implementation in such cases.
 
 STRICT_PROTO_MATCHING  = NO
 
 # The GENERATE_TODOLIST tag can be used to enable (YES) or
 # disable (NO) the todo list. This list is created by putting \todo
 # commands in the documentation.
 
 GENERATE_TODOLIST      = YES
 
 # The GENERATE_TESTLIST tag can be used to enable (YES) or
 # disable (NO) the test list. This list is created by putting \test
 # commands in the documentation.
 
 GENERATE_TESTLIST      = YES
 
 # The GENERATE_BUGLIST tag can be used to enable (YES) or
 # disable (NO) the bug list. This list is created by putting \bug
 # commands in the documentation.
 
 GENERATE_BUGLIST       = YES
 
 # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
 # disable (NO) the deprecated list. This list is created by putting
 # \deprecated commands in the documentation.
 
 GENERATE_DEPRECATEDLIST= YES
 
 # The ENABLED_SECTIONS tag can be used to enable conditional
 # documentation sections, marked by \if sectionname ... \endif.
 
 ENABLED_SECTIONS       =
 
 # The MAX_INITIALIZER_LINES tag determines the maximum number of lines
 # the initial value of a variable or macro consists of for it to appear in
 # the documentation. If the initializer consists of more lines than specified
 # here it will be hidden. Use a value of 0 to hide initializers completely.
 # The appearance of the initializer of individual variables and macros in the
 # documentation can be controlled using \showinitializer or \hideinitializer
 # command in the documentation regardless of this setting.
 
 MAX_INITIALIZER_LINES  = 30
 
 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated
 # at the bottom of the documentation of classes and structs. If set to YES the
 # list will mention the files that were used to generate the documentation.
 
 SHOW_USED_FILES        = YES
 
 # Set the SHOW_FILES tag to NO to disable the generation of the Files page.
 # This will remove the Files entry from the Quick Index and from the
 # Folder Tree View (if specified). The default is YES.
 
 SHOW_FILES             = YES
 
 # Set the SHOW_NAMESPACES tag to NO to disable the generation of the
 # Namespaces page.
 # This will remove the Namespaces entry from the Quick Index
 # and from the Folder Tree View (if specified). The default is YES.
 
 SHOW_NAMESPACES        = YES
 
 # The FILE_VERSION_FILTER tag can be used to specify a program or script that
 # doxygen should invoke to get the current version for each file (typically from
 # the version control system). Doxygen will invoke the program by executing (via
 # popen()) the command <command> <input-file>, where <command> is the value of
 # the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
 # provided by doxygen. Whatever the program writes to standard output
 # is used as the file version. See the manual for examples.
 
 FILE_VERSION_FILTER    =
 
 # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
 # by doxygen. The layout file controls the global structure of the generated
 # output files in an output format independent way. To create the layout file
 # that represents doxygen's defaults, run doxygen with the -l option.
 # You can optionally specify a file name after the option, if omitted
 # DoxygenLayout.xml will be used as the name of the layout file.
 
 LAYOUT_FILE            =
 
 # The CITE_BIB_FILES tag can be used to specify one or more bib files
 # containing the references data. This must be a list of .bib files. The
 # .bib extension is automatically appended if omitted. Using this command
 # requires the bibtex tool to be installed. See also
 # http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
 # of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
 # feature you need bibtex and perl available in the search path.
 
 CITE_BIB_FILES         =
 
 #---------------------------------------------------------------------------
 # configuration options related to warning and progress messages
 #---------------------------------------------------------------------------
 
 # The QUIET tag can be used to turn on/off the messages that are generated
 # by doxygen. Possible values are YES and NO. If left blank NO is used.
 
 QUIET                  = YES
 
 # The WARNINGS tag can be used to turn on/off the warning messages that are
 # generated by doxygen. Possible values are YES and NO. If left blank
 # NO is used.
 
 WARNINGS               = NO
 
 # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
 # for undocumented members. If EXTRACT_ALL is set to YES then this flag will
 # automatically be disabled.
 
 WARN_IF_UNDOCUMENTED   = NO
 
 # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
 # potential errors in the documentation, such as not documenting some
 # parameters in a documented function, or documenting parameters that
 # don't exist or using markup commands wrongly.
 
 WARN_IF_DOC_ERROR      = YES
 
 # The WARN_NO_PARAMDOC option can be enabled to get warnings for
 # functions that are documented, but have no documentation for their parameters
 # or return value. If set to NO (the default) doxygen will only warn about
 # wrong or incomplete parameter documentation, but not about the absence of
 # documentation.
 
 WARN_NO_PARAMDOC       = NO
 
 # The WARN_FORMAT tag determines the format of the warning messages that
 # doxygen can produce. The string should contain the $file, $line, and $text
 # tags, which will be replaced by the file and line number from which the
 # warning originated and the warning text. Optionally the format may contain
 # $version, which will be replaced by the version of the file (if it could
 # be obtained via FILE_VERSION_FILTER)
 
 WARN_FORMAT            = "$file:$line: $text"
 
 # The WARN_LOGFILE tag can be used to specify a file to which warning
 # and error messages should be written. If left blank the output is written
 # to stderr.
 
 WARN_LOGFILE           =
 
 #---------------------------------------------------------------------------
 # configuration options related to the input files
 #---------------------------------------------------------------------------
 
 # The INPUT tag can be used to specify the files and/or directories that contain
 # documented source files. You may enter file names like "myfile.cpp" or
 # directories like "/usr/src/myproject". Separate the files or directories
 # with spaces.
 
 INPUT                  = . \
-                         src \
-                         include/Rivet
+                         @top_srcdir@/src \
+                         @top_srcdir@/include/Rivet
 
 # This tag can be used to specify the character encoding of the source files
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
 # also the default input encoding. Doxygen uses libiconv (or the iconv built
 # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
 # the list of possible encodings.
 
 INPUT_ENCODING         = UTF-8
 
 # If the value of the INPUT tag contains directories, you can use the
 # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
 # and *.h) to filter out the source-files in the directories. If left
 # blank the following patterns are tested:
 # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
 # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
 # *.f90 *.f *.for *.vhd *.vhdl
 
 FILE_PATTERNS          = *.cc \
                          *.hh \
                          *.fhh \
                          index.dox
 
 # The RECURSIVE tag can be used to turn specify whether or not subdirectories
 # should be searched for input files as well. Possible values are YES and NO.
 # If left blank NO is used.
 
 RECURSIVE              = YES
 
 # The EXCLUDE tag can be used to specify files and/or directories that should be
 # excluded from the INPUT source files. This way you can easily exclude a
 # subdirectory from a directory tree whose root is specified with the INPUT tag.
 # Note that relative paths are relative to the directory from which doxygen is
 # run.
 
 EXCLUDE                =
 
 # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
 # directories that are symbolic links (a Unix file system feature) are excluded
 # from the input.
 
 EXCLUDE_SYMLINKS       = NO
 
 # If the value of the INPUT tag contains directories, you can use the
 # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
 # certain files from those directories. Note that the wildcards are matched
 # against the file with absolute path, so to exclude all test directories
 # for example use the pattern */test/*
 
 EXCLUDE_PATTERNS       =
 
 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
 # (namespaces, classes, functions, etc.) that should be excluded from the
 # output. The symbol name can be a fully qualified name, a word, or if the
 # wildcard * is used, a substring. Examples: ANamespace, AClass,
 # AClass::ANamespace, ANamespace::*Test
 
 EXCLUDE_SYMBOLS        = _*
 
 # The EXAMPLE_PATH tag can be used to specify one or more files or
 # directories that contain example code fragments that are included (see
 # the \include command).
 
 EXAMPLE_PATH           =
 
 # If the value of the EXAMPLE_PATH tag contains directories, you can use the
 # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
 # and *.h) to filter out the source-files in the directories. If left
 # blank all files are included.
 
 EXAMPLE_PATTERNS       =
 
 # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
 # searched for input files to be used with the \include or \dontinclude
 # commands irrespective of the value of the RECURSIVE tag.
 # Possible values are YES and NO. If left blank NO is used.
 
 EXAMPLE_RECURSIVE      = NO
 
 # The IMAGE_PATH tag can be used to specify one or more files or
 # directories that contain image that are included in the documentation (see
 # the \image command).
 
 IMAGE_PATH             =
 
 # The INPUT_FILTER tag can be used to specify a program that doxygen should
 # invoke to filter for each input file. Doxygen will invoke the filter program
 # by executing (via popen()) the command <filter> <input-file>, where <filter>
 # is the value of the INPUT_FILTER tag, and <input-file> is the name of an
 # input file. Doxygen will then use the output that the filter program writes
 # to standard output.
 # If FILTER_PATTERNS is specified, this tag will be
 # ignored.
 
 INPUT_FILTER           =
 
 # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
 # basis.
 # Doxygen will compare the file name with each pattern and apply the
 # filter if there is a match.
 # The filters are a list of the form:
 # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
 # info on how filters are used. If FILTER_PATTERNS is empty or if
 # non of the patterns match the file name, INPUT_FILTER is applied.
 
 FILTER_PATTERNS        =
 
 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
 # INPUT_FILTER) will be used to filter the input files when producing source
 # files to browse (i.e. when SOURCE_BROWSER is set to YES).
 
 FILTER_SOURCE_FILES    = NO
 
 # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
 # pattern. A pattern will override the setting for FILTER_PATTERN (if any)
 # and it is also possible to disable source filtering for a specific pattern
 # using *.ext= (so without naming a filter). This option only has effect when
 # FILTER_SOURCE_FILES is enabled.
 
 FILTER_SOURCE_PATTERNS =
 
 #---------------------------------------------------------------------------
 # configuration options related to source browsing
 #---------------------------------------------------------------------------
 
 # If the SOURCE_BROWSER tag is set to YES then a list of source files will
 # be generated. Documented entities will be cross-referenced with these sources.
 # Note: To get rid of all source code in the generated output, make sure also
 # VERBATIM_HEADERS is set to NO.
 
 SOURCE_BROWSER         = NO
 
 # Setting the INLINE_SOURCES tag to YES will include the body
 # of functions and classes directly in the documentation.
 
 INLINE_SOURCES         = NO
 
 # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
 # doxygen to hide any special comment blocks from generated source code
 # fragments. Normal C, C++ and Fortran comments will always remain visible.
 
 STRIP_CODE_COMMENTS    = YES
 
 # If the REFERENCED_BY_RELATION tag is set to YES
 # then for each documented function all documented
 # functions referencing it will be listed.
 
 REFERENCED_BY_RELATION = YES
 
 # If the REFERENCES_RELATION tag is set to YES
 # then for each documented function all documented entities
 # called/used by that function will be listed.
 
 REFERENCES_RELATION    = YES
 
 # If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
 # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
 # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
 # link to the source code.
 # Otherwise they will link to the documentation.
 
 REFERENCES_LINK_SOURCE = YES
 
 # If the USE_HTAGS tag is set to YES then the references to source code
 # will point to the HTML generated by the htags(1) tool instead of doxygen
 # built-in source browser. The htags tool is part of GNU's global source
 # tagging system (see http://www.gnu.org/software/global/global.html). You
 # will need version 4.8.6 or higher.
 
 USE_HTAGS              = NO
 
 # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
 # will generate a verbatim copy of the header file for each class for
 # which an include is specified. Set to NO to disable this.
 
 VERBATIM_HEADERS       = YES
 
 #---------------------------------------------------------------------------
 # configuration options related to the alphabetical class index
 #---------------------------------------------------------------------------
 
 # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
 # of all compounds will be generated. Enable this if the project
 # contains a lot of classes, structs, unions or interfaces.
 
 ALPHABETICAL_INDEX     = NO
 
 # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
 # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
 # in which this list will be split (can be a number in the range [1..20])
 
 COLS_IN_ALPHA_INDEX    = 5
 
 # In case all classes in a project start with a common prefix, all
 # classes will be put under the same header in the alphabetical index.
 # The IGNORE_PREFIX tag can be used to specify one or more prefixes that
 # should be ignored while generating the index headers.
 
 IGNORE_PREFIX          =
 
 #---------------------------------------------------------------------------
 # configuration options related to the HTML output
 #---------------------------------------------------------------------------
 
 # If the GENERATE_HTML tag is set to YES (the default) Doxygen will
 # generate HTML output.
 
 GENERATE_HTML          = YES
 
 # The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `html' will be used as the default path.
 
 HTML_OUTPUT            = html
 
 # The HTML_FILE_EXTENSION tag can be used to specify the file extension for
 # each generated HTML page (for example: .htm,.php,.asp). If it is left blank
 # doxygen will generate files with .html extension.
 
 HTML_FILE_EXTENSION    = .html
 
 # The HTML_HEADER tag can be used to specify a personal HTML header for
 # each generated HTML page. If it is left blank doxygen will generate a
 # standard header. Note that when using a custom header you are responsible
 #  for the proper inclusion of any scripts and style sheets that doxygen
 # needs, which is dependent on the configuration options used.
 # It is advised to generate a default header using "doxygen -w html
 # header.html footer.html stylesheet.css YourConfigFile" and then modify
 # that header. Note that the header is subject to change so you typically
 # have to redo this when upgrading to a newer version of doxygen or when
 # changing the value of configuration settings such as GENERATE_TREEVIEW!
 
 HTML_HEADER            =
 
 # The HTML_FOOTER tag can be used to specify a personal HTML footer for
 # each generated HTML page. If it is left blank doxygen will generate a
 # standard footer.
 
 HTML_FOOTER            =
 
 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading
 # style sheet that is used by each HTML page. It can be used to
 # fine-tune the look of the HTML output. If the tag is left blank doxygen
 # will generate a default style sheet. Note that doxygen will try to copy
 # the style sheet file to the HTML output directory, so don't put your own
 # style sheet in the HTML output directory as well, or it will be erased!
 
 HTML_STYLESHEET        =
 
 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
 # other source files which should be copied to the HTML output directory. Note
 # that these files will be copied to the base HTML output directory. Use the
 # $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
 # files. In the HTML_STYLESHEET file, use the file name only. Also note that
 # the files will be copied as-is; there are no commands or markers available.
 
 HTML_EXTRA_FILES       =
 
 # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
 # Doxygen will adjust the colors in the style sheet and background images
 # according to this color. Hue is specified as an angle on a colorwheel,
 # see http://en.wikipedia.org/wiki/Hue for more information.
 # For instance the value 0 represents red, 60 is yellow, 120 is green,
 # 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
 # The allowed range is 0 to 359.
 
 HTML_COLORSTYLE_HUE    = 220
 
 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
 # the colors in the HTML output. For a value of 0 the output will use
 # grayscales only. A value of 255 will produce the most vivid colors.
 
 HTML_COLORSTYLE_SAT    = 100
 
 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
 # the luminance component of the colors in the HTML output. Values below
 # 100 gradually make the output lighter, whereas values above 100 make
 # the output darker. The value divided by 100 is the actual gamma applied,
 # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
 # and 100 does not change the gamma.
 
 HTML_COLORSTYLE_GAMMA  = 80
 
 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
 # page will contain the date and time when the page was generated. Setting
 # this to NO can help when comparing the output of multiple runs.
 
 HTML_TIMESTAMP         = YES
 
 # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
 # documentation will contain sections that can be hidden and shown after the
 # page has loaded.
 
 HTML_DYNAMIC_SECTIONS  = NO
 
 # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
 # entries shown in the various tree structured indices initially; the user
 # can expand and collapse entries dynamically later on. Doxygen will expand
 # the tree to such a level that at most the specified number of entries are
 # visible (unless a fully collapsed tree already exceeds this amount).
 # So setting the number of entries 1 will produce a full collapsed tree by
 # default. 0 is a special value representing an infinite number of entries
 # and will result in a full expanded tree by default.
 
 HTML_INDEX_NUM_ENTRIES = 100
 
 # If the GENERATE_DOCSET tag is set to YES, additional index files
 # will be generated that can be used as input for Apple's Xcode 3
 # integrated development environment, introduced with OSX 10.5 (Leopard).
 # To create a documentation set, doxygen will generate a Makefile in the
 # HTML output directory. Running make will produce the docset in that
 # directory and running "make install" will install the docset in
 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
 # it at startup.
 # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
 # for more information.
 
 GENERATE_DOCSET        = NO
 
 # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
 # feed. A documentation feed provides an umbrella under which multiple
 # documentation sets from a single provider (such as a company or product suite)
 # can be grouped.
 
 DOCSET_FEEDNAME        = "Doxygen generated docs"
 
 # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
 # should uniquely identify the documentation set bundle. This should be a
 # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
 # will append .docset to the name.
 
 DOCSET_BUNDLE_ID       = org.doxygen.Project
 
 # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
 # the documentation publisher. This should be a reverse domain-name style
 # string, e.g. com.mycompany.MyDocSet.documentation.
 
 DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
 
 # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
 
 DOCSET_PUBLISHER_NAME  = Publisher
 
 # If the GENERATE_HTMLHELP tag is set to YES, additional index files
 # will be generated that can be used as input for tools like the
 # Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
 # of the generated HTML documentation.
 
 GENERATE_HTMLHELP      = NO
 
 # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
 # be used to specify the file name of the resulting .chm file. You
 # can add a path in front of the file if the result should not be
 # written to the html output directory.
 
 CHM_FILE               =
 
 # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
 # be used to specify the location (absolute path including file name) of
 # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
 # the HTML help compiler on the generated index.hhp.
 
 HHC_LOCATION           =
 
 # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
 # controls if a separate .chi index file is generated (YES) or that
 # it should be included in the master .chm file (NO).
 
 GENERATE_CHI           = NO
 
 # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
 # is used to encode HtmlHelp index (hhk), content (hhc) and project file
 # content.
 
 CHM_INDEX_ENCODING     =
 
 # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
 # controls whether a binary table of contents is generated (YES) or a
 # normal table of contents (NO) in the .chm file.
 
 BINARY_TOC             = NO
 
 # The TOC_EXPAND flag can be set to YES to add extra items for group members
 # to the contents of the HTML help documentation and to the tree view.
 
 TOC_EXPAND             = NO
 
 # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
 # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
 # that can be used as input for Qt's qhelpgenerator to generate a
 # Qt Compressed Help (.qch) of the generated HTML documentation.
 
 GENERATE_QHP           = NO
 
 # If the QHG_LOCATION tag is specified, the QCH_FILE tag can
 # be used to specify the file name of the resulting .qch file.
 # The path specified is relative to the HTML output folder.
 
 QCH_FILE               =
 
 # The QHP_NAMESPACE tag specifies the namespace to use when generating
 # Qt Help Project output. For more information please see
 # http://doc.trolltech.com/qthelpproject.html#namespace
 
 QHP_NAMESPACE          = org.doxygen.Project
 
 # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
 # Qt Help Project output. For more information please see
 # http://doc.trolltech.com/qthelpproject.html#virtual-folders
 
 QHP_VIRTUAL_FOLDER     = doc
 
 # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
 # add. For more information please see
 # http://doc.trolltech.com/qthelpproject.html#custom-filters
 
 QHP_CUST_FILTER_NAME   =
 
 # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
 # custom filter to add. For more information please see
 # <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
 # Qt Help Project / Custom Filters</a>.
 
 QHP_CUST_FILTER_ATTRS  =
 
 # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
 # project's
 # filter section matches.
 # <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
 # Qt Help Project / Filter Attributes</a>.
 
 QHP_SECT_FILTER_ATTRS  =
 
 # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
 # be used to specify the location of Qt's qhelpgenerator.
 # If non-empty doxygen will try to run qhelpgenerator on the generated
 # .qhp file.
 
 QHG_LOCATION           =
 
 # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
 #  will be generated, which together with the HTML files, form an Eclipse help
 # plugin. To install this plugin and make it available under the help contents
 # menu in Eclipse, the contents of the directory containing the HTML and XML
 # files needs to be copied into the plugins directory of eclipse. The name of
 # the directory within the plugins directory should be the same as
 # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
 # the help appears.
 
 GENERATE_ECLIPSEHELP   = NO
 
 # A unique identifier for the eclipse help plugin. When installing the plugin
 # the directory name containing the HTML and XML files should also have
 # this name.
 
 ECLIPSE_DOC_ID         = org.doxygen.Project
 
 # The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
 # at top of each HTML page. The value NO (the default) enables the index and
 # the value YES disables it. Since the tabs have the same information as the
 # navigation tree you can set this option to NO if you already set
 # GENERATE_TREEVIEW to YES.
 
 DISABLE_INDEX          = NO
 
 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
 # structure should be generated to display hierarchical information.
 # If the tag value is set to YES, a side panel will be generated
 # containing a tree-like index structure (just like the one that
 # is generated for HTML Help). For this to work a browser that supports
 # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
 # Windows users are probably better off using the HTML help feature.
 # Since the tree basically has the same information as the tab index you
 # could consider to set DISABLE_INDEX to NO when enabling this option.
 
 GENERATE_TREEVIEW      = NO
 
 # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
 # (range [0,1..20]) that doxygen will group on one line in the generated HTML
 # documentation. Note that a value of 0 will completely suppress the enum
 # values from appearing in the overview section.
 
 ENUM_VALUES_PER_LINE   = 4
 
 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
 # used to set the initial width (in pixels) of the frame in which the tree
 # is shown.
 
 TREEVIEW_WIDTH         = 250
 
 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
 # links to external symbols imported via tag files in a separate window.
 
 EXT_LINKS_IN_WINDOW    = NO
 
 # Use this tag to change the font size of Latex formulas included
 # as images in the HTML documentation. The default is 10. Note that
 # when you change the font size after a successful doxygen run you need
 # to manually remove any form_*.png images from the HTML output directory
 # to force them to be regenerated.
 
 FORMULA_FONTSIZE       = 10
 
 # Use the FORMULA_TRANPARENT tag to determine whether or not the images
 # generated for formulas are transparent PNGs. Transparent PNGs are
 # not supported properly for IE 6.0, but are supported on all modern browsers.
 # Note that when changing this option you need to delete any form_*.png files
 # in the HTML output before the changes have effect.
 
 FORMULA_TRANSPARENT    = YES
 
 # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
 # (see http://www.mathjax.org) which uses client side Javascript for the
 # rendering instead of using prerendered bitmaps. Use this if you do not
 # have LaTeX installed or if you want to formulas look prettier in the HTML
 # output. When enabled you may also need to install MathJax separately and
 # configure the path to it using the MATHJAX_RELPATH option.
 
 USE_MATHJAX            = NO
 
 # When MathJax is enabled you need to specify the location relative to the
 # HTML output directory using the MATHJAX_RELPATH option. The destination
 # directory should contain the MathJax.js script. For instance, if the mathjax
 # directory is located at the same level as the HTML output directory, then
 # MATHJAX_RELPATH should be ../mathjax. The default value points to
 # the MathJax Content Delivery Network so you can quickly see the result without
 # installing MathJax.
 # However, it is strongly recommended to install a local
 # copy of MathJax from http://www.mathjax.org before deployment.
 
 MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
 
 # The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
 # names that should be enabled during MathJax rendering.
 
 MATHJAX_EXTENSIONS     =
 
 # When the SEARCHENGINE tag is enabled doxygen will generate a search box
 # for the HTML output. The underlying search engine uses javascript
 # and DHTML and should work on any modern browser. Note that when using
 # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
 # (GENERATE_DOCSET) there is already a search function so this one should
 # typically be disabled. For large projects the javascript based search engine
 # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
 
 SEARCHENGINE           = NO
 
 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
 # implemented using a PHP enabled web server instead of at the web client
 # using Javascript. Doxygen will generate the search PHP script and index
 # file to put on the web server. The advantage of the server
 # based approach is that it scales better to large projects and allows
 # full text search. The disadvantages are that it is more difficult to setup
 # and does not have live searching capabilities.
 
 SERVER_BASED_SEARCH    = NO
 
 #---------------------------------------------------------------------------
 # configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
 
 # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
 # generate Latex output.
 
 GENERATE_LATEX         = YES
 
 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `latex' will be used as the default path.
 
 LATEX_OUTPUT           = latex
 
 # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
 # invoked. If left blank `latex' will be used as the default command name.
 # Note that when enabling USE_PDFLATEX this option is only used for
 # generating bitmaps for formulas in the HTML output, but not in the
 # Makefile that is written to the output directory.
 
 LATEX_CMD_NAME         = latex
 
 # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
 # generate index for LaTeX. If left blank `makeindex' will be used as the
 # default command name.
 
 MAKEINDEX_CMD_NAME     = makeindex
 
 # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
 # LaTeX documents. This may be useful for small projects and may help to
 # save some trees in general.
 
 COMPACT_LATEX          = NO
 
 # The PAPER_TYPE tag can be used to set the paper type that is used
 # by the printer. Possible values are: a4, letter, legal and
 # executive. If left blank a4wide will be used.
 
 PAPER_TYPE             = a4wide
 
 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
 # packages that should be included in the LaTeX output.
 
 EXTRA_PACKAGES         = amsmath \
                          amssymb
 
 # The LATEX_HEADER tag can be used to specify a personal LaTeX header for
 # the generated latex document. The header should contain everything until
 # the first chapter. If it is left blank doxygen will generate a
 # standard header. Notice: only use this tag if you know what you are doing!
 
 LATEX_HEADER           =
 
 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
 # the generated latex document. The footer should contain everything after
 # the last chapter. If it is left blank doxygen will generate a
 # standard footer. Notice: only use this tag if you know what you are doing!
 
 LATEX_FOOTER           =
 
 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
 # is prepared for conversion to pdf (using ps2pdf). The pdf file will
 # contain links (just like the HTML output) instead of page references
 # This makes the output suitable for online browsing using a pdf viewer.
 
 PDF_HYPERLINKS         = NO
 
 # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
 # plain latex in the generated Makefile. Set this option to YES to get a
 # higher quality PDF documentation.
 
 USE_PDFLATEX           = YES
 
 # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
 # command to the generated LaTeX files. This will instruct LaTeX to keep
 # running if errors occur, instead of asking the user for help.
 # This option is also used when generating formulas in HTML.
 
 LATEX_BATCHMODE        = YES
 
 # If LATEX_HIDE_INDICES is set to YES then doxygen will not
 # include the index chapters (such as File Index, Compound Index, etc.)
 # in the output.
 
 LATEX_HIDE_INDICES     = NO
 
 # If LATEX_SOURCE_CODE is set to YES then doxygen will include
 # source code with syntax highlighting in the LaTeX output.
 # Note that which sources are shown also depends on other settings
 # such as SOURCE_BROWSER.
 
 LATEX_SOURCE_CODE      = NO
 
 # The LATEX_BIB_STYLE tag can be used to specify the style to use for the
 # bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
 # http://en.wikipedia.org/wiki/BibTeX for more info.
 
 LATEX_BIB_STYLE        = plain
 
 #---------------------------------------------------------------------------
 # configuration options related to the RTF output
 #---------------------------------------------------------------------------
 
 # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
 # The RTF output is optimized for Word 97 and may not look very pretty with
 # other RTF readers or editors.
 
 GENERATE_RTF           = NO
 
 # The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `rtf' will be used as the default path.
 
 RTF_OUTPUT             = rtf
 
 # If the COMPACT_RTF tag is set to YES Doxygen generates more compact
 # RTF documents. This may be useful for small projects and may help to
 # save some trees in general.
 
 COMPACT_RTF            = NO
 
 # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
 # will contain hyperlink fields. The RTF file will
 # contain links (just like the HTML output) instead of page references.
 # This makes the output suitable for online browsing using WORD or other
 # programs which support those fields.
 # Note: wordpad (write) and others do not support links.
 
 RTF_HYPERLINKS         = NO
 
 # Load style sheet definitions from file. Syntax is similar to doxygen's
 # config file, i.e. a series of assignments. You only have to provide
 # replacements, missing definitions are set to their default value.
 
 RTF_STYLESHEET_FILE    =
 
 # Set optional variables used in the generation of an rtf document.
 # Syntax is similar to doxygen's config file.
 
 RTF_EXTENSIONS_FILE    =
 
 #---------------------------------------------------------------------------
 # configuration options related to the man page output
 #---------------------------------------------------------------------------
 
 # If the GENERATE_MAN tag is set to YES (the default) Doxygen will
 # generate man pages
 
 GENERATE_MAN           = NO
 
 # The MAN_OUTPUT tag is used to specify where the man pages will be put.
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `man' will be used as the default path.
 
 MAN_OUTPUT             = man
 
 # The MAN_EXTENSION tag determines the extension that is added to
 # the generated man pages (default is the subroutine's section .3)
 
 MAN_EXTENSION          = .3
 
 # If the MAN_LINKS tag is set to YES and Doxygen generates man output,
 # then it will generate one additional man file for each entity
 # documented in the real man page(s). These additional files
 # only source the real man page, but without them the man command
 # would be unable to find the correct page. The default is NO.
 
 MAN_LINKS              = NO
 
 #---------------------------------------------------------------------------
 # configuration options related to the XML output
 #---------------------------------------------------------------------------
 
 # If the GENERATE_XML tag is set to YES Doxygen will
 # generate an XML file that captures the structure of
 # the code including all documentation.
 
 GENERATE_XML           = NO
 
 # The XML_OUTPUT tag is used to specify where the XML pages will be put.
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `xml' will be used as the default path.
 
 XML_OUTPUT             = xml
 
 # The XML_SCHEMA tag can be used to specify an XML schema,
 # which can be used by a validating XML parser to check the
 # syntax of the XML files.
 
 XML_SCHEMA             =
 
 # The XML_DTD tag can be used to specify an XML DTD,
 # which can be used by a validating XML parser to check the
 # syntax of the XML files.
 
 XML_DTD                =
 
 # If the XML_PROGRAMLISTING tag is set to YES Doxygen will
 # dump the program listings (including syntax highlighting
 # and cross-referencing information) to the XML output. Note that
 # enabling this will significantly increase the size of the XML output.
 
 XML_PROGRAMLISTING     = YES
 
 #---------------------------------------------------------------------------
 # configuration options for the AutoGen Definitions output
 #---------------------------------------------------------------------------
 
 # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
 # generate an AutoGen Definitions (see autogen.sf.net) file
 # that captures the structure of the code including all
 # documentation. Note that this feature is still experimental
 # and incomplete at the moment.
 
 GENERATE_AUTOGEN_DEF   = NO
 
 #---------------------------------------------------------------------------
 # configuration options related to the Perl module output
 #---------------------------------------------------------------------------
 
 # If the GENERATE_PERLMOD tag is set to YES Doxygen will
 # generate a Perl module file that captures the structure of
 # the code including all documentation. Note that this
 # feature is still experimental and incomplete at the
 # moment.
 
 GENERATE_PERLMOD       = NO
 
 # If the PERLMOD_LATEX tag is set to YES Doxygen will generate
 # the necessary Makefile rules, Perl scripts and LaTeX code to be able
 # to generate PDF and DVI output from the Perl module output.
 
 PERLMOD_LATEX          = NO
 
 # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
 # nicely formatted so it can be parsed by a human reader.
 # This is useful
 # if you want to understand what is going on.
 # On the other hand, if this
 # tag is set to NO the size of the Perl module output will be much smaller
 # and Perl will parse it just the same.
 
 PERLMOD_PRETTY         = YES
 
 # The names of the make variables in the generated doxyrules.make file
 # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
 # This is useful so different doxyrules.make files included by the same
 # Makefile don't overwrite each other's variables.
 
 PERLMOD_MAKEVAR_PREFIX =
 
 #---------------------------------------------------------------------------
 # Configuration options related to the preprocessor
 #---------------------------------------------------------------------------
 
 # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
 # evaluate all C-preprocessor directives found in the sources and include
 # files.
 
 ENABLE_PREPROCESSING   = YES
 
 # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
 # names in the source code. If set to NO (the default) only conditional
 # compilation will be performed. Macro expansion can be done in a controlled
 # way by setting EXPAND_ONLY_PREDEF to YES.
 
 MACRO_EXPANSION        = NO
 
 # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
 # then the macro expansion is limited to the macros specified with the
 # PREDEFINED and EXPAND_AS_DEFINED tags.
 
 EXPAND_ONLY_PREDEF     = NO
 
 # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
 # pointed to by INCLUDE_PATH will be searched when a #include is found.
 
 SEARCH_INCLUDES        = YES
 
 # The INCLUDE_PATH tag can be used to specify one or more directories that
 # contain include files that are not input files but should be processed by
 # the preprocessor.
 
 INCLUDE_PATH           =
 
 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
 # patterns (like *.h and *.hpp) to filter out the header-files in the
 # directories. If left blank, the patterns specified with FILE_PATTERNS will
 # be used.
 
 INCLUDE_FILE_PATTERNS  =
 
 # The PREDEFINED tag can be used to specify one or more macro names that
 # are defined before the preprocessor is started (similar to the -D option of
 # gcc). The argument of the tag is a list of macros of the form: name
 # or name=definition (no spaces). If the definition and the = are
 # omitted =1 is assumed. To prevent a macro definition from being
 # undefined via #undef or recursively expanded use the := operator
 # instead of the = operator.
 
 PREDEFINED             =
 
 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
 # this tag can be used to specify a list of macro names that should be expanded.
 # The macro definition that is found in the sources will be used.
 # Use the PREDEFINED tag if you want to use a different macro definition that
 # overrules the definition found in the source code.
 
 EXPAND_AS_DEFINED      =
 
 # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
 # doxygen's preprocessor will remove all references to function-like macros
 # that are alone on a line, have an all uppercase name, and do not end with a
 # semicolon, because these will confuse the parser if not removed.
 
 SKIP_FUNCTION_MACROS   = YES
 
 #---------------------------------------------------------------------------
 # Configuration::additions related to external references
 #---------------------------------------------------------------------------
 
 # The TAGFILES option can be used to specify one or more tagfiles. For each
 # tag file the location of the external documentation should be added. The
 # format of a tag file without this location is as follows:
 #
 # TAGFILES = file1 file2 ...
 # Adding location for the tag files is done as follows:
 #
 # TAGFILES = file1=loc1 "file2 = loc2" ...
 # where "loc1" and "loc2" can be relative or absolute paths
 # or URLs. Note that each tag file must have a unique name (where the name does
 # NOT include the path). If a tag file is not located in the directory in which
 # doxygen is run, you must also specify the path to the tagfile here.
 
 TAGFILES               =
 
 # When a file name is specified after GENERATE_TAGFILE, doxygen will create
 # a tag file that is based on the input files it reads.
 
 GENERATE_TAGFILE       =
 
 # If the ALLEXTERNALS tag is set to YES all external classes will be listed
 # in the class index. If set to NO only the inherited external classes
 # will be listed.
 
 ALLEXTERNALS           = NO
 
 # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
 # in the modules index. If set to NO, only the current project's groups will
 # be listed.
 
 EXTERNAL_GROUPS        = YES
 
 # The PERL_PATH should be the absolute path and name of the perl script
 # interpreter (i.e. the result of `which perl').
 
 PERL_PATH              = /usr/bin/perl
 
 #---------------------------------------------------------------------------
 # Configuration options related to the dot tool
 #---------------------------------------------------------------------------
 
 # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
 # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
 # or super classes. Setting the tag to NO turns the diagrams off. Note that
 # this option also works with HAVE_DOT disabled, but it is recommended to
 # install and use dot, since it yields more powerful graphs.
 
 CLASS_DIAGRAMS         = YES
 
 # You can define message sequence charts within doxygen comments using the \msc
 # command. Doxygen will then run the mscgen tool (see
 # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
 # documentation. The MSCGEN_PATH tag allows you to specify the directory where
 # the mscgen tool resides. If left empty the tool is assumed to be found in the
 # default search path.
 
 MSCGEN_PATH            =
 
 # If set to YES, the inheritance and collaboration graphs will hide
 # inheritance and usage relations if the target is undocumented
 # or is not a class.
 
 HIDE_UNDOC_RELATIONS   = YES
 
 # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
 # available from the path. This tool is part of Graphviz, a graph visualization
 # toolkit from AT&T and Lucent Bell Labs. The other options in this section
 # have no effect if this option is set to NO (the default)
 
 HAVE_DOT               = NO
 
 # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
 # allowed to run in parallel. When set to 0 (the default) doxygen will
 # base this on the number of processors available in the system. You can set it
 # explicitly to a value larger than 0 to get control over the balance
 # between CPU load and processing speed.
 
 DOT_NUM_THREADS        = 0
 
 # By default doxygen will use the Helvetica font for all dot files that
 # doxygen generates. When you want a differently looking font you can specify
 # the font name using DOT_FONTNAME. You need to make sure dot is able to find
 # the font, which can be done by putting it in a standard location or by setting
 # the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
 # directory containing the font.
 
 DOT_FONTNAME           = FreeSans.ttf
 
 # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
 # The default size is 10pt.
 
 DOT_FONTSIZE           = 10
 
 # By default doxygen will tell dot to use the Helvetica font.
 # If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
 # set the path where dot can find it.
 
 DOT_FONTPATH           =
 
 # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
 # will generate a graph for each documented class showing the direct and
 # indirect inheritance relations. Setting this tag to YES will force the
 # CLASS_DIAGRAMS tag to NO.
 
 CLASS_GRAPH            = YES
 
 # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
 # will generate a graph for each documented class showing the direct and
 # indirect implementation dependencies (inheritance, containment, and
 # class references variables) of the class with other documented classes.
 
 COLLABORATION_GRAPH    = YES
 
 # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
 # will generate a graph for groups, showing the direct groups dependencies
 
 GROUP_GRAPHS           = YES
 
 # If the UML_LOOK tag is set to YES doxygen will generate inheritance and
 # collaboration diagrams in a style similar to the OMG's Unified Modeling
 # Language.
 
 UML_LOOK               = NO
 
 # If the UML_LOOK tag is enabled, the fields and methods are shown inside
 # the class node. If there are many fields or methods and many nodes the
 # graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
 # threshold limits the number of items for each type to make the size more
 # managable. Set this to 0 for no limit. Note that the threshold may be
 # exceeded by 50% before the limit is enforced.
 
 UML_LIMIT_NUM_FIELDS   = 10
 
 # If set to YES, the inheritance and collaboration graphs will show the
 # relations between templates and their instances.
 
 TEMPLATE_RELATIONS     = NO
 
 # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
 # tags are set to YES then doxygen will generate a graph for each documented
 # file showing the direct and indirect include dependencies of the file with
 # other documented files.
 
 INCLUDE_GRAPH          = YES
 
 # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
 # HAVE_DOT tags are set to YES then doxygen will generate a graph for each
 # documented header file showing the documented files that directly or
 # indirectly include this file.
 
 INCLUDED_BY_GRAPH      = YES
 
 # If the CALL_GRAPH and HAVE_DOT options are set to YES then
 # doxygen will generate a call dependency graph for every global function
 # or class method. Note that enabling this option will significantly increase
 # the time of a run. So in most cases it will be better to enable call graphs
 # for selected functions only using the \callgraph command.
 
 CALL_GRAPH             = NO
 
 # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
 # doxygen will generate a caller dependency graph for every global function
 # or class method. Note that enabling this option will significantly increase
 # the time of a run. So in most cases it will be better to enable caller
 # graphs for selected functions only using the \callergraph command.
 
 CALLER_GRAPH           = NO
 
 # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
 # will generate a graphical hierarchy of all classes instead of a textual one.
 
 GRAPHICAL_HIERARCHY    = YES
 
 # If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
 # then doxygen will show the dependencies a directory has on other directories
 # in a graphical way. The dependency relations are determined by the #include
 # relations between the files in the directories.
 
 DIRECTORY_GRAPH        = YES
 
 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
 # generated by dot. Possible values are svg, png, jpg, or gif.
 # If left blank png will be used. If you choose svg you need to set
 # HTML_FILE_EXTENSION to xhtml in order to make the SVG files
 # visible in IE 9+ (other browsers do not have this requirement).
 
 DOT_IMAGE_FORMAT       = png
 
 # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
 # enable generation of interactive SVG images that allow zooming and panning.
 # Note that this requires a modern browser other than Internet Explorer.
 # Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
 # need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
 # visible. Older versions of IE do not have SVG support.
 
 INTERACTIVE_SVG        = NO
 
 # The tag DOT_PATH can be used to specify the path where the dot tool can be
 # found. If left blank, it is assumed the dot tool can be found in the path.
 
 DOT_PATH               =
 
 # The DOTFILE_DIRS tag can be used to specify one or more directories that
 # contain dot files that are included in the documentation (see the
 # \dotfile command).
 
 DOTFILE_DIRS           =
 
 # The MSCFILE_DIRS tag can be used to specify one or more directories that
 # contain msc files that are included in the documentation (see the
 # \mscfile command).
 
 MSCFILE_DIRS           =
 
 # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
 # nodes that will be shown in the graph. If the number of nodes in a graph
 # becomes larger than this value, doxygen will truncate the graph, which is
 # visualized by representing a node as a red box. Note that doxygen if the
 # number of direct children of the root node in a graph is already larger than
 # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
 # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
 
 DOT_GRAPH_MAX_NODES    = 50
 
 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
 # graphs generated by dot. A depth value of 3 means that only nodes reachable
 # from the root by following a path via at most 3 edges will be shown. Nodes
 # that lay further from the root node will be omitted. Note that setting this
 # option to 1 or 2 may greatly reduce the computation time needed for large
 # code bases. Also note that the size of a graph can be further restricted by
 # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
 
 MAX_DOT_GRAPH_DEPTH    = 0
 
 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
 # background. This is disabled by default, because dot on Windows does not
 # seem to support this out of the box. Warning: Depending on the platform used,
 # enabling this option may lead to badly anti-aliased labels on the edges of
 # a graph (i.e. they become hard to read).
 
 DOT_TRANSPARENT        = NO
 
 # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
 # files in one run (i.e. multiple -o and -T options on the command line). This
 # makes dot run faster, but since only newer versions of dot (>1.8.10)
 # support this, this feature is disabled by default.
 
 DOT_MULTI_TARGETS      = NO
 
 # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
 # generate a legend page explaining the meaning of the various boxes and
 # arrows in the dot generated graphs.
 
 GENERATE_LEGEND        = YES
 
 # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
 # remove the intermediate dot files that are used to generate
 # the various graphs.
 
 DOT_CLEANUP            = YES
diff --git a/Makefile.am b/Makefile.am
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,39 +1,39 @@
 ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = src pyext data include bin doc test
+SUBDIRS = src pyext data include bin analyses doc test
 
 EXTRA_DIST = GUIDELINES
 
 DISTCHECK_CONFIGURE_FLAGS = --enable-debug --with-yoda=$(YODAPATH) --with-hepmc=$(HEPMCPATH) --with-fastjet=$(FASTJETPATH)
 
 pkgconfigdir = $(libdir)/pkgconfig
 dist_pkgconfig_DATA = rivet.pc
 
 doc:
 	cd doc && $(MAKE) doc
 
 .PHONY : doc dox pyclean
 
 clean-local:
 	@rm -rf a.out
 
 
 ## Doxygen
 if WITH_DOXYGEN
 dox:
 	@echo "Running Doxygen..."
-	@$(DOXYGEN) $(top_srcdir)/Doxyfile || true
+	@$(DOXYGEN) $(top_builddir)/Doxyfile || true
 install-dox:
 	$(install_sh_DATA) doxy/html/* $(DESTDIR)$(pkgdatadir)/doc/html
 mostlyclean-local:
 	@rm -rf $(top_builddir)/doxy
 uninstall-local:
 	@rm -rf $(DESTDIR)$(pkgdatadir)/doc; \
 	test ! -d $(DESTDIR)$(pkgdatadir) || rmdir $(DESTDIR)$(pkgdatadir) || true
 endif
 
 
 ## Upload to HepForge
-RSH=rsync
-DEST=login.hepforge.org:rivet/downloads/
+RSH = rsync
+DEST = login.hepforge.org:rivet/downloads/
 upload: dist
 	$(RSH) $(DIST_ARCHIVES) $(DEST)
diff --git a/src/Analyses/Makefile.am b/analyses/Makefile.am
rename from src/Analyses/Makefile.am
rename to analyses/Makefile.am
--- a/src/Analyses/Makefile.am
+++ b/analyses/Makefile.am
@@ -1,626 +1,51 @@
 AUTOMAKE_OPTIONS = -Wno-portability
 
-## Flags for building all plugins
-AM_LDFLAGS = $(LDFLAGS) -module -avoid-version -L$(FASTJETLIBPATH)
-LIBS = $(FASTJETCONFIGLIBADD)
-lib_LTLIBRARIES =
-
-BUILT_SOURCES =
-DISTCLEANFILES =
-
-EXTRA_DIST = cat_with_lines
-
-noinst_LTLIBRARIES = libRivetAnalysisTools.la
-libRivetAnalysisTools_la_SOURCES = \
-    MC_ParticleAnalysis.cc \
-    MC_JetAnalysis.cc \
-    MC_JetSplittings.cc
-
-%__all.cc :
-	$(srcdir)/cat_with_lines $^ > $@
-
 if ENABLE_ANALYSES
 
-lib_LTLIBRARIES += RivetALICEAnalyses.la
+PLUGIN_DIRS = $(wildcard plugin*)
+PLUGIN_NAMES = $(subst plugin,,$(PLUGIN_DIRS))
+PLUGIN_LIBS = $(patsubst plugin%,Rivet%Analyses.so,$(PLUGIN_DIRS))
+PLUGIN_DATAFILES = $(wildcard plugin*/*.info plugin*/*.plot plugin*/*.yoda)
 
-nodist_RivetALICEAnalyses_la_SOURCES = ALICE__all.cc
-BUILT_SOURCES += ALICE__all.cc
-DISTCLEANFILES += ALICE__all.cc
+CLEANFILES = $(PLUGIN_LIBS)
+EXTRA_DIST = $(PLUGIN_DIRS)
 
-ALICE__all.cc : $(ALICE_ALL)
+%.so:
+	@+echo && RIVET_BUILDPLUGIN_BEFORE_INSTALL=1 bash $(top_srcdir)/bin/rivet-buildplugin -j2 $@ $^
 
-EXTRA_DIST += $(ALICE_ALL)
+RivetALICEAnalyses.so: $(wildcard pluginALICE/*.cc)
+RivetATLASAnalyses.so: $(wildcard pluginATLAS/*.cc)
+RivetCDFAnalyses.so: $(wildcard pluginCDF/*.cc)
+RivetCMSAnalyses.so: $(wildcard pluginCMS/*.cc)
+RivetD0Analyses.so: $(wildcard pluginD0/*.cc)
+RivetHERAAnalyses.so: $(wildcard pluginHERA/*.cc)
+RivetLEPAnalyses.so: $(wildcard pluginLEP/*.cc)
+RivetLHCbAnalyses.so: $(wildcard pluginLHCb/*.cc)
+RivetLHCfAnalyses.so: $(wildcard pluginLHCf/*.cc)
+RivetMCAnalyses.so: $(wildcard pluginMC/*.cc)
+RivetMiscAnalyses.so: $(wildcard pluginMisc/*.cc)
+RivetPetraAnalyses.so: $(wildcard pluginPetra/*.cc)
+RivetRHICAnalyses.so: $(wildcard pluginRHIC/*.cc)
+RivetSPSAnalyses.so: $(wildcard pluginSPS/*.cc)
+RivetTOTEMAnalyses.so: $(wildcard pluginTOTEM/*.cc)
 
-ALICE_ALL = \
-    ALICE_2010_I880049.cc \
-    ALICE_2010_S8624100.cc \
-    ALICE_2010_S8625980.cc \
-    ALICE_2010_S8706239.cc \
-    ALICE_2011_S8909580.cc \
-    ALICE_2011_S8945144.cc \
-    ALICE_2012_I1116147.cc \
-    ALICE_2012_I1127497.cc \
-    ALICE_2012_I1181770.cc \
-    ALICE_2014_I1300380.cc \
-    ALICE_2015_I1357424.cc
+all-local: $(PLUGIN_LIBS) $(PLUGIN_DATAFILES)
+	mkdir -p $(builddir)/data
+	@for i in $(PLUGIN_DATAFILES); do $(LN_S) -f ../$$i $(builddir)/data; done
 
+clean-local:
+	rm -rf data
 
-lib_LTLIBRARIES += RivetATLASAnalyses.la
+install-exec-local: $(PLUGIN_LIBS)
+	$(INSTALL) $^ $(DESTDIR)$(libdir)
 
-nodist_RivetATLASAnalyses_la_SOURCES = ATLAS_1__all.cc ATLAS_2__all.cc
-BUILT_SOURCES += ATLAS_1__all.cc ATLAS_2__all.cc
-DISTCLEANFILES += ATLAS_1__all.cc ATLAS_2__all.cc
+install-data-local: $(PLUGIN_DATAFILES)
+	@echo "Installing analysis data files..."
+	@$(install_sh_DATA) $^ $(DESTDIR)$(pkgdatadir)
 
-ATLAS_1__all.cc : $(ATLAS_ALL_1)
-ATLAS_2__all.cc : $(ATLAS_ALL_2)
-
-EXTRA_DIST += $(ATLAS_ALL_1) $(ATLAS_ALL_2)
-
-ATLAS_ALL_1 = \
-    ATLAS_2010_S8591806.cc \
-    ATLAS_2010_S8817804.cc \
-    ATLAS_2010_S8894728.cc \
-    ATLAS_2010_S8914702.cc \
-    ATLAS_2010_S8918562.cc \
-    ATLAS_2010_S8919674.cc \
-    ATLAS_2011_S8924791.cc \
-    ATLAS_2011_S8971293.cc \
-    ATLAS_2011_S8994773.cc \
-    ATLAS_2011_S8983313.cc \
-    ATLAS_2011_S9002537.cc \
-    ATLAS_2011_S9120807.cc \
-    ATLAS_2011_S9126244.cc \
-    ATLAS_2011_S9128077.cc \
-    ATLAS_2011_S9131140.cc \
-    ATLAS_2011_S9212183.cc \
-    ATLAS_2011_S9225137.cc \
-    ATLAS_2011_S9019561.cc \
-    ATLAS_2011_I894867.cc \
-    ATLAS_2011_I919017.cc \
-    ATLAS_2011_I921594.cc \
-    ATLAS_2011_I925932.cc \
-    ATLAS_2011_I926145.cc \
-    ATLAS_2011_I929691.cc \
-    ATLAS_2011_I930220.cc \
-    ATLAS_2011_I944826.cc \
-    ATLAS_2011_I945498.cc \
-    ATLAS_2011_I954993.cc \
-    ATLAS_2011_I928289_W.cc \
-    ATLAS_2011_I928289_Z.cc \
-    ATLAS_2011_S9035664.cc \
-    ATLAS_2012_I943401.cc \
-    ATLAS_2012_I1082009.cc \
-    ATLAS_2012_I1082936.cc \
-    ATLAS_2012_I1083318.cc \
-    ATLAS_2012_I1084540.cc \
-    ATLAS_2012_I1091481.cc \
-    ATLAS_2012_I1093734.cc \
-    ATLAS_2012_I1093738.cc \
-    ATLAS_2012_I1094564.cc \
-    ATLAS_2012_I1094568.cc \
-    ATLAS_2012_I1112263.cc \
-    ATLAS_2012_I1117704.cc \
-    ATLAS_2012_I1118269.cc \
-    ATLAS_2012_I1119557.cc \
-    ATLAS_2012_I1124167.cc \
-    ATLAS_2012_I1125575.cc \
-    ATLAS_2012_I1125961.cc \
-    ATLAS_2012_I1183818.cc \
-    ATLAS_2012_I1188891.cc \
-    ATLAS_2012_I1199269.cc \
-    ATLAS_2012_I1203852.cc \
-    ATLAS_2012_I1204447.cc \
-    ATLAS_2012_I1204784.cc \
-    ATLAS_2013_I1190187.cc \
-    ATLAS_2013_I1217867.cc \
-    ATLAS_2013_I1219109.cc \
-    ATLAS_2013_I1230812.cc \
-    ATLAS_2013_I1243871.cc \
-    ATLAS_2013_I1263495.cc \
-    ATLAS_2014_I1268975.cc \
-    ATLAS_2014_I1279489.cc \
-    ATLAS_2014_I1282441.cc \
-    ATLAS_2014_I1298811.cc \
-    ATLAS_2014_I1304688.cc \
-    ATLAS_2014_I1307756.cc \
-    ATLAS_2014_I1306294.cc \
-    ATLAS_2014_I1315949.cc \
-    ATLAS_2014_I1325553.cc \
-    ATLAS_2014_I1300647.cc \
-    ATLAS_2014_I1288706.cc \
-    ATLAS_2014_I1307243.cc \
-    ATLAS_2014_I1312627.cc
-
-ATLAS_ALL_2 = \
-    ATLAS_2013_I1217863_W.cc \
-    ATLAS_2013_I1217863_Z.cc \
-    ATLAS_2014_I1306615.cc \
-    ATLAS_2013_I1216670.cc \
-    ATLAS_2013_I1244522.cc \
-    ATLAS_2014_I1282447.cc \
-    ATLAS_2014_I1298023.cc \
-    ATLAS_2014_I1319490.cc \
-    ATLAS_2014_I1326641.cc \
-    ATLAS_2014_I1327229.cc \
-    ATLAS_2015_I1345452.cc \
-    ATLAS_2015_I1351916.cc \
-    ATLAS_2015_I1364361.cc \
-    ATLAS_2015_I1376945.cc \
-    ATLAS_2015_I1387176.cc \
-    ATLAS_2015_I1390114.cc \
-    ATLAS_2015_I1393758.cc \
-    ATLAS_2015_I1394679.cc \
-    ATLAS_2015_I1397635.cc \
-    ATLAS_2015_I1397637.cc \
-    ATLAS_2015_I1404878.cc \
-    ATLAS_2015_I1408516.cc \
-    ATLAS_2016_I1419070.cc \
-    ATLAS_2016_I1419652.cc \
-    ATLAS_2016_I1424838.cc \
-    ATLAS_2016_I1426695.cc \
-    ATLAS_2016_I1444991.cc \
-    ATLAS_2016_I1452559.cc \
-    ATLAS_2016_I1457605.cc \
-    ATLAS_2016_I1458270.cc \
-    ATLAS_2016_I1468168.cc \
-    ATLAS_2016_I1467230.cc \
-    ATLAS_2016_I1467454.cc \
-    ATLAS_2016_I1468167.cc \
-    ATLAS_2016_I1479760.cc
-
-# PRELIMINARY / OBSOLETE
-ATLAS_ALL_2 += \
-    ATLAS_2012_CONF_2012_001.cc \
-    ATLAS_2010_CONF_2010_049.cc \
-    ATLAS_2011_CONF_2011_090.cc \
-    ATLAS_2011_CONF_2011_098.cc \
-    ATLAS_2012_CONF_2012_103.cc \
-    ATLAS_2012_CONF_2012_104.cc \
-    ATLAS_2012_CONF_2012_105.cc \
-    ATLAS_2012_CONF_2012_109.cc \
-    ATLAS_2012_CONF_2012_153.cc \
-    ATLAS_2015_CONF_2015_041.cc \
-    ATLAS_2016_CONF_2016_037.cc \
-    ATLAS_2016_CONF_2016_054.cc \
-    ATLAS_2016_CONF_2016_078.cc \
-    ATLAS_2016_CONF_2016_094.cc \
-    ATLAS_2011_S9041966.cc \
-    ATLAS_2011_S9212353.cc \
-    ATLAS_2012_I946427.cc
-# UNVALIDATED
-ATLAS_ALL_2 += \
-    ATLAS_2011_S9108483.cc \
-    ATLAS_2012_I1095236.cc \
-    ATLAS_2012_I1126136.cc \
-    ATLAS_2012_I1180197.cc \
-    ATLAS_2012_I1186556.cc \
-    ATLAS_2012_I1190891.cc
-
-
-lib_LTLIBRARIES += RivetCMSAnalyses.la
-
-nodist_RivetCMSAnalyses_la_SOURCES = CMS__all.cc
-BUILT_SOURCES += CMS__all.cc
-DISTCLEANFILES += CMS__all.cc
-
-CMS__all.cc : $(CMS_ALL)
-
-EXTRA_DIST += $(CMS_ALL)
-
-
-
-CMS_ALL = \
-    CMS_2010_S8547297.cc \
-    CMS_2010_S8656010.cc \
-    CMS_2011_S8884919.cc \
-    CMS_2011_S8941262.cc \
-    CMS_2011_S8950903.cc \
-    CMS_2011_S8957746.cc \
-    CMS_2011_S8968497.cc \
-    CMS_2011_S8973270.cc \
-    CMS_2011_S8978280.cc \
-    CMS_2011_S9086218.cc \
-    CMS_2011_S9088458.cc \
-    CMS_2011_S9120041.cc \
-    CMS_2011_S9215166.cc \
-    CMS_2012_I941555.cc  \
-    CMS_2011_I954992.cc  \
-    CMS_2012_I1087342.cc \
-    CMS_2012_I1090423.cc \
-    CMS_2012_I1102908.cc \
-    CMS_2012_I1107658.cc \
-    CMS_2012_I1184941.cc \
-    CMS_2012_I1193338.cc \
-    CMS_2013_I1122847.cc \
-    CMS_2013_I1208923.cc \
-    CMS_2013_I1209721.cc \
-    CMS_2013_I1218372.cc \
-    CMS_2013_I1223519.cc \
-    CMS_2013_I1224539_DIJET.cc \
-    CMS_2013_I1224539_WJET.cc \
-    CMS_2013_I1224539_ZJET.cc \
-    CMS_2013_I1256943.cc \
-    CMS_2013_I1258128.cc \
-    CMS_2013_I1261026.cc \
-    CMS_2013_I1265659.cc \
-    CMS_2013_I1272853.cc \
-    CMS_2013_I1273574.cc \
-    CMS_2012_I1298807.cc \
-    CMS_2014_I1298810.cc \
-    CMS_2014_I1303894.cc \
-    CMS_2014_I1305624.cc \
-    CMS_2015_I1310737.cc \
-    CMS_2015_I1327224.cc \
-    CMS_2015_I1346843.cc \
-    CMS_2015_I1356998.cc \
-    CMS_2015_I1370682.cc \
-    CMS_2015_I1384119.cc \
-    CMS_2015_I1385107.cc \
-    CMS_2015_I1397174.cc \
-    CMS_2016_I1459051.cc \
-    CMS_2016_I1473674.cc \
-    CMSTOTEM_2014_I1294140.cc \
-    TOTEM_2014_I1328627.cc
-# PRELIMINARY
-CMS_ALL += \
-    CMS_2010_PAS_QCD_10_024.cc \
-    CMS_2012_PAS_QCD_11_010.cc \
-    CMS_2012_PAS_FSQ_12_020.cc \
-    CMS_2016_PAS_SUS_16_14.cc
-
-
-lib_LTLIBRARIES += RivetLHCbAnalyses.la
-
-nodist_RivetLHCbAnalyses_la_SOURCES = LHCb__all.cc
-BUILT_SOURCES += LHCb__all.cc
-DISTCLEANFILES += LHCb__all.cc
-
-LHCb__all.cc : $(LHCb_ALL)
-
-EXTRA_DIST += $(LHCb_ALL)
-
-LHCb_ALL = \
-    LHCB_2010_I867355.cc \
-    LHCB_2010_S8758301.cc \
-    LHCB_2011_I917009.cc \
-    LHCB_2011_I919315.cc \
-    LHCB_2012_I1119400.cc \
-    LHCB_2012_I1208102.cc \
-    LHCB_2013_I1218996.cc \
-    LHCB_2013_I1208105.cc \
-    LHCB_2014_I1262703.cc \
-    LHCB_2014_I1281685.cc \
-    LHCB_2015_I1333223.cc
-
-
-lib_LTLIBRARIES += RivetLHCfAnalyses.la
-RivetLHCfAnalyses_la_SOURCES = \
-    LHCF_2012_I1115479.cc
-
-
-lib_LTLIBRARIES += RivetTOTEMAnalyses.la
-RivetTOTEMAnalyses_la_SOURCES = \
-    TOTEM_2012_I1115294.cc \
-    TOTEM_2012_I1220862.cc
-
-
-lib_LTLIBRARIES += RivetCDFAnalyses.la
-
-nodist_RivetCDFAnalyses_la_SOURCES = CDF__all.cc
-BUILT_SOURCES += CDF__all.cc
-DISTCLEANFILES += CDF__all.cc
-
-CDF__all.cc : $(CDF_ALL)
-
-EXTRA_DIST += $(CDF_ALL)
-
-
-
-CDF_ALL = \
-    CDF_1988_S1865951.cc \
-    CDF_1990_S2089246.cc \
-    CDF_1994_S2952106.cc \
-    CDF_1996_S3418421.cc \
-    CDF_1998_S3618439.cc \
-    CDF_2000_S4155203.cc \
-    CDF_2000_S4266730.cc \
-    CDF_2001_S4517016.cc \
-    CDF_2001_S4751469.cc \
-    CDF_2002_S4796047.cc \
-    CDF_2004_S5839831.cc \
-    CDF_2005_S6080774.cc \
-    CDF_2005_S6217184.cc \
-    CDF_2006_S6450792.cc \
-    CDF_2006_S6653332.cc \
-    CDF_2007_S7057202.cc \
-    CDF_2008_S7540469.cc \
-    CDF_2008_S7541902.cc \
-    CDF_2008_S7782535.cc \
-    CDF_2008_S7828950.cc \
-    CDF_2008_S8093652.cc \
-    CDF_2008_S8095620.cc \
-    CDF_2009_S8233977.cc \
-    CDF_2009_I856131.cc \
-    CDF_2009_S8436959.cc \
-    CDF_2010_S8591881_DY.cc \
-    CDF_2010_S8591881_QCD.cc \
-    CDF_2012_I1124333.cc \
-    CDF_2015_1388868.cc
-# PRELIMINARY
-CDF_ALL += \
-    CDF_2009_NOTE_9936.cc \
-    CDF_2012_NOTE10874.cc
-# UNVALIDATED
-CDF_ALL += \
-    CDF_1993_S2742446.cc \
-    CDF_1996_S3108457.cc \
-    CDF_1996_S3349578.cc \
-    CDF_1997_S3541940.cc \
-    CDF_2001_S4563131.cc
-
-
-lib_LTLIBRARIES += RivetD0Analyses.la
-
-nodist_RivetD0Analyses_la_SOURCES = D0__all.cc
-BUILT_SOURCES += D0__all.cc
-DISTCLEANFILES += D0__all.cc
-
-D0__all.cc : $(D0_ALL)
-
-EXTRA_DIST += $(D0_ALL)
-
-
-
-D0_ALL = \
-    D0_1995_I398175.cc \
-    D0_2000_I499943.cc \
-    D0_2000_S4480767.cc \
-    D0_2001_S4674421.cc \
-    D0_2004_S5992206.cc \
-    D0_2006_S6438750.cc \
-    D0_2007_S7075677.cc \
-    D0_2008_S6879055.cc \
-    D0_2008_S7554427.cc \
-    D0_2008_S7662670.cc \
-    D0_2008_S7719523.cc \
-    D0_2008_S7837160.cc \
-    D0_2008_S7863608.cc \
-    D0_2009_S8202443.cc \
-    D0_2009_S8320160.cc \
-    D0_2009_S8349509.cc \
-    D0_2010_S8566488.cc \
-    D0_2010_S8570965.cc \
-    D0_2010_S8671338.cc \
-    D0_2010_S8821313.cc \
-    D0_2011_I895662.cc \
-    D0_2015_I1324946.cc \
-    D0_2000_I503361.cc
-# UNVALIDATED
-D0_ALL += \
-    D0_1996_S3214044.cc \
-    D0_1996_S3324664.cc
-
-
-lib_LTLIBRARIES += RivetHERAAnalyses.la
-
-nodist_RivetHERAAnalyses_la_SOURCES = HERA__all.cc
-BUILT_SOURCES += HERA__all.cc
-DISTCLEANFILES += HERA__all.cc
-
-HERA__all.cc : $(HERA_ALL)
-
-EXTRA_DIST += $(HERA_ALL)
-
-
-
-HERA_ALL = \
-    H1_1994_S2919893.cc \
-    H1_2000_S4129130.cc
-# UNVALIDATED
-HERA_ALL += \
-    H1_1995_S3167097.cc \
-    ZEUS_2001_S4815815.cc
-
-
-lib_LTLIBRARIES += RivetPetraAnalyses.la
-RivetPetraAnalyses_la_SOURCES = \
-    JADE_1998_S3612880.cc \
-    TASSO_1990_S2148048.cc
-
-lib_LTLIBRARIES += RivetLEPAnalyses.la
-
-nodist_RivetLEPAnalyses_la_SOURCES = LEP__all.cc
-BUILT_SOURCES += LEP__all.cc
-DISTCLEANFILES += LEP__all.cc
-
-LEP__all.cc : $(LEP_ALL)
-
-EXTRA_DIST += $(LEP_ALL)
-
-
-
-LEP_ALL = \
-    ALEPH_1991_S2435284.cc \
-    ALEPH_1995_I382179.cc \
-    ALEPH_1996_S3486095.cc \
-    ALEPH_1996_S3196992.cc \
-    ALEPH_1999_S4193598.cc \
-    ALEPH_2001_S4656318.cc \
-    ALEPH_2002_S4823664.cc \
-    ALEPH_2004_S5765862.cc \
-    DELPHI_1995_S3137023.cc \
-    DELPHI_1996_S3430090.cc \
-    DELPHI_1999_S3960137.cc \
-    DELPHI_2000_S4328825.cc \
-    DELPHI_2011_I890503.cc \
-    L3_1992_I336180.cc \
-    L3_2004_I652683.cc \
-    OPAL_1993_I342766.cc \
-    OPAL_1994_S2927284.cc \
-    OPAL_1995_S3198391.cc \
-    OPAL_1996_S3257789.cc \
-    OPAL_1997_S3396100.cc \
-    OPAL_1997_S3608263.cc \
-    OPAL_1998_S3702294.cc \
-    OPAL_1998_S3749908.cc \
-    OPAL_1998_S3780481.cc \
-    OPAL_2000_S4418603.cc \
-    OPAL_2001_S4553896.cc \
-    OPAL_2002_S5361494.cc \
-    OPAL_2003_I599181.cc \
-    OPAL_2004_S6132243.cc \
-    SLD_1996_S3398250.cc \
-    SLD_1999_S3743934.cc \
-    SLD_2002_S4869273.cc \
-    SLD_2004_S5693039.cc
-# UNVALIDATED
-LEP_ALL += \
-    OPAL_1993_S2692198.cc
-# OBSOLETE
-LEP_ALL += \
-    DELPHI_2002_069_CONF_603.cc
-
-
-lib_LTLIBRARIES += RivetRHICAnalyses.la
-
-nodist_RivetRHICAnalyses_la_SOURCES = RHIC__all.cc
-BUILT_SOURCES += RHIC__all.cc
-DISTCLEANFILES += RHIC__all.cc
-
-RHIC__all.cc : $(RHIC_ALL)
-
-EXTRA_DIST += $(RHIC_ALL)
-
-
-
-RHIC_ALL = \
-    STAR_2006_S6500200.cc \
-    STAR_2006_S6860818.cc \
-    STAR_2006_S6870392.cc
-# PRELIMINARY
-RHIC_ALL += \
-    STAR_2009_UE_HELEN.cc
-# UNVALIDATED
-RHIC_ALL += \
-    STAR_2008_S7869363.cc \
-    STAR_2008_S7993412.cc
-
-
-lib_LTLIBRARIES += RivetSPSAnalyses.la
-
-nodist_RivetSPSAnalyses_la_SOURCES = SPS__all.cc
-BUILT_SOURCES += SPS__all.cc
-DISTCLEANFILES += SPS__all.cc
-
-SPS__all.cc : $(SPS_ALL)
-
-EXTRA_DIST += $(SPS_ALL)
-
-
-
-SPS_ALL = \
-    UA1_1990_S2044935.cc \
-    UA5_1982_S875503.cc \
-    UA5_1986_S1583476.cc \
-    UA5_1987_S1640666.cc \
-    UA5_1988_S1867512.cc \
-    UA5_1989_S1926373.cc
-
-
-lib_LTLIBRARIES += RivetMiscAnalyses.la
-
-nodist_RivetMiscAnalyses_la_SOURCES = Misc__all.cc
-BUILT_SOURCES += Misc__all.cc
-DISTCLEANFILES += Misc__all.cc
-
-Misc__all.cc : $(Misc_ALL)
-
-EXTRA_DIST += $(Misc_ALL)
-
-
-
-Misc_ALL = \
-    E735_1998_S3905616.cc \
-    PDG_HADRON_MULTIPLICITIES.cc \
-    PDG_HADRON_MULTIPLICITIES_RATIOS.cc \
-    PDG_TAUS.cc \
-    JADE_OPAL_2000_S4300807.cc \
-    ARGUS_1993_S2653028.cc \
-    ARGUS_1993_S2669951.cc \
-    ARGUS_1993_S2789213.cc \
-    BABAR_2003_I593379.cc \
-    BABAR_2005_S6181155.cc \
-    BABAR_2007_S6895344.cc \
-    BABAR_2007_S7266081.cc \
-    BABAR_2013_I1116411.cc \
-    BABAR_2013_I1238276.cc \
-    BABAR_2015_I1334693.cc \
-    BELLE_2001_S4598261.cc \
-    BELLE_2008_I786560.cc \
-    BELLE_2011_I878990.cc \
-    BELLE_2013_I1216515.cc \
-    BELLE_2013_I1238273.cc \
-    BELLE_2015_I1397632.cc \
-    CLEO_2004_S5809304.cc
-# UNVALIDATED
-Misc_ALL += \
-    SFM_1984_S1178091.cc
-
-
-lib_LTLIBRARIES += RivetMCAnalyses.la
-
-nodist_RivetMCAnalyses_la_SOURCES = MC__all.cc
-BUILT_SOURCES += MC__all.cc
-DISTCLEANFILES += MC__all.cc
-
-MC__all.cc : $(MC_ALL)
-
-EXTRA_DIST += $(MC_ALL)
-
-
-
-MC_ALL = \
-    EXAMPLE.cc \
-    EXAMPLE_CUTS.cc \
-    EXAMPLE_SMEAR.cc \
-    MC_QCD_PARTONS.cc \
-    MC_Centrality.cc \
-    MC_DIPHOTON.cc \
-    MC_ELECTRONS.cc \
-    MC_GENERIC.cc \
-    MC_HINC.cc \
-    MC_HJETS.cc \
-    MC_HHJETS.cc \
-    MC_HKTSPLITTINGS.cc \
-    MC_IDENTIFIED.cc \
-    MC_JETS.cc \
-    MC_JETTAGS.cc \
-    MC_HFJETS.cc \
-    MC_LEADJETUE.cc \
-    MC_MET.cc \
-    MC_MUONS.cc \
-    MC_PDFS.cc \
-    MC_PHOTONINC.cc \
-    MC_PHOTONJETS.cc \
-    MC_PHOTONKTSPLITTINGS.cc \
-    MC_PHOTONS.cc \
-    MC_PRINTEVENT.cc \
-    MC_SUSY.cc \
-    MC_TTBAR.cc \
-    MC_VH2BB.cc \
-    MC_WINC.cc \
-    MC_WJETS.cc \
-    MC_WKTSPLITTINGS.cc \
-    MC_WPOL.cc \
-    MC_WWINC.cc \
-    MC_WWJETS.cc \
-    MC_WWKTSPLITTINGS.cc \
-    MC_XS.cc \
-    MC_ZINC.cc \
-    MC_ZJETS.cc \
-    MC_ZKTSPLITTINGS.cc \
-    MC_ZZINC.cc \
-    MC_ZZJETS.cc \
-    MC_ZZKTSPLITTINGS.cc
+uninstall-local:
+	cd $(DESTDIR)$(libdir) && rm -f $(PLUGIN_LIBS)
+	@echo "Uninstalling analysis data files..."
+	@cd $(DESTDIR)$(pkgdatadir) && for i in $(PLUGIN_DATAFILES); do ds="$$ds `basename $$i`"; done && rm -f $$dd
 
 endif
diff --git a/src/Analyses/ALICE_2010_S8624100.cc b/analyses/pluginALICE/ALICE_2010_S8624100.cc
rename from src/Analyses/ALICE_2010_S8624100.cc
rename to analyses/pluginALICE/ALICE_2010_S8624100.cc
diff --git a/data/anainfo/ALICE_2010_S8624100.info b/analyses/pluginALICE/ALICE_2010_S8624100.info
rename from data/anainfo/ALICE_2010_S8624100.info
rename to analyses/pluginALICE/ALICE_2010_S8624100.info
diff --git a/data/plotinfo/ALICE_2010_S8624100.plot b/analyses/pluginALICE/ALICE_2010_S8624100.plot
rename from data/plotinfo/ALICE_2010_S8624100.plot
rename to analyses/pluginALICE/ALICE_2010_S8624100.plot
diff --git a/data/refdata/ALICE_2010_S8624100.yoda b/analyses/pluginALICE/ALICE_2010_S8624100.yoda
rename from data/refdata/ALICE_2010_S8624100.yoda
rename to analyses/pluginALICE/ALICE_2010_S8624100.yoda
diff --git a/src/Analyses/ALICE_2010_S8625980.cc b/analyses/pluginALICE/ALICE_2010_S8625980.cc
rename from src/Analyses/ALICE_2010_S8625980.cc
rename to analyses/pluginALICE/ALICE_2010_S8625980.cc
diff --git a/data/anainfo/ALICE_2010_S8625980.info b/analyses/pluginALICE/ALICE_2010_S8625980.info
rename from data/anainfo/ALICE_2010_S8625980.info
rename to analyses/pluginALICE/ALICE_2010_S8625980.info
diff --git a/data/plotinfo/ALICE_2010_S8625980.plot b/analyses/pluginALICE/ALICE_2010_S8625980.plot
rename from data/plotinfo/ALICE_2010_S8625980.plot
rename to analyses/pluginALICE/ALICE_2010_S8625980.plot
diff --git a/data/refdata/ALICE_2010_S8625980.yoda b/analyses/pluginALICE/ALICE_2010_S8625980.yoda
rename from data/refdata/ALICE_2010_S8625980.yoda
rename to analyses/pluginALICE/ALICE_2010_S8625980.yoda
diff --git a/src/Analyses/ALICE_2010_S8706239.cc b/analyses/pluginALICE/ALICE_2010_S8706239.cc
rename from src/Analyses/ALICE_2010_S8706239.cc
rename to analyses/pluginALICE/ALICE_2010_S8706239.cc
diff --git a/data/anainfo/ALICE_2010_S8706239.info b/analyses/pluginALICE/ALICE_2010_S8706239.info
rename from data/anainfo/ALICE_2010_S8706239.info
rename to analyses/pluginALICE/ALICE_2010_S8706239.info
diff --git a/data/plotinfo/ALICE_2010_S8706239.plot b/analyses/pluginALICE/ALICE_2010_S8706239.plot
rename from data/plotinfo/ALICE_2010_S8706239.plot
rename to analyses/pluginALICE/ALICE_2010_S8706239.plot
diff --git a/data/refdata/ALICE_2010_S8706239.yoda b/analyses/pluginALICE/ALICE_2010_S8706239.yoda
rename from data/refdata/ALICE_2010_S8706239.yoda
rename to analyses/pluginALICE/ALICE_2010_S8706239.yoda
diff --git a/src/Analyses/ALICE_2011_S8909580.cc b/analyses/pluginALICE/ALICE_2011_S8909580.cc
rename from src/Analyses/ALICE_2011_S8909580.cc
rename to analyses/pluginALICE/ALICE_2011_S8909580.cc
diff --git a/data/anainfo/ALICE_2011_S8909580.info b/analyses/pluginALICE/ALICE_2011_S8909580.info
rename from data/anainfo/ALICE_2011_S8909580.info
rename to analyses/pluginALICE/ALICE_2011_S8909580.info
diff --git a/data/plotinfo/ALICE_2011_S8909580.plot b/analyses/pluginALICE/ALICE_2011_S8909580.plot
rename from data/plotinfo/ALICE_2011_S8909580.plot
rename to analyses/pluginALICE/ALICE_2011_S8909580.plot
diff --git a/data/refdata/ALICE_2011_S8909580.yoda b/analyses/pluginALICE/ALICE_2011_S8909580.yoda
rename from data/refdata/ALICE_2011_S8909580.yoda
rename to analyses/pluginALICE/ALICE_2011_S8909580.yoda
diff --git a/src/Analyses/ALICE_2011_S8945144.cc b/analyses/pluginALICE/ALICE_2011_S8945144.cc
rename from src/Analyses/ALICE_2011_S8945144.cc
rename to analyses/pluginALICE/ALICE_2011_S8945144.cc
diff --git a/data/anainfo/ALICE_2011_S8945144.info b/analyses/pluginALICE/ALICE_2011_S8945144.info
rename from data/anainfo/ALICE_2011_S8945144.info
rename to analyses/pluginALICE/ALICE_2011_S8945144.info
diff --git a/data/plotinfo/ALICE_2011_S8945144.plot b/analyses/pluginALICE/ALICE_2011_S8945144.plot
rename from data/plotinfo/ALICE_2011_S8945144.plot
rename to analyses/pluginALICE/ALICE_2011_S8945144.plot
diff --git a/data/refdata/ALICE_2011_S8945144.yoda b/analyses/pluginALICE/ALICE_2011_S8945144.yoda
rename from data/refdata/ALICE_2011_S8945144.yoda
rename to analyses/pluginALICE/ALICE_2011_S8945144.yoda
diff --git a/src/Analyses/ALICE_2012_I1116147.cc b/analyses/pluginALICE/ALICE_2012_I1116147.cc
rename from src/Analyses/ALICE_2012_I1116147.cc
rename to analyses/pluginALICE/ALICE_2012_I1116147.cc
--- a/src/Analyses/ALICE_2012_I1116147.cc
+++ b/analyses/pluginALICE/ALICE_2012_I1116147.cc
@@ -1,86 +1,87 @@
 //-*- C++ -*-
 #include "Rivet/Analysis.hh"
 #include "Rivet/Projections/UnstableFinalState.hh"
 
 namespace Rivet {
 
 
   class ALICE_2012_I1116147 : public Analysis {
   public:
 
     /// Constructor
     DEFAULT_RIVET_ANALYSIS_CTOR(ALICE_2012_I1116147);
 
 
+    /// Initialise projections and histograms
     void init() {
 
       const UnstableFinalState ufs(Cuts::absrap < RAPMAX);
       addProjection(ufs, "UFS");
 
       // Check if cm energy is 7 TeV or 0.9 TeV
-      if (fuzzyEquals(sqrtS()/GeV, 900, 1E-3))  _cm_energy_case = 1;
+      if (fuzzyEquals(sqrtS()/GeV, 900, 1E-3))       _cm_energy_case = 1;
       else if (fuzzyEquals(sqrtS()/GeV, 7000, 1E-3)) _cm_energy_case = 2;
       if (_cm_energy_case == 0)
         throw UserError("Center of mass energy of the given input is neither 900 nor 7000 GeV.");
 
       // Book histos
       if (_cm_energy_case == 1) {
         _h_pi0 = bookHisto1D(2,1,1);
       } else {
         _h_pi0 = bookHisto1D(1,1,1);
         _h_eta = bookHisto1D(3,1,1);
         _h_etaToPion = bookScatter2D(4,1,1);
       }
 
       // Temporary plots with the binning of _h_etaToPion to construct the eta/pi0 ratio
       _temp_h_pion = bookHisto1D("TMP/h_pion", refData(4,1,1));
       _temp_h_eta = bookHisto1D("TMP/h_eta", refData(4,1,1));
     }
 
 
+    /// Per-event analysis
     void analyze(const Event& event) {
-
-      const FinalState& ufs = applyProjection<UnstableFinalState>(event, "UFS");
       const double weight = event.weight();
 
+      const FinalState& ufs = apply<UnstableFinalState>(event, "UFS");
       for (const Particle& p : ufs.particles()) {
+        const double normfactor = TWOPI*p.pT()/GeV*2*RAPMAX;
         if (p.pid() == 111) {
-          // Neutral pion
-          _h_pi0->fill(p.pT()/GeV, weight /(TWOPI*p.pT()/GeV*2*RAPMAX));
+          // Neutral pion; ALICE corrects for pi0 feed-down from K_0_s and Lambda
+          if (p.hasAncestor(310) || p.hasAncestor(3122) || p.hasAncestor(-3122)) continue; //< K_0_s, Lambda, Anti-Lambda
+          _h_pi0->fill(p.pT()/GeV, weight/normfactor);
           _temp_h_pion->fill(p.pT()/GeV, weight);
-        } else if ((p.pid() == 221) && _cm_energy_case == 2) {
-          // Eta meson (only for 7 TeV)
-          _h_eta->fill(p.pT()/GeV, weight /(TWOPI*p.pT()/GeV*2*RAPMAX));
+        } else if (p.pid() == 221 && _cm_energy_case == 2) {
+          // eta meson (only for 7 TeV)
+          _h_eta->fill(p.pT()/GeV, weight/normfactor);
           _temp_h_eta->fill(p.pT()/GeV, weight);
         }
       }
-
     }
 
 
+    /// Normalize histos and construct ratio
     void finalize() {
-
       scale(_h_pi0, crossSection()/microbarn/sumOfWeights());
-      scale(_h_eta, crossSection()/microbarn/sumOfWeights());
-
-      if (_cm_energy_case == 2)
+      if (_cm_energy_case == 2) {
         divide(_temp_h_eta, _temp_h_pion, _h_etaToPion);
-
+        scale(_h_eta, crossSection()/microbarn/sumOfWeights());
+      }
     }
 
 
   private:
 
     const double RAPMAX = 0.8;
     int _cm_energy_case = 0;
 
     Histo1DPtr _h_pi0, _h_eta;
     Histo1DPtr _temp_h_pion, _temp_h_eta;
     Scatter2DPtr _h_etaToPion;
 
   };
 
 
   DECLARE_RIVET_PLUGIN(ALICE_2012_I1116147);
 
 }
diff --git a/data/anainfo/ALICE_2012_I1116147.info b/analyses/pluginALICE/ALICE_2012_I1116147.info
rename from data/anainfo/ALICE_2012_I1116147.info
rename to analyses/pluginALICE/ALICE_2012_I1116147.info
diff --git a/data/plotinfo/ALICE_2012_I1116147.plot b/analyses/pluginALICE/ALICE_2012_I1116147.plot
rename from data/plotinfo/ALICE_2012_I1116147.plot
rename to analyses/pluginALICE/ALICE_2012_I1116147.plot
diff --git a/data/refdata/ALICE_2012_I1116147.yoda b/analyses/pluginALICE/ALICE_2012_I1116147.yoda
rename from data/refdata/ALICE_2012_I1116147.yoda
rename to analyses/pluginALICE/ALICE_2012_I1116147.yoda
diff --git a/src/Analyses/ALICE_2012_I1181770.cc b/analyses/pluginALICE/ALICE_2012_I1181770.cc
rename from src/Analyses/ALICE_2012_I1181770.cc
rename to analyses/pluginALICE/ALICE_2012_I1181770.cc
diff --git a/data/anainfo/ALICE_2012_I1181770.info b/analyses/pluginALICE/ALICE_2012_I1181770.info
rename from data/anainfo/ALICE_2012_I1181770.info
rename to analyses/pluginALICE/ALICE_2012_I1181770.info
--- a/data/anainfo/ALICE_2012_I1181770.info
+++ b/analyses/pluginALICE/ALICE_2012_I1181770.info
@@ -1,42 +1,47 @@
 Name: ALICE_2012_I1181770
 Year: 2012
 Summary: Measurement of inelastic, single- and double-diffraction cross sections in proton--proton collisions at the LHC with ALICE
 Experiment: ALICE
 Collider: LHC
 SpireID: 9732586
 InspireID: 1181770
 Status: VALIDATED
 Authors:
  - Martin Poghosyan <Martin.Poghosyan@cern.ch>
  - Sercan Sen <Sercan.Sen@cern.ch>
  - Burak Bilki <bbilki@gmail.com>
  - Andy Buckley <andy.buckley@cern.ch>
 References:
  - arXiv:1208.4968 [hep-ex]
 RunInfo:
    Inelastic events (non-diffractive and inelastic diffractive).
 NumEvents: 100K
 Beams: [p+, p+]
 Energies: [900, 2760, 7000]
 Description:
   'Measurements of cross-sections of inelastic and diffractive processes in proton-proton collisions at $\sqrt{s} = 900$, 2760 and 7000 GeV.
    The fractions of diffractive processes in inelastic collisions were determined from a study of gaps in charged particle pseudorapidity distributions.
    Single-diffractive events are selected with $M_{X} < 200\;\GeV/c^2$ and double-diffractive events defined as NSD events with $\Delta\eta > 3$.
    To measure the inelastic cross-section, beam properties were determined with van der Meer scans using a simulation of diffraction adjusted to data.
 
    Note that these are experimental approximations to theoretical concepts -- it is not totally clear whether the data point values are model-independent.'
-BibKey: :2012sja
-BibTeX: '@article{:2012sja,
+BibKey: Abelev:2012sea
+BibTeX: '@article{Abelev:2012sea,
       author         = "Abelev, Betty and others",
       title          = "{Measurement of inelastic, single- and double-diffraction
                         cross sections in proton--proton collisions at the LHC
                         with ALICE}",
-      collaboration  = "ALICE Collaboration",
-      journal        = "Eur. Phys. J. C",
-      year           = "2012",
+      collaboration  = "ALICE",
+      journal        = "Eur. Phys. J.",
+      volume         = "C73",
+      year           = "2013",
+      number         = "6",
+      pages          = "2456",
+      doi            = "10.1140/epjc/s10052-013-2456-0",
       eprint         = "1208.4968",
       archivePrefix  = "arXiv",
       primaryClass   = "hep-ex",
-      reportNumber   = "CERN-PH-EP-2012-138",
-      SLACcitation   = "%%CITATION = ARXIV:1208.4968;%%",
+      reportNumber   = "CERN-PH-EP-2012-138 [SIC!], CERN-PH-EP-2012-238,
+                        CERN-PH-EP-2012-138",
+      SLACcitation   = "%%CITATION = ARXIV:1208.4968;%%"
 }'
diff --git a/data/plotinfo/ALICE_2012_I1181770.plot b/analyses/pluginALICE/ALICE_2012_I1181770.plot
rename from data/plotinfo/ALICE_2012_I1181770.plot
rename to analyses/pluginALICE/ALICE_2012_I1181770.plot
diff --git a/data/refdata/ALICE_2012_I1181770.yoda b/analyses/pluginALICE/ALICE_2012_I1181770.yoda
rename from data/refdata/ALICE_2012_I1181770.yoda
rename to analyses/pluginALICE/ALICE_2012_I1181770.yoda
diff --git a/src/Analyses/ALICE_2014_I1300380.cc b/analyses/pluginALICE/ALICE_2014_I1300380.cc
rename from src/Analyses/ALICE_2014_I1300380.cc
rename to analyses/pluginALICE/ALICE_2014_I1300380.cc
diff --git a/data/anainfo/ALICE_2014_I1300380.info b/analyses/pluginALICE/ALICE_2014_I1300380.info
rename from data/anainfo/ALICE_2014_I1300380.info
rename to analyses/pluginALICE/ALICE_2014_I1300380.info
--- a/data/anainfo/ALICE_2014_I1300380.info
+++ b/analyses/pluginALICE/ALICE_2014_I1300380.info
@@ -1,45 +1,44 @@
 Name: ALICE_2014_I1300380
 Year: 2014
 Summary: Production of $\Sigma(1385)^{\pm}$ and $\Xi(1530)^{0}$ in proton-proton collisions at $\sqrt{s} =$ 7 TeV 
 Experiment: ALICE
 Collider: LHC
 InspireID: 1300380
 Status: VALIDATED
 Authors:
 - Enrico Fragiacomo enrico.fragiacomo@ts.infn.it 
 - Andreas Morsch andreas.morsch@cern.ch
 References:
     -doi:10.1140/epjc/s10052-014-3191-x
     -arXiv:1406.3206
-RunInfo: inelastic collisions pp at sqrt(s) = 7 TeV	
+RunInfo: inelastic collisions pp at sqrt(s) = 7 TeV
 NumEvents: 1000000
 NeedCrossSection: no
 Beams: [p+, p+]
 Energies: [7000]
 PtCuts: 
 Description:
   'Transverse momentum spectra $\frac{1}{N_{\rm inel}} \frac{{\rm d}^2N}{{\rm d}p_{\rm T}{\rm d}y}$ of $\Sigma(1385)^{\pm}$, $\overline{\Sigma}(1385)^{\pm}$  and $(\Xi(1530)^{0}+\overline{\Xi}(1530)^{0})/2$ at mid-rapidity ($|y| < 0.5$)
 in inelastic proton-proton collisions at $\sqrt{s} =$ 7 TeV'
 BibKey: Abelev:2014qqa
 BibTeX: '@article{Abelev:2014qqa,
       author         = "Abelev, Betty Bezverkhny and others",
       title          = "{Production of $\Sigma(1385)^{\pm}$ and $\Xi(1530)^{0}$
                         in proton-proton collisions at $\sqrt{s}=$ 7 TeV}",
       collaboration  = "ALICE",
       journal        = "Eur.Phys.J.",
       number         = "1",
       volume         = "C75",
       pages          = "1",
       doi            = "10.1140/epjc/s10052-014-3191-x",
       year           = "2015",
       eprint         = "1406.3206",
       archivePrefix  = "arXiv",
       primaryClass   = "nucl-ex",
       reportNumber   = "CERN-PH-EP-2014-128",
       SLACcitation   = "%%CITATION = ARXIV:1406.3206;%%",
 }'
-ToDo:
-'The original ALICE_2014_I1300380.yoda file extracted from HEPdata has 0 bin size for
+ToDo: 'The original ALICE_2014_I1300380.yoda file extracted from HEPdata has 0 bin size for
 the particle masses in the <pT> vs mass scatter plot. 
 I had to change this to a small bin size in order to fill the automatically booked
 histogram. This might be not the best procedure and one could change this in the future.'
diff --git a/data/plotinfo/ALICE_2014_I1300380.plot b/analyses/pluginALICE/ALICE_2014_I1300380.plot
rename from data/plotinfo/ALICE_2014_I1300380.plot
rename to analyses/pluginALICE/ALICE_2014_I1300380.plot
diff --git a/data/refdata/ALICE_2014_I1300380.yoda b/analyses/pluginALICE/ALICE_2014_I1300380.yoda
rename from data/refdata/ALICE_2014_I1300380.yoda
rename to analyses/pluginALICE/ALICE_2014_I1300380.yoda
diff --git a/src/Analyses/ALICE_2015_I1357424.cc b/analyses/pluginALICE/ALICE_2015_I1357424.cc
rename from src/Analyses/ALICE_2015_I1357424.cc
rename to analyses/pluginALICE/ALICE_2015_I1357424.cc
diff --git a/data/anainfo/ALICE_2015_I1357424.info b/analyses/pluginALICE/ALICE_2015_I1357424.info
rename from data/anainfo/ALICE_2015_I1357424.info
rename to analyses/pluginALICE/ALICE_2015_I1357424.info
diff --git a/data/plotinfo/ALICE_2015_I1357424.plot b/analyses/pluginALICE/ALICE_2015_I1357424.plot
rename from data/plotinfo/ALICE_2015_I1357424.plot
rename to analyses/pluginALICE/ALICE_2015_I1357424.plot
diff --git a/data/refdata/ALICE_2015_I1357424.yoda b/analyses/pluginALICE/ALICE_2015_I1357424.yoda
rename from data/refdata/ALICE_2015_I1357424.yoda
rename to analyses/pluginALICE/ALICE_2015_I1357424.yoda
diff --git a/src/Analyses/ATLAS_2010_CONF_2010_049.cc b/analyses/pluginATLAS/ATLAS_2010_CONF_2010_049.cc
rename from src/Analyses/ATLAS_2010_CONF_2010_049.cc
rename to analyses/pluginATLAS/ATLAS_2010_CONF_2010_049.cc
diff --git a/data/anainfo/ATLAS_2010_CONF_2010_049.info b/analyses/pluginATLAS/ATLAS_2010_CONF_2010_049.info
rename from data/anainfo/ATLAS_2010_CONF_2010_049.info
rename to analyses/pluginATLAS/ATLAS_2010_CONF_2010_049.info
diff --git a/data/plotinfo/ATLAS_2010_CONF_2010_049.plot b/analyses/pluginATLAS/ATLAS_2010_CONF_2010_049.plot
rename from data/plotinfo/ATLAS_2010_CONF_2010_049.plot
rename to analyses/pluginATLAS/ATLAS_2010_CONF_2010_049.plot
diff --git a/data/refdata/ATLAS_2010_CONF_2010_049.yoda b/analyses/pluginATLAS/ATLAS_2010_CONF_2010_049.yoda
rename from data/refdata/ATLAS_2010_CONF_2010_049.yoda
rename to analyses/pluginATLAS/ATLAS_2010_CONF_2010_049.yoda
diff --git a/src/Analyses/ATLAS_2010_S8591806.cc b/analyses/pluginATLAS/ATLAS_2010_S8591806.cc
rename from src/Analyses/ATLAS_2010_S8591806.cc
rename to analyses/pluginATLAS/ATLAS_2010_S8591806.cc
diff --git a/data/anainfo/ATLAS_2010_S8591806.info b/analyses/pluginATLAS/ATLAS_2010_S8591806.info
rename from data/anainfo/ATLAS_2010_S8591806.info
rename to analyses/pluginATLAS/ATLAS_2010_S8591806.info
diff --git a/data/plotinfo/ATLAS_2010_S8591806.plot b/analyses/pluginATLAS/ATLAS_2010_S8591806.plot
rename from data/plotinfo/ATLAS_2010_S8591806.plot
rename to analyses/pluginATLAS/ATLAS_2010_S8591806.plot
diff --git a/data/refdata/ATLAS_2010_S8591806.yoda b/analyses/pluginATLAS/ATLAS_2010_S8591806.yoda
rename from data/refdata/ATLAS_2010_S8591806.yoda
rename to analyses/pluginATLAS/ATLAS_2010_S8591806.yoda
diff --git a/src/Analyses/ATLAS_2010_S8817804.cc b/analyses/pluginATLAS/ATLAS_2010_S8817804.cc
rename from src/Analyses/ATLAS_2010_S8817804.cc
rename to analyses/pluginATLAS/ATLAS_2010_S8817804.cc
diff --git a/data/anainfo/ATLAS_2010_S8817804.info b/analyses/pluginATLAS/ATLAS_2010_S8817804.info
rename from data/anainfo/ATLAS_2010_S8817804.info
rename to analyses/pluginATLAS/ATLAS_2010_S8817804.info
diff --git a/data/plotinfo/ATLAS_2010_S8817804.plot b/analyses/pluginATLAS/ATLAS_2010_S8817804.plot
rename from data/plotinfo/ATLAS_2010_S8817804.plot
rename to analyses/pluginATLAS/ATLAS_2010_S8817804.plot
diff --git a/data/refdata/ATLAS_2010_S8817804.yoda b/analyses/pluginATLAS/ATLAS_2010_S8817804.yoda
rename from data/refdata/ATLAS_2010_S8817804.yoda
rename to analyses/pluginATLAS/ATLAS_2010_S8817804.yoda
diff --git a/src/Analyses/ATLAS_2010_S8894728.cc b/analyses/pluginATLAS/ATLAS_2010_S8894728.cc
rename from src/Analyses/ATLAS_2010_S8894728.cc
rename to analyses/pluginATLAS/ATLAS_2010_S8894728.cc
diff --git a/data/anainfo/ATLAS_2010_S8894728.info b/analyses/pluginATLAS/ATLAS_2010_S8894728.info
rename from data/anainfo/ATLAS_2010_S8894728.info
rename to analyses/pluginATLAS/ATLAS_2010_S8894728.info
diff --git a/data/plotinfo/ATLAS_2010_S8894728.plot b/analyses/pluginATLAS/ATLAS_2010_S8894728.plot
rename from data/plotinfo/ATLAS_2010_S8894728.plot
rename to analyses/pluginATLAS/ATLAS_2010_S8894728.plot
diff --git a/data/refdata/ATLAS_2010_S8894728.yoda b/analyses/pluginATLAS/ATLAS_2010_S8894728.yoda
rename from data/refdata/ATLAS_2010_S8894728.yoda
rename to analyses/pluginATLAS/ATLAS_2010_S8894728.yoda
diff --git a/src/Analyses/ATLAS_2010_S8914702.cc b/analyses/pluginATLAS/ATLAS_2010_S8914702.cc
rename from src/Analyses/ATLAS_2010_S8914702.cc
rename to analyses/pluginATLAS/ATLAS_2010_S8914702.cc
diff --git a/data/anainfo/ATLAS_2010_S8914702.info b/analyses/pluginATLAS/ATLAS_2010_S8914702.info
rename from data/anainfo/ATLAS_2010_S8914702.info
rename to analyses/pluginATLAS/ATLAS_2010_S8914702.info
diff --git a/data/plotinfo/ATLAS_2010_S8914702.plot b/analyses/pluginATLAS/ATLAS_2010_S8914702.plot
rename from data/plotinfo/ATLAS_2010_S8914702.plot
rename to analyses/pluginATLAS/ATLAS_2010_S8914702.plot
diff --git a/data/refdata/ATLAS_2010_S8914702.yoda b/analyses/pluginATLAS/ATLAS_2010_S8914702.yoda
rename from data/refdata/ATLAS_2010_S8914702.yoda
rename to analyses/pluginATLAS/ATLAS_2010_S8914702.yoda
diff --git a/src/Analyses/ATLAS_2010_S8918562.cc b/analyses/pluginATLAS/ATLAS_2010_S8918562.cc
rename from src/Analyses/ATLAS_2010_S8918562.cc
rename to analyses/pluginATLAS/ATLAS_2010_S8918562.cc
diff --git a/data/anainfo/ATLAS_2010_S8918562.info b/analyses/pluginATLAS/ATLAS_2010_S8918562.info
rename from data/anainfo/ATLAS_2010_S8918562.info
rename to analyses/pluginATLAS/ATLAS_2010_S8918562.info
diff --git a/data/plotinfo/ATLAS_2010_S8918562.plot b/analyses/pluginATLAS/ATLAS_2010_S8918562.plot
rename from data/plotinfo/ATLAS_2010_S8918562.plot
rename to analyses/pluginATLAS/ATLAS_2010_S8918562.plot
diff --git a/data/refdata/ATLAS_2010_S8918562.yoda b/analyses/pluginATLAS/ATLAS_2010_S8918562.yoda
rename from data/refdata/ATLAS_2010_S8918562.yoda
rename to analyses/pluginATLAS/ATLAS_2010_S8918562.yoda
diff --git a/src/Analyses/ATLAS_2010_S8919674.cc b/analyses/pluginATLAS/ATLAS_2010_S8919674.cc
rename from src/Analyses/ATLAS_2010_S8919674.cc
rename to analyses/pluginATLAS/ATLAS_2010_S8919674.cc
diff --git a/data/anainfo/ATLAS_2010_S8919674.info b/analyses/pluginATLAS/ATLAS_2010_S8919674.info
rename from data/anainfo/ATLAS_2010_S8919674.info
rename to analyses/pluginATLAS/ATLAS_2010_S8919674.info
diff --git a/data/plotinfo/ATLAS_2010_S8919674.plot b/analyses/pluginATLAS/ATLAS_2010_S8919674.plot
rename from data/plotinfo/ATLAS_2010_S8919674.plot
rename to analyses/pluginATLAS/ATLAS_2010_S8919674.plot
diff --git a/data/refdata/ATLAS_2010_S8919674.yoda b/analyses/pluginATLAS/ATLAS_2010_S8919674.yoda
rename from data/refdata/ATLAS_2010_S8919674.yoda
rename to analyses/pluginATLAS/ATLAS_2010_S8919674.yoda
diff --git a/src/Analyses/ATLAS_2011_CONF_2011_090.cc b/analyses/pluginATLAS/ATLAS_2011_CONF_2011_090.cc
rename from src/Analyses/ATLAS_2011_CONF_2011_090.cc
rename to analyses/pluginATLAS/ATLAS_2011_CONF_2011_090.cc
diff --git a/data/anainfo/ATLAS_2011_CONF_2011_090.info b/analyses/pluginATLAS/ATLAS_2011_CONF_2011_090.info
rename from data/anainfo/ATLAS_2011_CONF_2011_090.info
rename to analyses/pluginATLAS/ATLAS_2011_CONF_2011_090.info
diff --git a/data/plotinfo/ATLAS_2011_CONF_2011_090.plot b/analyses/pluginATLAS/ATLAS_2011_CONF_2011_090.plot
rename from data/plotinfo/ATLAS_2011_CONF_2011_090.plot
rename to analyses/pluginATLAS/ATLAS_2011_CONF_2011_090.plot
diff --git a/src/Analyses/ATLAS_2011_CONF_2011_098.cc b/analyses/pluginATLAS/ATLAS_2011_CONF_2011_098.cc
rename from src/Analyses/ATLAS_2011_CONF_2011_098.cc
rename to analyses/pluginATLAS/ATLAS_2011_CONF_2011_098.cc
diff --git a/data/anainfo/ATLAS_2011_CONF_2011_098.info b/analyses/pluginATLAS/ATLAS_2011_CONF_2011_098.info
rename from data/anainfo/ATLAS_2011_CONF_2011_098.info
rename to analyses/pluginATLAS/ATLAS_2011_CONF_2011_098.info
diff --git a/data/plotinfo/ATLAS_2011_CONF_2011_098.plot b/analyses/pluginATLAS/ATLAS_2011_CONF_2011_098.plot
rename from data/plotinfo/ATLAS_2011_CONF_2011_098.plot
rename to analyses/pluginATLAS/ATLAS_2011_CONF_2011_098.plot
diff --git a/src/Analyses/ATLAS_2011_I894867.cc b/analyses/pluginATLAS/ATLAS_2011_I894867.cc
rename from src/Analyses/ATLAS_2011_I894867.cc
rename to analyses/pluginATLAS/ATLAS_2011_I894867.cc
diff --git a/data/anainfo/ATLAS_2011_I894867.info b/analyses/pluginATLAS/ATLAS_2011_I894867.info
rename from data/anainfo/ATLAS_2011_I894867.info
rename to analyses/pluginATLAS/ATLAS_2011_I894867.info
diff --git a/data/plotinfo/ATLAS_2011_I894867.plot b/analyses/pluginATLAS/ATLAS_2011_I894867.plot
rename from data/plotinfo/ATLAS_2011_I894867.plot
rename to analyses/pluginATLAS/ATLAS_2011_I894867.plot
diff --git a/data/refdata/ATLAS_2011_I894867.yoda b/analyses/pluginATLAS/ATLAS_2011_I894867.yoda
rename from data/refdata/ATLAS_2011_I894867.yoda
rename to analyses/pluginATLAS/ATLAS_2011_I894867.yoda
diff --git a/src/Analyses/ATLAS_2011_I919017.cc b/analyses/pluginATLAS/ATLAS_2011_I919017.cc
rename from src/Analyses/ATLAS_2011_I919017.cc
rename to analyses/pluginATLAS/ATLAS_2011_I919017.cc
diff --git a/data/anainfo/ATLAS_2011_I919017.info b/analyses/pluginATLAS/ATLAS_2011_I919017.info
rename from data/anainfo/ATLAS_2011_I919017.info
rename to analyses/pluginATLAS/ATLAS_2011_I919017.info
diff --git a/data/plotinfo/ATLAS_2011_I919017.plot b/analyses/pluginATLAS/ATLAS_2011_I919017.plot
rename from data/plotinfo/ATLAS_2011_I919017.plot
rename to analyses/pluginATLAS/ATLAS_2011_I919017.plot
diff --git a/data/refdata/ATLAS_2011_I919017.yoda b/analyses/pluginATLAS/ATLAS_2011_I919017.yoda
rename from data/refdata/ATLAS_2011_I919017.yoda
rename to analyses/pluginATLAS/ATLAS_2011_I919017.yoda
diff --git a/src/Analyses/ATLAS_2011_I921594.cc b/analyses/pluginATLAS/ATLAS_2011_I921594.cc
rename from src/Analyses/ATLAS_2011_I921594.cc
rename to analyses/pluginATLAS/ATLAS_2011_I921594.cc
diff --git a/data/anainfo/ATLAS_2011_I921594.info b/analyses/pluginATLAS/ATLAS_2011_I921594.info
rename from data/anainfo/ATLAS_2011_I921594.info
rename to analyses/pluginATLAS/ATLAS_2011_I921594.info
diff --git a/data/plotinfo/ATLAS_2011_I921594.plot b/analyses/pluginATLAS/ATLAS_2011_I921594.plot
rename from data/plotinfo/ATLAS_2011_I921594.plot
rename to analyses/pluginATLAS/ATLAS_2011_I921594.plot
diff --git a/data/refdata/ATLAS_2011_I921594.yoda b/analyses/pluginATLAS/ATLAS_2011_I921594.yoda
rename from data/refdata/ATLAS_2011_I921594.yoda
rename to analyses/pluginATLAS/ATLAS_2011_I921594.yoda
diff --git a/src/Analyses/ATLAS_2011_I925932.cc b/analyses/pluginATLAS/ATLAS_2011_I925932.cc
rename from src/Analyses/ATLAS_2011_I925932.cc
rename to analyses/pluginATLAS/ATLAS_2011_I925932.cc
diff --git a/data/anainfo/ATLAS_2011_I925932.info b/analyses/pluginATLAS/ATLAS_2011_I925932.info
rename from data/anainfo/ATLAS_2011_I925932.info
rename to analyses/pluginATLAS/ATLAS_2011_I925932.info
diff --git a/data/plotinfo/ATLAS_2011_I925932.plot b/analyses/pluginATLAS/ATLAS_2011_I925932.plot
rename from data/plotinfo/ATLAS_2011_I925932.plot
rename to analyses/pluginATLAS/ATLAS_2011_I925932.plot
diff --git a/data/refdata/ATLAS_2011_I925932.yoda b/analyses/pluginATLAS/ATLAS_2011_I925932.yoda
rename from data/refdata/ATLAS_2011_I925932.yoda
rename to analyses/pluginATLAS/ATLAS_2011_I925932.yoda
diff --git a/src/Analyses/ATLAS_2011_I926145.cc b/analyses/pluginATLAS/ATLAS_2011_I926145.cc
rename from src/Analyses/ATLAS_2011_I926145.cc
rename to analyses/pluginATLAS/ATLAS_2011_I926145.cc
diff --git a/data/anainfo/ATLAS_2011_I926145.info b/analyses/pluginATLAS/ATLAS_2011_I926145.info
rename from data/anainfo/ATLAS_2011_I926145.info
rename to analyses/pluginATLAS/ATLAS_2011_I926145.info
diff --git a/data/plotinfo/ATLAS_2011_I926145.plot b/analyses/pluginATLAS/ATLAS_2011_I926145.plot
rename from data/plotinfo/ATLAS_2011_I926145.plot
rename to analyses/pluginATLAS/ATLAS_2011_I926145.plot
diff --git a/data/refdata/ATLAS_2011_I926145.yoda b/analyses/pluginATLAS/ATLAS_2011_I926145.yoda
rename from data/refdata/ATLAS_2011_I926145.yoda
rename to analyses/pluginATLAS/ATLAS_2011_I926145.yoda
diff --git a/src/Analyses/ATLAS_2011_I928289_W.cc b/analyses/pluginATLAS/ATLAS_2011_I928289_W.cc
rename from src/Analyses/ATLAS_2011_I928289_W.cc
rename to analyses/pluginATLAS/ATLAS_2011_I928289_W.cc
diff --git a/data/anainfo/ATLAS_2011_I928289_W.info b/analyses/pluginATLAS/ATLAS_2011_I928289_W.info
rename from data/anainfo/ATLAS_2011_I928289_W.info
rename to analyses/pluginATLAS/ATLAS_2011_I928289_W.info
diff --git a/data/plotinfo/ATLAS_2011_I928289_W.plot b/analyses/pluginATLAS/ATLAS_2011_I928289_W.plot
rename from data/plotinfo/ATLAS_2011_I928289_W.plot
rename to analyses/pluginATLAS/ATLAS_2011_I928289_W.plot
diff --git a/data/refdata/ATLAS_2011_I928289_W.yoda b/analyses/pluginATLAS/ATLAS_2011_I928289_W.yoda
rename from data/refdata/ATLAS_2011_I928289_W.yoda
rename to analyses/pluginATLAS/ATLAS_2011_I928289_W.yoda
diff --git a/src/Analyses/ATLAS_2011_I928289_Z.cc b/analyses/pluginATLAS/ATLAS_2011_I928289_Z.cc
rename from src/Analyses/ATLAS_2011_I928289_Z.cc
rename to analyses/pluginATLAS/ATLAS_2011_I928289_Z.cc
diff --git a/data/anainfo/ATLAS_2011_I928289_Z.info b/analyses/pluginATLAS/ATLAS_2011_I928289_Z.info
rename from data/anainfo/ATLAS_2011_I928289_Z.info
rename to analyses/pluginATLAS/ATLAS_2011_I928289_Z.info
diff --git a/data/plotinfo/ATLAS_2011_I928289_Z.plot b/analyses/pluginATLAS/ATLAS_2011_I928289_Z.plot
rename from data/plotinfo/ATLAS_2011_I928289_Z.plot
rename to analyses/pluginATLAS/ATLAS_2011_I928289_Z.plot
diff --git a/data/refdata/ATLAS_2011_I928289_Z.yoda b/analyses/pluginATLAS/ATLAS_2011_I928289_Z.yoda
rename from data/refdata/ATLAS_2011_I928289_Z.yoda
rename to analyses/pluginATLAS/ATLAS_2011_I928289_Z.yoda
diff --git a/src/Analyses/ATLAS_2011_I929691.cc b/analyses/pluginATLAS/ATLAS_2011_I929691.cc
rename from src/Analyses/ATLAS_2011_I929691.cc
rename to analyses/pluginATLAS/ATLAS_2011_I929691.cc
diff --git a/data/anainfo/ATLAS_2011_I929691.info b/analyses/pluginATLAS/ATLAS_2011_I929691.info
rename from data/anainfo/ATLAS_2011_I929691.info
rename to analyses/pluginATLAS/ATLAS_2011_I929691.info
diff --git a/data/plotinfo/ATLAS_2011_I929691.plot b/analyses/pluginATLAS/ATLAS_2011_I929691.plot
rename from data/plotinfo/ATLAS_2011_I929691.plot
rename to analyses/pluginATLAS/ATLAS_2011_I929691.plot
diff --git a/data/refdata/ATLAS_2011_I929691.yoda b/analyses/pluginATLAS/ATLAS_2011_I929691.yoda
rename from data/refdata/ATLAS_2011_I929691.yoda
rename to analyses/pluginATLAS/ATLAS_2011_I929691.yoda
diff --git a/src/Analyses/ATLAS_2011_I930220.cc b/analyses/pluginATLAS/ATLAS_2011_I930220.cc
rename from src/Analyses/ATLAS_2011_I930220.cc
rename to analyses/pluginATLAS/ATLAS_2011_I930220.cc
diff --git a/data/anainfo/ATLAS_2011_I930220.info b/analyses/pluginATLAS/ATLAS_2011_I930220.info
rename from data/anainfo/ATLAS_2011_I930220.info
rename to analyses/pluginATLAS/ATLAS_2011_I930220.info
diff --git a/data/plotinfo/ATLAS_2011_I930220.plot b/analyses/pluginATLAS/ATLAS_2011_I930220.plot
rename from data/plotinfo/ATLAS_2011_I930220.plot
rename to analyses/pluginATLAS/ATLAS_2011_I930220.plot
diff --git a/data/refdata/ATLAS_2011_I930220.yoda b/analyses/pluginATLAS/ATLAS_2011_I930220.yoda
rename from data/refdata/ATLAS_2011_I930220.yoda
rename to analyses/pluginATLAS/ATLAS_2011_I930220.yoda
diff --git a/src/Analyses/ATLAS_2011_I944826.cc b/analyses/pluginATLAS/ATLAS_2011_I944826.cc
rename from src/Analyses/ATLAS_2011_I944826.cc
rename to analyses/pluginATLAS/ATLAS_2011_I944826.cc
diff --git a/data/anainfo/ATLAS_2011_I944826.info b/analyses/pluginATLAS/ATLAS_2011_I944826.info
rename from data/anainfo/ATLAS_2011_I944826.info
rename to analyses/pluginATLAS/ATLAS_2011_I944826.info
diff --git a/data/plotinfo/ATLAS_2011_I944826.plot b/analyses/pluginATLAS/ATLAS_2011_I944826.plot
rename from data/plotinfo/ATLAS_2011_I944826.plot
rename to analyses/pluginATLAS/ATLAS_2011_I944826.plot
diff --git a/data/refdata/ATLAS_2011_I944826.yoda b/analyses/pluginATLAS/ATLAS_2011_I944826.yoda
rename from data/refdata/ATLAS_2011_I944826.yoda
rename to analyses/pluginATLAS/ATLAS_2011_I944826.yoda
diff --git a/src/Analyses/ATLAS_2011_I945498.cc b/analyses/pluginATLAS/ATLAS_2011_I945498.cc
rename from src/Analyses/ATLAS_2011_I945498.cc
rename to analyses/pluginATLAS/ATLAS_2011_I945498.cc
diff --git a/data/anainfo/ATLAS_2011_I945498.info b/analyses/pluginATLAS/ATLAS_2011_I945498.info
rename from data/anainfo/ATLAS_2011_I945498.info
rename to analyses/pluginATLAS/ATLAS_2011_I945498.info
diff --git a/data/plotinfo/ATLAS_2011_I945498.plot b/analyses/pluginATLAS/ATLAS_2011_I945498.plot
rename from data/plotinfo/ATLAS_2011_I945498.plot
rename to analyses/pluginATLAS/ATLAS_2011_I945498.plot
diff --git a/data/refdata/ATLAS_2011_I945498.yoda b/analyses/pluginATLAS/ATLAS_2011_I945498.yoda
rename from data/refdata/ATLAS_2011_I945498.yoda
rename to analyses/pluginATLAS/ATLAS_2011_I945498.yoda
diff --git a/src/Analyses/ATLAS_2011_I954993.cc b/analyses/pluginATLAS/ATLAS_2011_I954993.cc
rename from src/Analyses/ATLAS_2011_I954993.cc
rename to analyses/pluginATLAS/ATLAS_2011_I954993.cc
diff --git a/data/anainfo/ATLAS_2011_I954993.info b/analyses/pluginATLAS/ATLAS_2011_I954993.info
rename from data/anainfo/ATLAS_2011_I954993.info
rename to analyses/pluginATLAS/ATLAS_2011_I954993.info
diff --git a/data/plotinfo/ATLAS_2011_I954993.plot b/analyses/pluginATLAS/ATLAS_2011_I954993.plot
rename from data/plotinfo/ATLAS_2011_I954993.plot
rename to analyses/pluginATLAS/ATLAS_2011_I954993.plot
diff --git a/data/refdata/ATLAS_2011_I954993.yoda b/analyses/pluginATLAS/ATLAS_2011_I954993.yoda
rename from data/refdata/ATLAS_2011_I954993.yoda
rename to analyses/pluginATLAS/ATLAS_2011_I954993.yoda
diff --git a/src/Analyses/ATLAS_2011_S8924791.cc b/analyses/pluginATLAS/ATLAS_2011_S8924791.cc
rename from src/Analyses/ATLAS_2011_S8924791.cc
rename to analyses/pluginATLAS/ATLAS_2011_S8924791.cc
diff --git a/data/anainfo/ATLAS_2011_S8924791.info b/analyses/pluginATLAS/ATLAS_2011_S8924791.info
rename from data/anainfo/ATLAS_2011_S8924791.info
rename to analyses/pluginATLAS/ATLAS_2011_S8924791.info
diff --git a/data/plotinfo/ATLAS_2011_S8924791.plot b/analyses/pluginATLAS/ATLAS_2011_S8924791.plot
rename from data/plotinfo/ATLAS_2011_S8924791.plot
rename to analyses/pluginATLAS/ATLAS_2011_S8924791.plot
diff --git a/data/refdata/ATLAS_2011_S8924791.yoda b/analyses/pluginATLAS/ATLAS_2011_S8924791.yoda
rename from data/refdata/ATLAS_2011_S8924791.yoda
rename to analyses/pluginATLAS/ATLAS_2011_S8924791.yoda
diff --git a/src/Analyses/ATLAS_2011_S8971293.cc b/analyses/pluginATLAS/ATLAS_2011_S8971293.cc
rename from src/Analyses/ATLAS_2011_S8971293.cc
rename to analyses/pluginATLAS/ATLAS_2011_S8971293.cc
diff --git a/data/anainfo/ATLAS_2011_S8971293.info b/analyses/pluginATLAS/ATLAS_2011_S8971293.info
rename from data/anainfo/ATLAS_2011_S8971293.info
rename to analyses/pluginATLAS/ATLAS_2011_S8971293.info
diff --git a/data/plotinfo/ATLAS_2011_S8971293.plot b/analyses/pluginATLAS/ATLAS_2011_S8971293.plot
rename from data/plotinfo/ATLAS_2011_S8971293.plot
rename to analyses/pluginATLAS/ATLAS_2011_S8971293.plot
diff --git a/data/refdata/ATLAS_2011_S8971293.yoda b/analyses/pluginATLAS/ATLAS_2011_S8971293.yoda
rename from data/refdata/ATLAS_2011_S8971293.yoda
rename to analyses/pluginATLAS/ATLAS_2011_S8971293.yoda
diff --git a/src/Analyses/ATLAS_2011_S8983313.cc b/analyses/pluginATLAS/ATLAS_2011_S8983313.cc
rename from src/Analyses/ATLAS_2011_S8983313.cc
rename to analyses/pluginATLAS/ATLAS_2011_S8983313.cc
diff --git a/data/anainfo/ATLAS_2011_S8983313.info b/analyses/pluginATLAS/ATLAS_2011_S8983313.info
rename from data/anainfo/ATLAS_2011_S8983313.info
rename to analyses/pluginATLAS/ATLAS_2011_S8983313.info
diff --git a/data/plotinfo/ATLAS_2011_S8983313.plot b/analyses/pluginATLAS/ATLAS_2011_S8983313.plot
rename from data/plotinfo/ATLAS_2011_S8983313.plot
rename to analyses/pluginATLAS/ATLAS_2011_S8983313.plot
diff --git a/src/Analyses/ATLAS_2011_S8994773.cc b/analyses/pluginATLAS/ATLAS_2011_S8994773.cc
rename from src/Analyses/ATLAS_2011_S8994773.cc
rename to analyses/pluginATLAS/ATLAS_2011_S8994773.cc
diff --git a/data/anainfo/ATLAS_2011_S8994773.info b/analyses/pluginATLAS/ATLAS_2011_S8994773.info
rename from data/anainfo/ATLAS_2011_S8994773.info
rename to analyses/pluginATLAS/ATLAS_2011_S8994773.info
diff --git a/data/plotinfo/ATLAS_2011_S8994773.plot b/analyses/pluginATLAS/ATLAS_2011_S8994773.plot
rename from data/plotinfo/ATLAS_2011_S8994773.plot
rename to analyses/pluginATLAS/ATLAS_2011_S8994773.plot
diff --git a/data/refdata/ATLAS_2011_S8994773.yoda b/analyses/pluginATLAS/ATLAS_2011_S8994773.yoda
rename from data/refdata/ATLAS_2011_S8994773.yoda
rename to analyses/pluginATLAS/ATLAS_2011_S8994773.yoda
diff --git a/src/Analyses/ATLAS_2011_S9002537.cc b/analyses/pluginATLAS/ATLAS_2011_S9002537.cc
rename from src/Analyses/ATLAS_2011_S9002537.cc
rename to analyses/pluginATLAS/ATLAS_2011_S9002537.cc
diff --git a/data/anainfo/ATLAS_2011_S9002537.info b/analyses/pluginATLAS/ATLAS_2011_S9002537.info
rename from data/anainfo/ATLAS_2011_S9002537.info
rename to analyses/pluginATLAS/ATLAS_2011_S9002537.info
diff --git a/data/plotinfo/ATLAS_2011_S9002537.plot b/analyses/pluginATLAS/ATLAS_2011_S9002537.plot
rename from data/plotinfo/ATLAS_2011_S9002537.plot
rename to analyses/pluginATLAS/ATLAS_2011_S9002537.plot
diff --git a/data/refdata/ATLAS_2011_S9002537.yoda b/analyses/pluginATLAS/ATLAS_2011_S9002537.yoda
rename from data/refdata/ATLAS_2011_S9002537.yoda
rename to analyses/pluginATLAS/ATLAS_2011_S9002537.yoda
diff --git a/src/Analyses/ATLAS_2011_S9019561.cc b/analyses/pluginATLAS/ATLAS_2011_S9019561.cc
rename from src/Analyses/ATLAS_2011_S9019561.cc
rename to analyses/pluginATLAS/ATLAS_2011_S9019561.cc
diff --git a/data/anainfo/ATLAS_2011_S9019561.info b/analyses/pluginATLAS/ATLAS_2011_S9019561.info
rename from data/anainfo/ATLAS_2011_S9019561.info
rename to analyses/pluginATLAS/ATLAS_2011_S9019561.info
diff --git a/src/Analyses/ATLAS_2011_S9035664.cc b/analyses/pluginATLAS/ATLAS_2011_S9035664.cc
rename from src/Analyses/ATLAS_2011_S9035664.cc
rename to analyses/pluginATLAS/ATLAS_2011_S9035664.cc
diff --git a/data/anainfo/ATLAS_2011_S9035664.info b/analyses/pluginATLAS/ATLAS_2011_S9035664.info
rename from data/anainfo/ATLAS_2011_S9035664.info
rename to analyses/pluginATLAS/ATLAS_2011_S9035664.info
diff --git a/data/plotinfo/ATLAS_2011_S9035664.plot b/analyses/pluginATLAS/ATLAS_2011_S9035664.plot
rename from data/plotinfo/ATLAS_2011_S9035664.plot
rename to analyses/pluginATLAS/ATLAS_2011_S9035664.plot
diff --git a/data/refdata/ATLAS_2011_S9035664.yoda b/analyses/pluginATLAS/ATLAS_2011_S9035664.yoda
rename from data/refdata/ATLAS_2011_S9035664.yoda
rename to analyses/pluginATLAS/ATLAS_2011_S9035664.yoda
diff --git a/src/Analyses/ATLAS_2011_S9041966.cc b/analyses/pluginATLAS/ATLAS_2011_S9041966.cc
rename from src/Analyses/ATLAS_2011_S9041966.cc
rename to analyses/pluginATLAS/ATLAS_2011_S9041966.cc
diff --git a/data/anainfo/ATLAS_2011_S9041966.info b/analyses/pluginATLAS/ATLAS_2011_S9041966.info
rename from data/anainfo/ATLAS_2011_S9041966.info
rename to analyses/pluginATLAS/ATLAS_2011_S9041966.info
diff --git a/src/Analyses/ATLAS_2011_S9108483.cc b/analyses/pluginATLAS/ATLAS_2011_S9108483.cc
rename from src/Analyses/ATLAS_2011_S9108483.cc
rename to analyses/pluginATLAS/ATLAS_2011_S9108483.cc
diff --git a/data/anainfo/ATLAS_2011_S9108483.info b/analyses/pluginATLAS/ATLAS_2011_S9108483.info
rename from data/anainfo/ATLAS_2011_S9108483.info
rename to analyses/pluginATLAS/ATLAS_2011_S9108483.info
diff --git a/src/Analyses/ATLAS_2011_S9120807.cc b/analyses/pluginATLAS/ATLAS_2011_S9120807.cc
rename from src/Analyses/ATLAS_2011_S9120807.cc
rename to analyses/pluginATLAS/ATLAS_2011_S9120807.cc
diff --git a/data/anainfo/ATLAS_2011_S9120807.info b/analyses/pluginATLAS/ATLAS_2011_S9120807.info
rename from data/anainfo/ATLAS_2011_S9120807.info
rename to analyses/pluginATLAS/ATLAS_2011_S9120807.info
--- a/data/anainfo/ATLAS_2011_S9120807.info
+++ b/analyses/pluginATLAS/ATLAS_2011_S9120807.info
@@ -1,34 +1,34 @@
 Name: ATLAS_2011_S9120807
 Year: 2011
 Summary: Inclusive isolated diphoton analysis
 Experiment: ATLAS
 Collider: LHC 7TeV
 SpiresID: 9120807
 InspireID: 916832
 Status: VALIDATED
 Authors:
  - Giovanni Marchiori <giovanni.marchiori@cern.ch>
 References:
  - arXiv:1107.0581 [hep-ex]
 RunInfo:
   Inclusive diphoton + $X$ events at $\sqrt{s} = 7$~TeV.
 NumEvents: 1000000
 Beams: [p+, p+]
 Energies: [7000]
 PtCuts: [16]
 Description:
   'A measurement of the cross section for inclusive isolated photon production at $\sqrt{s} = 7$ TeV.
   The measurement is done in bins of $M_{\gamma\gamma}$, $p_{T\gamma\gamma}$, and $\Delta\phi_{\gamma\gamma}$,
   for isolated photons with $|\eta|<2.37$ and $E_T^\gamma>16$~GeV.
   The measurement uses 37 pb$^{-1}$ of integrated luminosity collected with
   the ATLAS detector.'
 NeedCrossSection: yes
 BibTeX: '@Article{Aad:2011mh,
       author         = "Aad, Georges and others",
       title          = "{Measurement of the isolated di-photon cross-section in $pp$ collisions at $\sqrt{s} = 7$ TeV with the ATLAS detector}",
       collaboration  = "ATLAS Collaboration",
       year           = "2011",
       eprint         = "1107.0581",
       archivePrefix  = "arXiv",
       primaryClass   = "hep-ex",
-}
+}'
diff --git a/data/plotinfo/ATLAS_2011_S9120807.plot b/analyses/pluginATLAS/ATLAS_2011_S9120807.plot
rename from data/plotinfo/ATLAS_2011_S9120807.plot
rename to analyses/pluginATLAS/ATLAS_2011_S9120807.plot
diff --git a/data/refdata/ATLAS_2011_S9120807.yoda b/analyses/pluginATLAS/ATLAS_2011_S9120807.yoda
rename from data/refdata/ATLAS_2011_S9120807.yoda
rename to analyses/pluginATLAS/ATLAS_2011_S9120807.yoda
diff --git a/src/Analyses/ATLAS_2011_S9126244.cc b/analyses/pluginATLAS/ATLAS_2011_S9126244.cc
rename from src/Analyses/ATLAS_2011_S9126244.cc
rename to analyses/pluginATLAS/ATLAS_2011_S9126244.cc
diff --git a/data/anainfo/ATLAS_2011_S9126244.info b/analyses/pluginATLAS/ATLAS_2011_S9126244.info
rename from data/anainfo/ATLAS_2011_S9126244.info
rename to analyses/pluginATLAS/ATLAS_2011_S9126244.info
--- a/data/anainfo/ATLAS_2011_S9126244.info
+++ b/analyses/pluginATLAS/ATLAS_2011_S9126244.info
@@ -1,44 +1,43 @@
 Name: ATLAS_2011_S9126244
 Year: 2011
 Summary: Measurement of dijet production with a veto on additional central jet activity
 Experiment: ATLAS
 Collider: LHC
 SpiresID: 9126244
 InspireID: 917526
 Status: VALIDATED
 Authors:
  - Graham Jones <grahamj@cern.ch>
 References:
  - arXiv:1107.1641 [hep-ex]
 RunInfo:
   Require QCD interactions at 7TeV. A substantial number of events are required
   to populate the large rapidity seperation region.
 NumEvents: 10000000
 Beams: [p+, p+]
 Energies: [7000]
 PtCuts: [0]
 Description:
   'A measurement of the jet activity in rapidity intervals bounded by a dijet
   system. The fraction of events passing a veto requirement are shown as a
   function of both the rapidity interval size and the average transverse
   momentum of the dijet system. The average number of jets above the veto
   threshold are also shown as a function of the same variables. There are
   two possible selection criteria applied to data. Either the two highest
   transverse momentum jets or the jets most forward and backward in rapidity
   are taken to define the dijet system, where the veto threhsold is 20\;GeV.
   Additionally for the latter selection an alternative veto transverse
   momentum threshold which is equal to the average transverse momentum is
   applied.
   Jet selections are based on the anti-$k_t$ algorithm with $R=0.6$,
   $p_\perp > 20$\;GeV and $|y_\text{jet}| < 4.4$.'
-BibTeX:
-'@Article{Aad:2011jz,
+BibTeX: '@Article{Aad:2011jz,
      author    = "Aad, Georges and others",
      collaboration = "ATLAS",
      title     = "{Measurement of dijet production with a veto on additional central jet activity
                    in $pp$ collisions at $\sqrt{s} = 7$ TeV using the ATLAS detector}",
      year      = "2011",
      eprint    = "1107.1641",
      archivePrefix = "arXiv",
      primaryClass  =  "hep-ex",
 }'
diff --git a/data/plotinfo/ATLAS_2011_S9126244.plot b/analyses/pluginATLAS/ATLAS_2011_S9126244.plot
rename from data/plotinfo/ATLAS_2011_S9126244.plot
rename to analyses/pluginATLAS/ATLAS_2011_S9126244.plot
diff --git a/data/refdata/ATLAS_2011_S9126244.yoda b/analyses/pluginATLAS/ATLAS_2011_S9126244.yoda
rename from data/refdata/ATLAS_2011_S9126244.yoda
rename to analyses/pluginATLAS/ATLAS_2011_S9126244.yoda
diff --git a/src/Analyses/ATLAS_2011_S9128077.cc b/analyses/pluginATLAS/ATLAS_2011_S9128077.cc
rename from src/Analyses/ATLAS_2011_S9128077.cc
rename to analyses/pluginATLAS/ATLAS_2011_S9128077.cc
diff --git a/data/anainfo/ATLAS_2011_S9128077.info b/analyses/pluginATLAS/ATLAS_2011_S9128077.info
rename from data/anainfo/ATLAS_2011_S9128077.info
rename to analyses/pluginATLAS/ATLAS_2011_S9128077.info
diff --git a/data/plotinfo/ATLAS_2011_S9128077.plot b/analyses/pluginATLAS/ATLAS_2011_S9128077.plot
rename from data/plotinfo/ATLAS_2011_S9128077.plot
rename to analyses/pluginATLAS/ATLAS_2011_S9128077.plot
diff --git a/data/refdata/ATLAS_2011_S9128077.yoda b/analyses/pluginATLAS/ATLAS_2011_S9128077.yoda
rename from data/refdata/ATLAS_2011_S9128077.yoda
rename to analyses/pluginATLAS/ATLAS_2011_S9128077.yoda
diff --git a/src/Analyses/ATLAS_2011_S9131140.cc b/analyses/pluginATLAS/ATLAS_2011_S9131140.cc
rename from src/Analyses/ATLAS_2011_S9131140.cc
rename to analyses/pluginATLAS/ATLAS_2011_S9131140.cc
diff --git a/data/anainfo/ATLAS_2011_S9131140.info b/analyses/pluginATLAS/ATLAS_2011_S9131140.info
rename from data/anainfo/ATLAS_2011_S9131140.info
rename to analyses/pluginATLAS/ATLAS_2011_S9131140.info
diff --git a/data/plotinfo/ATLAS_2011_S9131140.plot b/analyses/pluginATLAS/ATLAS_2011_S9131140.plot
rename from data/plotinfo/ATLAS_2011_S9131140.plot
rename to analyses/pluginATLAS/ATLAS_2011_S9131140.plot
diff --git a/data/refdata/ATLAS_2011_S9131140.yoda b/analyses/pluginATLAS/ATLAS_2011_S9131140.yoda
rename from data/refdata/ATLAS_2011_S9131140.yoda
rename to analyses/pluginATLAS/ATLAS_2011_S9131140.yoda
diff --git a/src/Analyses/ATLAS_2011_S9212183.cc b/analyses/pluginATLAS/ATLAS_2011_S9212183.cc
rename from src/Analyses/ATLAS_2011_S9212183.cc
rename to analyses/pluginATLAS/ATLAS_2011_S9212183.cc
diff --git a/data/anainfo/ATLAS_2011_S9212183.info b/analyses/pluginATLAS/ATLAS_2011_S9212183.info
rename from data/anainfo/ATLAS_2011_S9212183.info
rename to analyses/pluginATLAS/ATLAS_2011_S9212183.info
diff --git a/data/plotinfo/ATLAS_2011_S9212183.plot b/analyses/pluginATLAS/ATLAS_2011_S9212183.plot
rename from data/plotinfo/ATLAS_2011_S9212183.plot
rename to analyses/pluginATLAS/ATLAS_2011_S9212183.plot
diff --git a/data/refdata/ATLAS_2011_S9212183.yoda b/analyses/pluginATLAS/ATLAS_2011_S9212183.yoda
rename from data/refdata/ATLAS_2011_S9212183.yoda
rename to analyses/pluginATLAS/ATLAS_2011_S9212183.yoda
diff --git a/src/Analyses/ATLAS_2011_S9212353.cc b/analyses/pluginATLAS/ATLAS_2011_S9212353.cc
rename from src/Analyses/ATLAS_2011_S9212353.cc
rename to analyses/pluginATLAS/ATLAS_2011_S9212353.cc
diff --git a/data/anainfo/ATLAS_2011_S9212353.info b/analyses/pluginATLAS/ATLAS_2011_S9212353.info
rename from data/anainfo/ATLAS_2011_S9212353.info
rename to analyses/pluginATLAS/ATLAS_2011_S9212353.info
diff --git a/data/plotinfo/ATLAS_2011_S9212353.plot b/analyses/pluginATLAS/ATLAS_2011_S9212353.plot
rename from data/plotinfo/ATLAS_2011_S9212353.plot
rename to analyses/pluginATLAS/ATLAS_2011_S9212353.plot
diff --git a/src/Analyses/ATLAS_2011_S9225137.cc b/analyses/pluginATLAS/ATLAS_2011_S9225137.cc
rename from src/Analyses/ATLAS_2011_S9225137.cc
rename to analyses/pluginATLAS/ATLAS_2011_S9225137.cc
diff --git a/data/anainfo/ATLAS_2011_S9225137.info b/analyses/pluginATLAS/ATLAS_2011_S9225137.info
rename from data/anainfo/ATLAS_2011_S9225137.info
rename to analyses/pluginATLAS/ATLAS_2011_S9225137.info
diff --git a/data/plotinfo/ATLAS_2011_S9225137.plot b/analyses/pluginATLAS/ATLAS_2011_S9225137.plot
rename from data/plotinfo/ATLAS_2011_S9225137.plot
rename to analyses/pluginATLAS/ATLAS_2011_S9225137.plot
diff --git a/data/refdata/ATLAS_2011_S9225137.yoda b/analyses/pluginATLAS/ATLAS_2011_S9225137.yoda
rename from data/refdata/ATLAS_2011_S9225137.yoda
rename to analyses/pluginATLAS/ATLAS_2011_S9225137.yoda
diff --git a/src/Analyses/ATLAS_2012_CONF_2012_001.cc b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_001.cc
rename from src/Analyses/ATLAS_2012_CONF_2012_001.cc
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_001.cc
diff --git a/data/anainfo/ATLAS_2012_CONF_2012_001.info b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_001.info
rename from data/anainfo/ATLAS_2012_CONF_2012_001.info
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_001.info
diff --git a/data/plotinfo/ATLAS_2012_CONF_2012_001.plot b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_001.plot
rename from data/plotinfo/ATLAS_2012_CONF_2012_001.plot
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_001.plot
diff --git a/data/refdata/ATLAS_2012_CONF_2012_001.yoda b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_001.yoda
rename from data/refdata/ATLAS_2012_CONF_2012_001.yoda
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_001.yoda
diff --git a/src/Analyses/ATLAS_2012_CONF_2012_103.cc b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_103.cc
rename from src/Analyses/ATLAS_2012_CONF_2012_103.cc
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_103.cc
diff --git a/data/anainfo/ATLAS_2012_CONF_2012_103.info b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_103.info
rename from data/anainfo/ATLAS_2012_CONF_2012_103.info
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_103.info
diff --git a/data/plotinfo/ATLAS_2012_CONF_2012_103.plot b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_103.plot
rename from data/plotinfo/ATLAS_2012_CONF_2012_103.plot
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_103.plot
diff --git a/src/Analyses/ATLAS_2012_CONF_2012_104.cc b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_104.cc
rename from src/Analyses/ATLAS_2012_CONF_2012_104.cc
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_104.cc
diff --git a/data/anainfo/ATLAS_2012_CONF_2012_104.info b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_104.info
rename from data/anainfo/ATLAS_2012_CONF_2012_104.info
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_104.info
diff --git a/data/plotinfo/ATLAS_2012_CONF_2012_104.plot b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_104.plot
rename from data/plotinfo/ATLAS_2012_CONF_2012_104.plot
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_104.plot
diff --git a/src/Analyses/ATLAS_2012_CONF_2012_105.cc b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_105.cc
rename from src/Analyses/ATLAS_2012_CONF_2012_105.cc
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_105.cc
diff --git a/data/anainfo/ATLAS_2012_CONF_2012_105.info b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_105.info
rename from data/anainfo/ATLAS_2012_CONF_2012_105.info
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_105.info
diff --git a/data/plotinfo/ATLAS_2012_CONF_2012_105.plot b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_105.plot
rename from data/plotinfo/ATLAS_2012_CONF_2012_105.plot
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_105.plot
diff --git a/src/Analyses/ATLAS_2012_CONF_2012_109.cc b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_109.cc
rename from src/Analyses/ATLAS_2012_CONF_2012_109.cc
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_109.cc
diff --git a/data/anainfo/ATLAS_2012_CONF_2012_109.info b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_109.info
rename from data/anainfo/ATLAS_2012_CONF_2012_109.info
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_109.info
diff --git a/data/plotinfo/ATLAS_2012_CONF_2012_109.plot b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_109.plot
rename from data/plotinfo/ATLAS_2012_CONF_2012_109.plot
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_109.plot
diff --git a/src/Analyses/ATLAS_2012_CONF_2012_153.cc b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_153.cc
rename from src/Analyses/ATLAS_2012_CONF_2012_153.cc
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_153.cc
diff --git a/data/anainfo/ATLAS_2012_CONF_2012_153.info b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_153.info
rename from data/anainfo/ATLAS_2012_CONF_2012_153.info
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_153.info
diff --git a/data/plotinfo/ATLAS_2012_CONF_2012_153.plot b/analyses/pluginATLAS/ATLAS_2012_CONF_2012_153.plot
rename from data/plotinfo/ATLAS_2012_CONF_2012_153.plot
rename to analyses/pluginATLAS/ATLAS_2012_CONF_2012_153.plot
diff --git a/src/Analyses/ATLAS_2012_I1082009.cc b/analyses/pluginATLAS/ATLAS_2012_I1082009.cc
rename from src/Analyses/ATLAS_2012_I1082009.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1082009.cc
diff --git a/data/anainfo/ATLAS_2012_I1082009.info b/analyses/pluginATLAS/ATLAS_2012_I1082009.info
rename from data/anainfo/ATLAS_2012_I1082009.info
rename to analyses/pluginATLAS/ATLAS_2012_I1082009.info
diff --git a/data/plotinfo/ATLAS_2012_I1082009.plot b/analyses/pluginATLAS/ATLAS_2012_I1082009.plot
rename from data/plotinfo/ATLAS_2012_I1082009.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1082009.plot
diff --git a/data/refdata/ATLAS_2012_I1082009.yoda b/analyses/pluginATLAS/ATLAS_2012_I1082009.yoda
rename from data/refdata/ATLAS_2012_I1082009.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1082009.yoda
diff --git a/src/Analyses/ATLAS_2012_I1082936.cc b/analyses/pluginATLAS/ATLAS_2012_I1082936.cc
rename from src/Analyses/ATLAS_2012_I1082936.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1082936.cc
diff --git a/data/anainfo/ATLAS_2012_I1082936.info b/analyses/pluginATLAS/ATLAS_2012_I1082936.info
rename from data/anainfo/ATLAS_2012_I1082936.info
rename to analyses/pluginATLAS/ATLAS_2012_I1082936.info
diff --git a/data/plotinfo/ATLAS_2012_I1082936.plot b/analyses/pluginATLAS/ATLAS_2012_I1082936.plot
rename from data/plotinfo/ATLAS_2012_I1082936.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1082936.plot
diff --git a/data/refdata/ATLAS_2012_I1082936.yoda b/analyses/pluginATLAS/ATLAS_2012_I1082936.yoda
rename from data/refdata/ATLAS_2012_I1082936.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1082936.yoda
diff --git a/src/Analyses/ATLAS_2012_I1083318.cc b/analyses/pluginATLAS/ATLAS_2012_I1083318.cc
rename from src/Analyses/ATLAS_2012_I1083318.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1083318.cc
diff --git a/data/anainfo/ATLAS_2012_I1083318.info b/analyses/pluginATLAS/ATLAS_2012_I1083318.info
rename from data/anainfo/ATLAS_2012_I1083318.info
rename to analyses/pluginATLAS/ATLAS_2012_I1083318.info
diff --git a/data/plotinfo/ATLAS_2012_I1083318.plot b/analyses/pluginATLAS/ATLAS_2012_I1083318.plot
rename from data/plotinfo/ATLAS_2012_I1083318.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1083318.plot
diff --git a/data/refdata/ATLAS_2012_I1083318.yoda b/analyses/pluginATLAS/ATLAS_2012_I1083318.yoda
rename from data/refdata/ATLAS_2012_I1083318.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1083318.yoda
diff --git a/src/Analyses/ATLAS_2012_I1084540.cc b/analyses/pluginATLAS/ATLAS_2012_I1084540.cc
rename from src/Analyses/ATLAS_2012_I1084540.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1084540.cc
diff --git a/data/anainfo/ATLAS_2012_I1084540.info b/analyses/pluginATLAS/ATLAS_2012_I1084540.info
rename from data/anainfo/ATLAS_2012_I1084540.info
rename to analyses/pluginATLAS/ATLAS_2012_I1084540.info
diff --git a/data/plotinfo/ATLAS_2012_I1084540.plot b/analyses/pluginATLAS/ATLAS_2012_I1084540.plot
rename from data/plotinfo/ATLAS_2012_I1084540.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1084540.plot
diff --git a/data/refdata/ATLAS_2012_I1084540.yoda b/analyses/pluginATLAS/ATLAS_2012_I1084540.yoda
rename from data/refdata/ATLAS_2012_I1084540.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1084540.yoda
diff --git a/src/Analyses/ATLAS_2012_I1091481.cc b/analyses/pluginATLAS/ATLAS_2012_I1091481.cc
rename from src/Analyses/ATLAS_2012_I1091481.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1091481.cc
diff --git a/data/anainfo/ATLAS_2012_I1091481.info b/analyses/pluginATLAS/ATLAS_2012_I1091481.info
rename from data/anainfo/ATLAS_2012_I1091481.info
rename to analyses/pluginATLAS/ATLAS_2012_I1091481.info
diff --git a/data/plotinfo/ATLAS_2012_I1091481.plot b/analyses/pluginATLAS/ATLAS_2012_I1091481.plot
rename from data/plotinfo/ATLAS_2012_I1091481.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1091481.plot
diff --git a/data/refdata/ATLAS_2012_I1091481.yoda b/analyses/pluginATLAS/ATLAS_2012_I1091481.yoda
rename from data/refdata/ATLAS_2012_I1091481.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1091481.yoda
diff --git a/src/Analyses/ATLAS_2012_I1093734.cc b/analyses/pluginATLAS/ATLAS_2012_I1093734.cc
rename from src/Analyses/ATLAS_2012_I1093734.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1093734.cc
diff --git a/data/anainfo/ATLAS_2012_I1093734.info b/analyses/pluginATLAS/ATLAS_2012_I1093734.info
rename from data/anainfo/ATLAS_2012_I1093734.info
rename to analyses/pluginATLAS/ATLAS_2012_I1093734.info
diff --git a/data/plotinfo/ATLAS_2012_I1093734.plot b/analyses/pluginATLAS/ATLAS_2012_I1093734.plot
rename from data/plotinfo/ATLAS_2012_I1093734.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1093734.plot
diff --git a/data/refdata/ATLAS_2012_I1093734.yoda b/analyses/pluginATLAS/ATLAS_2012_I1093734.yoda
rename from data/refdata/ATLAS_2012_I1093734.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1093734.yoda
diff --git a/src/Analyses/ATLAS_2012_I1093738.cc b/analyses/pluginATLAS/ATLAS_2012_I1093738.cc
rename from src/Analyses/ATLAS_2012_I1093738.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1093738.cc
diff --git a/data/anainfo/ATLAS_2012_I1093738.info b/analyses/pluginATLAS/ATLAS_2012_I1093738.info
rename from data/anainfo/ATLAS_2012_I1093738.info
rename to analyses/pluginATLAS/ATLAS_2012_I1093738.info
--- a/data/anainfo/ATLAS_2012_I1093738.info
+++ b/analyses/pluginATLAS/ATLAS_2012_I1093738.info
@@ -1,42 +1,41 @@
 Name: ATLAS_2012_I1093738
 Year: 2012
 Summary: Isolated prompt photon + jet cross-section
 Experiment: ATLAS
 Collider: LHC
 InspireID: 1093738
 Status: VALIDATED
 Authors:
  - Giovanni Marchiori <giovanni.marchiori@cern.ch>
 References:
  - arXiv:1203.3161 [hep-ex]
 RunInfo:
   Inclusive photon+jet+X events at $\sqrt{s} = 7$~TeV.
 NumEvents: 1000000
 Beams: [p+, p+]
 Energies: [7000]
 Description:
   'A measurement of the production cross section for isolated photons in association with jets
   in $pp$ collisions at $\sqrt{s} = 7$ TeV.
   Photons with $|\eta|<1.37$ and $E_T>25$~GeV and jets with $|y|<4.4$ and $p_T>20$ GeV
   are selected.
   The differential cross section as a function of the photon transverse energy is measured, for
   three leading jet rapidity configurations, separately for the cases where the photon and
   jet rapidities have the same or the opposite sign.
   The measurement uses 37 pb$^{-1}$ of integrated luminosity collected with the ATLAS detector.'
 NeedCrossSection: yes
 BibKey: Aad:2012cv
-BibTeX:
-'@article{Aad:2012cv,
+BibTeX: '@article{Aad:2012cv,
       author         = "Aad, Georges and others",
       title          = "{Measurement of the production cross section of an
                         isolated photon associated with jets in proton-proton
                         collisions at $\sqrt{s} = 7$ TeV with the ATLAS detector}",
       collaboration  = "ATLAS",
       year           = "2012",
       eprint         = "1203.3161",
       archivePrefix  = "arXiv",
       primaryClass   = "hep-ex",
       reportNumber   = "CERN-PH-EP-2012-009",
       SLACcitation   = "%%CITATION = ARXIV:1203.3161;%%",
 }'
 
diff --git a/data/plotinfo/ATLAS_2012_I1093738.plot b/analyses/pluginATLAS/ATLAS_2012_I1093738.plot
rename from data/plotinfo/ATLAS_2012_I1093738.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1093738.plot
diff --git a/data/refdata/ATLAS_2012_I1093738.yoda b/analyses/pluginATLAS/ATLAS_2012_I1093738.yoda
rename from data/refdata/ATLAS_2012_I1093738.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1093738.yoda
diff --git a/data/anainfo/ATLAS_2012_I1094061.info b/analyses/pluginATLAS/ATLAS_2012_I1094061.info
rename from data/anainfo/ATLAS_2012_I1094061.info
rename to analyses/pluginATLAS/ATLAS_2012_I1094061.info
diff --git a/data/plotinfo/ATLAS_2012_I1094061.plot b/analyses/pluginATLAS/ATLAS_2012_I1094061.plot
rename from data/plotinfo/ATLAS_2012_I1094061.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1094061.plot
diff --git a/data/refdata/ATLAS_2012_I1094061.yoda b/analyses/pluginATLAS/ATLAS_2012_I1094061.yoda
rename from data/refdata/ATLAS_2012_I1094061.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1094061.yoda
diff --git a/src/Analyses/ATLAS_2012_I1094564.cc b/analyses/pluginATLAS/ATLAS_2012_I1094564.cc
rename from src/Analyses/ATLAS_2012_I1094564.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1094564.cc
diff --git a/data/anainfo/ATLAS_2012_I1094564.info b/analyses/pluginATLAS/ATLAS_2012_I1094564.info
rename from data/anainfo/ATLAS_2012_I1094564.info
rename to analyses/pluginATLAS/ATLAS_2012_I1094564.info
diff --git a/data/plotinfo/ATLAS_2012_I1094564.plot b/analyses/pluginATLAS/ATLAS_2012_I1094564.plot
rename from data/plotinfo/ATLAS_2012_I1094564.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1094564.plot
diff --git a/data/refdata/ATLAS_2012_I1094564.yoda b/analyses/pluginATLAS/ATLAS_2012_I1094564.yoda
rename from data/refdata/ATLAS_2012_I1094564.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1094564.yoda
diff --git a/src/Analyses/ATLAS_2012_I1094568.cc b/analyses/pluginATLAS/ATLAS_2012_I1094568.cc
rename from src/Analyses/ATLAS_2012_I1094568.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1094568.cc
diff --git a/data/anainfo/ATLAS_2012_I1094568.info b/analyses/pluginATLAS/ATLAS_2012_I1094568.info
rename from data/anainfo/ATLAS_2012_I1094568.info
rename to analyses/pluginATLAS/ATLAS_2012_I1094568.info
diff --git a/data/plotinfo/ATLAS_2012_I1094568.plot b/analyses/pluginATLAS/ATLAS_2012_I1094568.plot
rename from data/plotinfo/ATLAS_2012_I1094568.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1094568.plot
diff --git a/data/refdata/ATLAS_2012_I1094568.yoda b/analyses/pluginATLAS/ATLAS_2012_I1094568.yoda
rename from data/refdata/ATLAS_2012_I1094568.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1094568.yoda
diff --git a/src/Analyses/ATLAS_2012_I1095236.cc b/analyses/pluginATLAS/ATLAS_2012_I1095236.cc
rename from src/Analyses/ATLAS_2012_I1095236.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1095236.cc
diff --git a/data/anainfo/ATLAS_2012_I1095236.info b/analyses/pluginATLAS/ATLAS_2012_I1095236.info
rename from data/anainfo/ATLAS_2012_I1095236.info
rename to analyses/pluginATLAS/ATLAS_2012_I1095236.info
diff --git a/data/plotinfo/ATLAS_2012_I1095236.plot b/analyses/pluginATLAS/ATLAS_2012_I1095236.plot
rename from data/plotinfo/ATLAS_2012_I1095236.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1095236.plot
diff --git a/src/Analyses/ATLAS_2012_I1112263.cc b/analyses/pluginATLAS/ATLAS_2012_I1112263.cc
rename from src/Analyses/ATLAS_2012_I1112263.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1112263.cc
diff --git a/data/anainfo/ATLAS_2012_I1112263.info b/analyses/pluginATLAS/ATLAS_2012_I1112263.info
rename from data/anainfo/ATLAS_2012_I1112263.info
rename to analyses/pluginATLAS/ATLAS_2012_I1112263.info
diff --git a/data/plotinfo/ATLAS_2012_I1112263.plot b/analyses/pluginATLAS/ATLAS_2012_I1112263.plot
rename from data/plotinfo/ATLAS_2012_I1112263.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1112263.plot
diff --git a/src/Analyses/ATLAS_2012_I1117704.cc b/analyses/pluginATLAS/ATLAS_2012_I1117704.cc
rename from src/Analyses/ATLAS_2012_I1117704.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1117704.cc
diff --git a/data/anainfo/ATLAS_2012_I1117704.info b/analyses/pluginATLAS/ATLAS_2012_I1117704.info
rename from data/anainfo/ATLAS_2012_I1117704.info
rename to analyses/pluginATLAS/ATLAS_2012_I1117704.info
diff --git a/data/plotinfo/ATLAS_2012_I1117704.plot b/analyses/pluginATLAS/ATLAS_2012_I1117704.plot
rename from data/plotinfo/ATLAS_2012_I1117704.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1117704.plot
diff --git a/src/Analyses/ATLAS_2012_I1118269.cc b/analyses/pluginATLAS/ATLAS_2012_I1118269.cc
rename from src/Analyses/ATLAS_2012_I1118269.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1118269.cc
diff --git a/data/anainfo/ATLAS_2012_I1118269.info b/analyses/pluginATLAS/ATLAS_2012_I1118269.info
rename from data/anainfo/ATLAS_2012_I1118269.info
rename to analyses/pluginATLAS/ATLAS_2012_I1118269.info
diff --git a/data/plotinfo/ATLAS_2012_I1118269.plot b/analyses/pluginATLAS/ATLAS_2012_I1118269.plot
rename from data/plotinfo/ATLAS_2012_I1118269.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1118269.plot
diff --git a/data/refdata/ATLAS_2012_I1118269.yoda b/analyses/pluginATLAS/ATLAS_2012_I1118269.yoda
rename from data/refdata/ATLAS_2012_I1118269.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1118269.yoda
diff --git a/src/Analyses/ATLAS_2012_I1119557.cc b/analyses/pluginATLAS/ATLAS_2012_I1119557.cc
rename from src/Analyses/ATLAS_2012_I1119557.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1119557.cc
diff --git a/data/anainfo/ATLAS_2012_I1119557.info b/analyses/pluginATLAS/ATLAS_2012_I1119557.info
rename from data/anainfo/ATLAS_2012_I1119557.info
rename to analyses/pluginATLAS/ATLAS_2012_I1119557.info
diff --git a/data/plotinfo/ATLAS_2012_I1119557.plot b/analyses/pluginATLAS/ATLAS_2012_I1119557.plot
rename from data/plotinfo/ATLAS_2012_I1119557.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1119557.plot
diff --git a/data/refdata/ATLAS_2012_I1119557.yoda b/analyses/pluginATLAS/ATLAS_2012_I1119557.yoda
rename from data/refdata/ATLAS_2012_I1119557.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1119557.yoda
diff --git a/src/Analyses/ATLAS_2012_I1124167.cc b/analyses/pluginATLAS/ATLAS_2012_I1124167.cc
rename from src/Analyses/ATLAS_2012_I1124167.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1124167.cc
diff --git a/data/anainfo/ATLAS_2012_I1124167.info b/analyses/pluginATLAS/ATLAS_2012_I1124167.info
rename from data/anainfo/ATLAS_2012_I1124167.info
rename to analyses/pluginATLAS/ATLAS_2012_I1124167.info
diff --git a/data/plotinfo/ATLAS_2012_I1124167.plot b/analyses/pluginATLAS/ATLAS_2012_I1124167.plot
rename from data/plotinfo/ATLAS_2012_I1124167.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1124167.plot
diff --git a/data/refdata/ATLAS_2012_I1124167.yoda b/analyses/pluginATLAS/ATLAS_2012_I1124167.yoda
rename from data/refdata/ATLAS_2012_I1124167.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1124167.yoda
diff --git a/src/Analyses/ATLAS_2012_I1125575.cc b/analyses/pluginATLAS/ATLAS_2012_I1125575.cc
rename from src/Analyses/ATLAS_2012_I1125575.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1125575.cc
diff --git a/data/anainfo/ATLAS_2012_I1125575.info b/analyses/pluginATLAS/ATLAS_2012_I1125575.info
rename from data/anainfo/ATLAS_2012_I1125575.info
rename to analyses/pluginATLAS/ATLAS_2012_I1125575.info
diff --git a/data/plotinfo/ATLAS_2012_I1125575.plot b/analyses/pluginATLAS/ATLAS_2012_I1125575.plot
rename from data/plotinfo/ATLAS_2012_I1125575.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1125575.plot
diff --git a/data/refdata/ATLAS_2012_I1125575.yoda b/analyses/pluginATLAS/ATLAS_2012_I1125575.yoda
rename from data/refdata/ATLAS_2012_I1125575.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1125575.yoda
diff --git a/src/Analyses/ATLAS_2012_I1125961.cc b/analyses/pluginATLAS/ATLAS_2012_I1125961.cc
rename from src/Analyses/ATLAS_2012_I1125961.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1125961.cc
diff --git a/data/anainfo/ATLAS_2012_I1125961.info b/analyses/pluginATLAS/ATLAS_2012_I1125961.info
rename from data/anainfo/ATLAS_2012_I1125961.info
rename to analyses/pluginATLAS/ATLAS_2012_I1125961.info
diff --git a/data/plotinfo/ATLAS_2012_I1125961.plot b/analyses/pluginATLAS/ATLAS_2012_I1125961.plot
rename from data/plotinfo/ATLAS_2012_I1125961.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1125961.plot
diff --git a/src/Analyses/ATLAS_2012_I1126136.cc b/analyses/pluginATLAS/ATLAS_2012_I1126136.cc
rename from src/Analyses/ATLAS_2012_I1126136.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1126136.cc
diff --git a/data/anainfo/ATLAS_2012_I1126136.info b/analyses/pluginATLAS/ATLAS_2012_I1126136.info
rename from data/anainfo/ATLAS_2012_I1126136.info
rename to analyses/pluginATLAS/ATLAS_2012_I1126136.info
diff --git a/data/plotinfo/ATLAS_2012_I1126136.plot b/analyses/pluginATLAS/ATLAS_2012_I1126136.plot
rename from data/plotinfo/ATLAS_2012_I1126136.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1126136.plot
diff --git a/src/Analyses/ATLAS_2012_I1180197.cc b/analyses/pluginATLAS/ATLAS_2012_I1180197.cc
rename from src/Analyses/ATLAS_2012_I1180197.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1180197.cc
diff --git a/data/anainfo/ATLAS_2012_I1180197.info b/analyses/pluginATLAS/ATLAS_2012_I1180197.info
rename from data/anainfo/ATLAS_2012_I1180197.info
rename to analyses/pluginATLAS/ATLAS_2012_I1180197.info
diff --git a/data/plotinfo/ATLAS_2012_I1180197.plot b/analyses/pluginATLAS/ATLAS_2012_I1180197.plot
rename from data/plotinfo/ATLAS_2012_I1180197.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1180197.plot
diff --git a/src/Analyses/ATLAS_2012_I1183818.cc b/analyses/pluginATLAS/ATLAS_2012_I1183818.cc
rename from src/Analyses/ATLAS_2012_I1183818.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1183818.cc
diff --git a/data/anainfo/ATLAS_2012_I1183818.info b/analyses/pluginATLAS/ATLAS_2012_I1183818.info
rename from data/anainfo/ATLAS_2012_I1183818.info
rename to analyses/pluginATLAS/ATLAS_2012_I1183818.info
diff --git a/data/plotinfo/ATLAS_2012_I1183818.plot b/analyses/pluginATLAS/ATLAS_2012_I1183818.plot
rename from data/plotinfo/ATLAS_2012_I1183818.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1183818.plot
diff --git a/data/refdata/ATLAS_2012_I1183818.yoda b/analyses/pluginATLAS/ATLAS_2012_I1183818.yoda
rename from data/refdata/ATLAS_2012_I1183818.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1183818.yoda
diff --git a/src/Analyses/ATLAS_2012_I1186556.cc b/analyses/pluginATLAS/ATLAS_2012_I1186556.cc
rename from src/Analyses/ATLAS_2012_I1186556.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1186556.cc
diff --git a/data/anainfo/ATLAS_2012_I1186556.info b/analyses/pluginATLAS/ATLAS_2012_I1186556.info
rename from data/anainfo/ATLAS_2012_I1186556.info
rename to analyses/pluginATLAS/ATLAS_2012_I1186556.info
diff --git a/data/plotinfo/ATLAS_2012_I1186556.plot b/analyses/pluginATLAS/ATLAS_2012_I1186556.plot
rename from data/plotinfo/ATLAS_2012_I1186556.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1186556.plot
diff --git a/src/Analyses/ATLAS_2012_I1188891.cc b/analyses/pluginATLAS/ATLAS_2012_I1188891.cc
rename from src/Analyses/ATLAS_2012_I1188891.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1188891.cc
diff --git a/data/anainfo/ATLAS_2012_I1188891.info b/analyses/pluginATLAS/ATLAS_2012_I1188891.info
rename from data/anainfo/ATLAS_2012_I1188891.info
rename to analyses/pluginATLAS/ATLAS_2012_I1188891.info
diff --git a/data/plotinfo/ATLAS_2012_I1188891.plot b/analyses/pluginATLAS/ATLAS_2012_I1188891.plot
rename from data/plotinfo/ATLAS_2012_I1188891.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1188891.plot
diff --git a/data/refdata/ATLAS_2012_I1188891.yoda b/analyses/pluginATLAS/ATLAS_2012_I1188891.yoda
rename from data/refdata/ATLAS_2012_I1188891.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1188891.yoda
diff --git a/src/Analyses/ATLAS_2012_I1190891.cc b/analyses/pluginATLAS/ATLAS_2012_I1190891.cc
rename from src/Analyses/ATLAS_2012_I1190891.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1190891.cc
diff --git a/data/anainfo/ATLAS_2012_I1190891.info b/analyses/pluginATLAS/ATLAS_2012_I1190891.info
rename from data/anainfo/ATLAS_2012_I1190891.info
rename to analyses/pluginATLAS/ATLAS_2012_I1190891.info
diff --git a/data/plotinfo/ATLAS_2012_I1190891.plot b/analyses/pluginATLAS/ATLAS_2012_I1190891.plot
rename from data/plotinfo/ATLAS_2012_I1190891.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1190891.plot
diff --git a/src/Analyses/ATLAS_2012_I1199269.cc b/analyses/pluginATLAS/ATLAS_2012_I1199269.cc
rename from src/Analyses/ATLAS_2012_I1199269.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1199269.cc
diff --git a/data/anainfo/ATLAS_2012_I1199269.info b/analyses/pluginATLAS/ATLAS_2012_I1199269.info
rename from data/anainfo/ATLAS_2012_I1199269.info
rename to analyses/pluginATLAS/ATLAS_2012_I1199269.info
diff --git a/data/plotinfo/ATLAS_2012_I1199269.plot b/analyses/pluginATLAS/ATLAS_2012_I1199269.plot
rename from data/plotinfo/ATLAS_2012_I1199269.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1199269.plot
diff --git a/data/refdata/ATLAS_2012_I1199269.yoda b/analyses/pluginATLAS/ATLAS_2012_I1199269.yoda
rename from data/refdata/ATLAS_2012_I1199269.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1199269.yoda
diff --git a/src/Analyses/ATLAS_2012_I1203852.cc b/analyses/pluginATLAS/ATLAS_2012_I1203852.cc
rename from src/Analyses/ATLAS_2012_I1203852.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1203852.cc
--- a/src/Analyses/ATLAS_2012_I1203852.cc
+++ b/analyses/pluginATLAS/ATLAS_2012_I1203852.cc
@@ -1,378 +1,378 @@
 // -*- C++ -*-
 #include "Rivet/Analysis.hh"
 #include "Rivet/Projections/FastJets.hh"
 #include "Rivet/Projections/FinalState.hh"
 #include "Rivet/Projections/IdentifiedFinalState.hh"
 #include "Rivet/Projections/WFinder.hh"
 #include "Rivet/Projections/LeadingParticlesFinalState.hh"
 #include "Rivet/Projections/UnstableFinalState.hh"
 #include "Rivet/Projections/VetoedFinalState.hh"
 #include "Rivet/Projections/DressedLeptons.hh"
 #include "Rivet/Projections/MergedFinalState.hh"
 #include "Rivet/Projections/MissingMomentum.hh"
 #include "Rivet/Projections/InvMassFinalState.hh"
 
-#define ZMASS 91.1876 // GeV
-
 namespace Rivet {
 
 
   /// Generic Z candidate
   struct Zstate : public ParticlePair {
     Zstate() { }
     Zstate(ParticlePair _particlepair) : ParticlePair(_particlepair) { }
     FourMomentum mom() const { return first.momentum() + second.momentum(); }
     operator FourMomentum() const { return mom(); }
     static bool cmppT(const Zstate& lx, const Zstate& rx) { return lx.mom().pT() < rx.mom().pT(); }
   };
 
 
   /// 4l to ZZ assignment -- algorithm
-  void identifyZstates(Zstate& Z1, Zstate& Z2, const Particles& leptons_sel4l) {
+  void identifyZstates(Zstate& Z1, Zstate& Z2, const Particles& leptons_sel4l, const double ZMASS) {
 
     /////////////////////////////////////////////////////////////////////////////
     /// ZZ->4l pairing
     /// - Exactly two same flavour opposite charged leptons
     /// - Ambiguities in pairing are resolved by choosing the combination
     ///     that results in the smaller value of the sum |mll - mZ| for the two pairs
     /////////////////////////////////////////////////////////////////////////////
 
     Particles part_pos_el, part_neg_el, part_pos_mu, part_neg_mu;
     foreach (const Particle& l , leptons_sel4l) {
       if (l.abspid() == PID::ELECTRON) {
         if (l.pid() < 0) part_neg_el.push_back(l);
         if (l.pid() > 0) part_pos_el.push_back(l);
       }
       else if (l.abspid() == PID::MUON) {
         if (l.pid() < 0) part_neg_mu.push_back(l);
         if (l.pid() > 0) part_pos_mu.push_back(l);
       }
     }
 
     // ee/mm channel
     if ( part_neg_el.size() == 2 || part_neg_mu.size() == 2) {
 
       Zstate Zcand_1, Zcand_2, Zcand_3, Zcand_4;
       if (part_neg_el.size() == 2) { // ee
         Zcand_1 = Zstate( ParticlePair( part_neg_el[0],  part_pos_el[0] ) );
         Zcand_2 = Zstate( ParticlePair( part_neg_el[0],  part_pos_el[1] ) );
         Zcand_3 = Zstate( ParticlePair( part_neg_el[1],  part_pos_el[0] ) );
         Zcand_4 = Zstate( ParticlePair( part_neg_el[1],  part_pos_el[1] ) );
       } else { // mumu
         Zcand_1 = Zstate( ParticlePair( part_neg_mu[0],  part_pos_mu[0] ) );
         Zcand_2 = Zstate( ParticlePair( part_neg_mu[0],  part_pos_mu[1] ) );
         Zcand_3 = Zstate( ParticlePair( part_neg_mu[1],  part_pos_mu[0] ) );
         Zcand_4 = Zstate( ParticlePair( part_neg_mu[1],  part_pos_mu[1] ) );
       }
 
       // We can have the following pairs: (Z1 + Z4) || (Z2 + Z3)
       double minValue_1, minValue_2;
       minValue_1 = fabs( Zcand_1.mom().mass() - ZMASS ) + fabs( Zcand_4.mom().mass() - ZMASS);
       minValue_2 = fabs( Zcand_2.mom().mass() - ZMASS ) + fabs( Zcand_3.mom().mass() - ZMASS);
       if (minValue_1 < minValue_2 ) {
         Z1 = Zcand_1;
         Z2 = Zcand_4;
       } else {
         Z1 = Zcand_2;
         Z2 = Zcand_3;
       }
 
     // emu channel
     } else if (part_neg_mu.size() == 1 && part_neg_el.size() == 1) {
       Z1 = Zstate ( ParticlePair (part_neg_mu[0],  part_pos_mu[0] ) );
       Z2 = Zstate ( ParticlePair (part_neg_el[0],  part_pos_el[0] ) );
     }
 
   }
 
 
   /// @name ZZ analysis
   class ATLAS_2012_I1203852 : public Analysis {
   public:
 
     /// Default constructor
     ATLAS_2012_I1203852()
       : Analysis("ATLAS_2012_I1203852")
     {    }
 
     void init() {
       FinalState fs(-5.0, 5.0, 0.0*GeV);
 
       // Final states to form Z bosons
       vids.push_back(make_pair(PID::ELECTRON, PID::POSITRON));
       vids.push_back(make_pair(PID::MUON, PID::ANTIMUON));
 
       vnuids.push_back(make_pair(PID::NU_E, PID::NU_EBAR) );
       vnuids.push_back(make_pair(PID::NU_MU, PID::NU_MUBAR) );
       vnuids.push_back(make_pair(PID::NU_TAU, PID::NU_TAUBAR) );
 
       IdentifiedFinalState Photon(fs);
       Photon.acceptIdPair(PID::PHOTON);
 
       IdentifiedFinalState bare_EL(fs);
       bare_EL.acceptIdPair(PID::ELECTRON);
 
       IdentifiedFinalState bare_MU(fs);
       bare_MU.acceptIdPair(PID::MUON);
 
 
       // Selection 1: ZZ-> llll selection
       Cut etaranges_lep = Cuts::abseta < 3.16 && Cuts::pT > 7*GeV;
 
       DressedLeptons electron_sel4l(Photon, bare_EL, 0.1, etaranges_lep);
       declare(electron_sel4l, "ELECTRON_sel4l");
       DressedLeptons muon_sel4l(Photon, bare_MU, 0.1, etaranges_lep);
       declare(muon_sel4l, "MUON_sel4l");
 
 
       // Selection 2: ZZ-> llnunu selection
       Cut etaranges_lep2 = Cuts::abseta < 2.5 && Cuts::pT > 10*GeV;
 
       DressedLeptons electron_sel2l2nu(Photon, bare_EL, 0.1, etaranges_lep2);
       declare(electron_sel2l2nu, "ELECTRON_sel2l2nu");
       DressedLeptons muon_sel2l2nu(Photon, bare_MU, 0.1, etaranges_lep2);
       declare(muon_sel2l2nu, "MUON_sel2l2nu");
 
 
       /// Get all neutrinos. These will not be used to form jets.
       /// We'll use the highest 2 pT neutrinos to calculate the MET
       IdentifiedFinalState neutrino_fs(Cuts::abseta < 4.5);
       neutrino_fs.acceptNeutrinos();
       declare(neutrino_fs, "NEUTRINO_FS");
 
       VetoedFinalState jetinput;
       jetinput.addVetoOnThisFinalState(bare_MU);
       jetinput.addVetoOnThisFinalState(neutrino_fs);
 
       FastJets jetpro(fs, FastJets::ANTIKT, 0.4);
       declare(jetpro, "jet");
 
       // Both ZZ on-shell histos
       _h_ZZ_xsect = bookHisto1D(1, 1, 1);
       _h_ZZ_ZpT   = bookHisto1D(3, 1, 1);
       _h_ZZ_phill = bookHisto1D(5, 1, 1);
       _h_ZZ_mZZ   = bookHisto1D(7, 1, 1);
 
       // One Z off-shell (ZZstar) histos
       _h_ZZs_xsect = bookHisto1D(1, 1, 2);
 
       // ZZ -> llnunu histos
       _h_ZZnunu_xsect = bookHisto1D(1, 1, 3);
       _h_ZZnunu_ZpT   = bookHisto1D(4, 1, 1);
       _h_ZZnunu_phill = bookHisto1D(6, 1, 1);
       _h_ZZnunu_mZZ   = bookHisto1D(8, 1, 1);
     }
 
 
     /// Do the analysis
     void analyze(const Event& e) {
       const double weight = e.weight();
 
       ////////////////////////////////////////////////////////////////////
       // preselection of leptons for ZZ-> llll final state
       ////////////////////////////////////////////////////////////////////
 
       Particles leptons_sel4l;
 
       const vector<DressedLepton>& mu_sel4l = apply<DressedLeptons>(e, "MUON_sel4l").dressedLeptons();
       const vector<DressedLepton>& el_sel4l = apply<DressedLeptons>(e, "ELECTRON_sel4l").dressedLeptons();
 
       vector<DressedLepton> leptonsFS_sel4l;
       leptonsFS_sel4l.insert( leptonsFS_sel4l.end(), mu_sel4l.begin(), mu_sel4l.end() );
       leptonsFS_sel4l.insert( leptonsFS_sel4l.end(), el_sel4l.begin(), el_sel4l.end() );
 
       ////////////////////////////////////////////////////////////////////
       // OVERLAP removal dR(l,l)>0.2
       ////////////////////////////////////////////////////////////////////
       foreach ( const DressedLepton& l1, leptonsFS_sel4l) {
         bool isolated = true;
         foreach (DressedLepton& l2, leptonsFS_sel4l) {
           const double dR = deltaR(l1, l2);
           if (dR < 0.2 && l1 != l2) { isolated = false; break; }
         }
         if (isolated) leptons_sel4l.push_back(l1);
       }
 
       //////////////////////////////////////////////////////////////////
       // Exactly two opposite charged leptons
       //////////////////////////////////////////////////////////////////
 
       // calculate total 'flavour' charge
       double totalcharge = 0;
       foreach (Particle& l, leptons_sel4l) totalcharge += l.pid();
 
       // Analyze 4 lepton events
       if (leptons_sel4l.size() == 4 && totalcharge == 0  ) {
         Zstate Z1, Z2;
 
         // Identifies Z states from 4 lepton pairs
-        identifyZstates(Z1, Z2,leptons_sel4l);
+        identifyZstates(Z1, Z2,leptons_sel4l, ZMASS);
 
         ////////////////////////////////////////////////////////////////////////////
         // Z MASS WINDOW
         //  -ZZ: for both Z: 66<mZ<116 GeV
         //  -ZZ*: one Z on-shell: 66<mZ<116 GeV, one Z off-shell: mZ>20 GeV
         ///////////////////////////////////////////////////////////////////////////
 
         Zstate leadPtZ = std::max(Z1, Z2, Zstate::cmppT);
 
         double mZ1   = Z1.mom().mass();
         double mZ2   = Z2.mom().mass();
         double ZpT   = leadPtZ.mom().pT();
         double phill = fabs(deltaPhi(leadPtZ.first, leadPtZ.second));
         if (phill > M_PI) phill = 2*M_PI-phill;
         double mZZ   = (Z1.mom() + Z2.mom()).mass();
 
         if (mZ1 > 20*GeV && mZ2 > 20*GeV) {
           // ZZ* selection
           if (inRange(mZ1, 66*GeV, 116*GeV) || inRange(mZ2, 66*GeV, 116*GeV)) {
             _h_ZZs_xsect  -> fill(sqrtS()*GeV,  weight);
           }
 
           // ZZ selection
           if (inRange(mZ1, 66*GeV, 116*GeV) && inRange(mZ2, 66*GeV, 116*GeV)) {
             _h_ZZ_xsect  -> fill(sqrtS()*GeV,  weight);
             _h_ZZ_ZpT    -> fill(ZpT   , weight);
             _h_ZZ_phill  -> fill(phill , weight);
             _h_ZZ_mZZ    -> fill(mZZ   , weight);
           }
         }
       }
 
       ////////////////////////////////////////////////////////////////////
       /// preselection of leptons for ZZ-> llnunu final state
       ////////////////////////////////////////////////////////////////////
 
       Particles leptons_sel2l2nu; // output
       const vector<DressedLepton>& mu_sel2l2nu = apply<DressedLeptons>(e, "MUON_sel2l2nu").dressedLeptons();
       const vector<DressedLepton>& el_sel2l2nu = apply<DressedLeptons>(e, "ELECTRON_sel2l2nu").dressedLeptons();
 
       vector<DressedLepton> leptonsFS_sel2l2nu;
       leptonsFS_sel2l2nu.insert( leptonsFS_sel2l2nu.end(), mu_sel2l2nu.begin(), mu_sel2l2nu.end() );
       leptonsFS_sel2l2nu.insert( leptonsFS_sel2l2nu.end(), el_sel2l2nu.begin(), el_sel2l2nu.end() );
 
       // Lepton preselection for ZZ-> llnunu
       if ((mu_sel2l2nu.empty() || el_sel2l2nu.empty()) // cannot have opposite flavour
            && (leptonsFS_sel2l2nu.size() == 2) // exactly two leptons
            && (leptonsFS_sel2l2nu[0].charge() * leptonsFS_sel2l2nu[1].charge() < 1 ) // opposite charge
            && (deltaR(leptonsFS_sel2l2nu[0], leptonsFS_sel2l2nu[1]) > 0.3) // overlap removal
            && (leptonsFS_sel2l2nu[0].pT() > 20*GeV && leptonsFS_sel2l2nu[1].pT() > 20*GeV)) { // trigger requirement
         leptons_sel2l2nu.insert(leptons_sel2l2nu.end(), leptonsFS_sel2l2nu.begin(), leptonsFS_sel2l2nu.end());
       }
       if (leptons_sel2l2nu.empty()) vetoEvent; // no further analysis, fine to veto
 
       Particles leptons_sel2l2nu_jetveto;
       foreach (const DressedLepton& l, mu_sel2l2nu) leptons_sel2l2nu_jetveto.push_back(l.constituentLepton());
       foreach (const DressedLepton& l, el_sel2l2nu) leptons_sel2l2nu_jetveto.push_back(l.constituentLepton());
       double ptll = (leptons_sel2l2nu[0].momentum() + leptons_sel2l2nu[1].momentum()).pT();
 
       // Find Z1-> ll
       FinalState fs2(-3.2, 3.2);
       InvMassFinalState imfs(fs2, vids, 20*GeV, sqrtS());
       imfs.calc(leptons_sel2l2nu);
       if (imfs.particlePairs().size() != 1) vetoEvent;
       const ParticlePair& Z1constituents = imfs.particlePairs()[0];
       FourMomentum Z1 = Z1constituents.first.momentum() + Z1constituents.second.momentum();
 
       // Find Z2-> nunu
       const Particles& neutrinoFS = apply<IdentifiedFinalState>(e, "NEUTRINO_FS").particlesByPt();
       FinalState fs3(-4.5, 4.5);
       InvMassFinalState imfs_Znunu(fs3, vnuids, 20*GeV, sqrtS(), ZMASS);
       imfs_Znunu.calc(neutrinoFS);
       if (imfs_Znunu.particlePairs().size() == 0 ) vetoEvent;
 
       // Z to neutrinos
       FourMomentum Z2 = imfs_Znunu.particlePairs()[0].first.momentum() + imfs_Znunu.particlePairs()[0].second.momentum();
       double met_Znunu = Z2.pT();
 
       // mTZZ
       const double mT2_1st_term = add_quad(ZMASS, ptll) + add_quad(ZMASS, met_Znunu);
       const double mT2_2nd_term = Z1.px() + Z2.px();
       const double mT2_3rd_term = Z1.py() + Z2.py();
       const double mTZZ = sqrt(sqr(mT2_1st_term) - sqr(mT2_2nd_term) - sqr(mT2_3rd_term));
 
       if (!inRange(Z2.mass(), 66*GeV, 116*GeV)) vetoEvent;
       if (!inRange(Z1.mass(), 76*GeV, 106*GeV)) vetoEvent;
 
       /////////////////////////////////////////////////////////////
       // AXIAL MET < 75 GeV
       ////////////////////////////////////////////////////////////
 
       double dPhiZ1Z2 = fabs(deltaPhi(Z1, Z2));
       if (dPhiZ1Z2 > M_PI) dPhiZ1Z2 = 2*M_PI - dPhiZ1Z2;
       const double axialEtmiss = -Z2.pT()*cos(dPhiZ1Z2);
       if (axialEtmiss < 75*GeV) vetoEvent;
 
       const double ZpT   = Z1.pT();
       double phill = fabs(deltaPhi(Z1constituents.first, Z1constituents.second));
       if (phill > M_PI) phill = 2*M_PI - phill;
 
 
       ////////////////////////////////////////////////////////////////////////////
       // JETS
       //    -"j": found by "jetpro" projection && pT() > 25 GeV && |eta| < 4.5
       //    -"goodjets": "j"  && dR(electron/muon,jet) > 0.3
       //
       // JETVETO: veto all events with at least one good jet
       ///////////////////////////////////////////////////////////////////////////
       vector<Jet> good_jets;
       foreach (const Jet& j, apply<FastJets>(e, "jet").jetsByPt(25)) {
         if (j.abseta() > 4.5) continue;
         bool isLepton = 0;
         foreach (const Particle& l, leptons_sel2l2nu_jetveto) {
           const double dR = deltaR(l.momentum(), j.momentum());
           if (dR < 0.3) { isLepton = true; break; }
         }
         if (!isLepton) good_jets.push_back(j);
       }
       size_t n_sel_jets = good_jets.size();
       if (n_sel_jets != 0) vetoEvent;
 
 
       /////////////////////////////////////////////////////////////
       // Fractional MET and lepton pair difference: "RatioMet"< 0.4
       ////////////////////////////////////////////////////////////
       double ratioMet = fabs(Z2.pT() - Z1.pT()) / Z1.pT();
       if (ratioMet  > 0.4 ) vetoEvent;
 
 
       // End of ZZllnunu selection: now fill histograms
       _h_ZZnunu_xsect->fill(sqrtS()/GeV, weight);
       _h_ZZnunu_ZpT  ->fill(ZpT, weight);
       _h_ZZnunu_phill->fill(phill, weight);
       _h_ZZnunu_mZZ  ->fill(mTZZ, weight);
 
     }
 
 
     /// Finalize
     void finalize() {
       const double norm = crossSection()/sumOfWeights()/femtobarn;
 
       scale(_h_ZZ_xsect, norm);
       normalize(_h_ZZ_ZpT);
       normalize(_h_ZZ_phill);
       normalize(_h_ZZ_mZZ);
 
       scale(_h_ZZs_xsect, norm);
       scale(_h_ZZnunu_xsect, norm);
       normalize(_h_ZZnunu_ZpT);
       normalize(_h_ZZnunu_phill);
       normalize(_h_ZZnunu_mZZ);
     }
 
 
   private:
 
+    const double ZMASS = 91.1876; // GeV
+
     Histo1DPtr _h_ZZ_xsect, _h_ZZ_ZpT, _h_ZZ_phill, _h_ZZ_mZZ;
     Histo1DPtr _h_ZZs_xsect;
     Histo1DPtr _h_ZZnunu_xsect, _h_ZZnunu_ZpT, _h_ZZnunu_phill, _h_ZZnunu_mZZ;
     vector< pair<PdgId,PdgId> > vids, vnuids;
 
   };
 
 
   // The hook for the plugin system
   DECLARE_RIVET_PLUGIN(ATLAS_2012_I1203852);
 
 }
diff --git a/data/anainfo/ATLAS_2012_I1203852.info b/analyses/pluginATLAS/ATLAS_2012_I1203852.info
rename from data/anainfo/ATLAS_2012_I1203852.info
rename to analyses/pluginATLAS/ATLAS_2012_I1203852.info
diff --git a/data/plotinfo/ATLAS_2012_I1203852.plot b/analyses/pluginATLAS/ATLAS_2012_I1203852.plot
rename from data/plotinfo/ATLAS_2012_I1203852.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1203852.plot
diff --git a/data/refdata/ATLAS_2012_I1203852.yoda b/analyses/pluginATLAS/ATLAS_2012_I1203852.yoda
rename from data/refdata/ATLAS_2012_I1203852.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1203852.yoda
diff --git a/src/Analyses/ATLAS_2012_I1204447.cc b/analyses/pluginATLAS/ATLAS_2012_I1204447.cc
rename from src/Analyses/ATLAS_2012_I1204447.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1204447.cc
diff --git a/data/anainfo/ATLAS_2012_I1204447.info b/analyses/pluginATLAS/ATLAS_2012_I1204447.info
rename from data/anainfo/ATLAS_2012_I1204447.info
rename to analyses/pluginATLAS/ATLAS_2012_I1204447.info
diff --git a/data/plotinfo/ATLAS_2012_I1204447.plot b/analyses/pluginATLAS/ATLAS_2012_I1204447.plot
rename from data/plotinfo/ATLAS_2012_I1204447.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1204447.plot
diff --git a/src/Analyses/ATLAS_2012_I1204784.cc b/analyses/pluginATLAS/ATLAS_2012_I1204784.cc
rename from src/Analyses/ATLAS_2012_I1204784.cc
rename to analyses/pluginATLAS/ATLAS_2012_I1204784.cc
diff --git a/data/anainfo/ATLAS_2012_I1204784.info b/analyses/pluginATLAS/ATLAS_2012_I1204784.info
rename from data/anainfo/ATLAS_2012_I1204784.info
rename to analyses/pluginATLAS/ATLAS_2012_I1204784.info
diff --git a/data/plotinfo/ATLAS_2012_I1204784.plot b/analyses/pluginATLAS/ATLAS_2012_I1204784.plot
rename from data/plotinfo/ATLAS_2012_I1204784.plot
rename to analyses/pluginATLAS/ATLAS_2012_I1204784.plot
diff --git a/data/refdata/ATLAS_2012_I1204784.yoda b/analyses/pluginATLAS/ATLAS_2012_I1204784.yoda
rename from data/refdata/ATLAS_2012_I1204784.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I1204784.yoda
diff --git a/src/Analyses/ATLAS_2012_I943401.cc b/analyses/pluginATLAS/ATLAS_2012_I943401.cc
rename from src/Analyses/ATLAS_2012_I943401.cc
rename to analyses/pluginATLAS/ATLAS_2012_I943401.cc
diff --git a/data/anainfo/ATLAS_2012_I943401.info b/analyses/pluginATLAS/ATLAS_2012_I943401.info
rename from data/anainfo/ATLAS_2012_I943401.info
rename to analyses/pluginATLAS/ATLAS_2012_I943401.info
diff --git a/data/plotinfo/ATLAS_2012_I943401.plot b/analyses/pluginATLAS/ATLAS_2012_I943401.plot
rename from data/plotinfo/ATLAS_2012_I943401.plot
rename to analyses/pluginATLAS/ATLAS_2012_I943401.plot
diff --git a/data/refdata/ATLAS_2012_I943401.yoda b/analyses/pluginATLAS/ATLAS_2012_I943401.yoda
rename from data/refdata/ATLAS_2012_I943401.yoda
rename to analyses/pluginATLAS/ATLAS_2012_I943401.yoda
diff --git a/src/Analyses/ATLAS_2012_I946427.cc b/analyses/pluginATLAS/ATLAS_2012_I946427.cc
rename from src/Analyses/ATLAS_2012_I946427.cc
rename to analyses/pluginATLAS/ATLAS_2012_I946427.cc
diff --git a/data/anainfo/ATLAS_2012_I946427.info b/analyses/pluginATLAS/ATLAS_2012_I946427.info
rename from data/anainfo/ATLAS_2012_I946427.info
rename to analyses/pluginATLAS/ATLAS_2012_I946427.info
diff --git a/data/plotinfo/ATLAS_2012_I946427.plot b/analyses/pluginATLAS/ATLAS_2012_I946427.plot
rename from data/plotinfo/ATLAS_2012_I946427.plot
rename to analyses/pluginATLAS/ATLAS_2012_I946427.plot
diff --git a/src/Analyses/ATLAS_2013_I1190187.cc b/analyses/pluginATLAS/ATLAS_2013_I1190187.cc
rename from src/Analyses/ATLAS_2013_I1190187.cc
rename to analyses/pluginATLAS/ATLAS_2013_I1190187.cc
diff --git a/data/anainfo/ATLAS_2013_I1190187.info b/analyses/pluginATLAS/ATLAS_2013_I1190187.info
rename from data/anainfo/ATLAS_2013_I1190187.info
rename to analyses/pluginATLAS/ATLAS_2013_I1190187.info
diff --git a/data/plotinfo/ATLAS_2013_I1190187.plot b/analyses/pluginATLAS/ATLAS_2013_I1190187.plot
rename from data/plotinfo/ATLAS_2013_I1190187.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1190187.plot
diff --git a/data/refdata/ATLAS_2013_I1190187.yoda b/analyses/pluginATLAS/ATLAS_2013_I1190187.yoda
rename from data/refdata/ATLAS_2013_I1190187.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1190187.yoda
diff --git a/src/Analyses/ATLAS_2013_I1216670.cc b/analyses/pluginATLAS/ATLAS_2013_I1216670.cc
rename from src/Analyses/ATLAS_2013_I1216670.cc
rename to analyses/pluginATLAS/ATLAS_2013_I1216670.cc
diff --git a/data/anainfo/ATLAS_2013_I1216670.info b/analyses/pluginATLAS/ATLAS_2013_I1216670.info
rename from data/anainfo/ATLAS_2013_I1216670.info
rename to analyses/pluginATLAS/ATLAS_2013_I1216670.info
diff --git a/data/plotinfo/ATLAS_2013_I1216670.plot b/analyses/pluginATLAS/ATLAS_2013_I1216670.plot
rename from data/plotinfo/ATLAS_2013_I1216670.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1216670.plot
diff --git a/data/refdata/ATLAS_2013_I1216670.yoda b/analyses/pluginATLAS/ATLAS_2013_I1216670.yoda
rename from data/refdata/ATLAS_2013_I1216670.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1216670.yoda
diff --git a/src/Analyses/ATLAS_2013_I1217863_W.cc b/analyses/pluginATLAS/ATLAS_2013_I1217863_W.cc
rename from src/Analyses/ATLAS_2013_I1217863_W.cc
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_W.cc
diff --git a/data/anainfo/ATLAS_2013_I1217863_W.info b/analyses/pluginATLAS/ATLAS_2013_I1217863_W.info
rename from data/anainfo/ATLAS_2013_I1217863_W.info
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_W.info
diff --git a/data/plotinfo/ATLAS_2013_I1217863_W.plot b/analyses/pluginATLAS/ATLAS_2013_I1217863_W.plot
rename from data/plotinfo/ATLAS_2013_I1217863_W.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_W.plot
diff --git a/data/refdata/ATLAS_2013_I1217863_W.yoda b/analyses/pluginATLAS/ATLAS_2013_I1217863_W.yoda
rename from data/refdata/ATLAS_2013_I1217863_W.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_W.yoda
diff --git a/data/anainfo/ATLAS_2013_I1217863_W_EL.info b/analyses/pluginATLAS/ATLAS_2013_I1217863_W_EL.info
rename from data/anainfo/ATLAS_2013_I1217863_W_EL.info
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_W_EL.info
diff --git a/data/plotinfo/ATLAS_2013_I1217863_W_EL.plot b/analyses/pluginATLAS/ATLAS_2013_I1217863_W_EL.plot
rename from data/plotinfo/ATLAS_2013_I1217863_W_EL.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_W_EL.plot
diff --git a/data/refdata/ATLAS_2013_I1217863_W_EL.yoda b/analyses/pluginATLAS/ATLAS_2013_I1217863_W_EL.yoda
rename from data/refdata/ATLAS_2013_I1217863_W_EL.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_W_EL.yoda
diff --git a/data/anainfo/ATLAS_2013_I1217863_W_MU.info b/analyses/pluginATLAS/ATLAS_2013_I1217863_W_MU.info
rename from data/anainfo/ATLAS_2013_I1217863_W_MU.info
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_W_MU.info
diff --git a/data/plotinfo/ATLAS_2013_I1217863_W_MU.plot b/analyses/pluginATLAS/ATLAS_2013_I1217863_W_MU.plot
rename from data/plotinfo/ATLAS_2013_I1217863_W_MU.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_W_MU.plot
diff --git a/data/refdata/ATLAS_2013_I1217863_W_MU.yoda b/analyses/pluginATLAS/ATLAS_2013_I1217863_W_MU.yoda
rename from data/refdata/ATLAS_2013_I1217863_W_MU.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_W_MU.yoda
diff --git a/src/Analyses/ATLAS_2013_I1217863_Z.cc b/analyses/pluginATLAS/ATLAS_2013_I1217863_Z.cc
rename from src/Analyses/ATLAS_2013_I1217863_Z.cc
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_Z.cc
diff --git a/data/anainfo/ATLAS_2013_I1217863_Z.info b/analyses/pluginATLAS/ATLAS_2013_I1217863_Z.info
rename from data/anainfo/ATLAS_2013_I1217863_Z.info
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_Z.info
diff --git a/data/plotinfo/ATLAS_2013_I1217863_Z.plot b/analyses/pluginATLAS/ATLAS_2013_I1217863_Z.plot
rename from data/plotinfo/ATLAS_2013_I1217863_Z.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_Z.plot
diff --git a/data/refdata/ATLAS_2013_I1217863_Z.yoda b/analyses/pluginATLAS/ATLAS_2013_I1217863_Z.yoda
rename from data/refdata/ATLAS_2013_I1217863_Z.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_Z.yoda
diff --git a/data/anainfo/ATLAS_2013_I1217863_Z_EL.info b/analyses/pluginATLAS/ATLAS_2013_I1217863_Z_EL.info
rename from data/anainfo/ATLAS_2013_I1217863_Z_EL.info
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_Z_EL.info
diff --git a/data/plotinfo/ATLAS_2013_I1217863_Z_EL.plot b/analyses/pluginATLAS/ATLAS_2013_I1217863_Z_EL.plot
rename from data/plotinfo/ATLAS_2013_I1217863_Z_EL.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_Z_EL.plot
diff --git a/data/refdata/ATLAS_2013_I1217863_Z_EL.yoda b/analyses/pluginATLAS/ATLAS_2013_I1217863_Z_EL.yoda
rename from data/refdata/ATLAS_2013_I1217863_Z_EL.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_Z_EL.yoda
diff --git a/data/anainfo/ATLAS_2013_I1217863_Z_MU.info b/analyses/pluginATLAS/ATLAS_2013_I1217863_Z_MU.info
rename from data/anainfo/ATLAS_2013_I1217863_Z_MU.info
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_Z_MU.info
diff --git a/data/plotinfo/ATLAS_2013_I1217863_Z_MU.plot b/analyses/pluginATLAS/ATLAS_2013_I1217863_Z_MU.plot
rename from data/plotinfo/ATLAS_2013_I1217863_Z_MU.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_Z_MU.plot
diff --git a/data/refdata/ATLAS_2013_I1217863_Z_MU.yoda b/analyses/pluginATLAS/ATLAS_2013_I1217863_Z_MU.yoda
rename from data/refdata/ATLAS_2013_I1217863_Z_MU.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1217863_Z_MU.yoda
diff --git a/src/Analyses/ATLAS_2013_I1217867.cc b/analyses/pluginATLAS/ATLAS_2013_I1217867.cc
rename from src/Analyses/ATLAS_2013_I1217867.cc
rename to analyses/pluginATLAS/ATLAS_2013_I1217867.cc
diff --git a/data/anainfo/ATLAS_2013_I1217867.info b/analyses/pluginATLAS/ATLAS_2013_I1217867.info
rename from data/anainfo/ATLAS_2013_I1217867.info
rename to analyses/pluginATLAS/ATLAS_2013_I1217867.info
diff --git a/data/plotinfo/ATLAS_2013_I1217867.plot b/analyses/pluginATLAS/ATLAS_2013_I1217867.plot
rename from data/plotinfo/ATLAS_2013_I1217867.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1217867.plot
diff --git a/data/refdata/ATLAS_2013_I1217867.yoda b/analyses/pluginATLAS/ATLAS_2013_I1217867.yoda
rename from data/refdata/ATLAS_2013_I1217867.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1217867.yoda
diff --git a/src/Analyses/ATLAS_2013_I1219109.cc b/analyses/pluginATLAS/ATLAS_2013_I1219109.cc
rename from src/Analyses/ATLAS_2013_I1219109.cc
rename to analyses/pluginATLAS/ATLAS_2013_I1219109.cc
diff --git a/data/anainfo/ATLAS_2013_I1219109.info b/analyses/pluginATLAS/ATLAS_2013_I1219109.info
rename from data/anainfo/ATLAS_2013_I1219109.info
rename to analyses/pluginATLAS/ATLAS_2013_I1219109.info
diff --git a/data/plotinfo/ATLAS_2013_I1219109.plot b/analyses/pluginATLAS/ATLAS_2013_I1219109.plot
rename from data/plotinfo/ATLAS_2013_I1219109.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1219109.plot
diff --git a/data/refdata/ATLAS_2013_I1219109.yoda b/analyses/pluginATLAS/ATLAS_2013_I1219109.yoda
rename from data/refdata/ATLAS_2013_I1219109.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1219109.yoda
diff --git a/data/anainfo/ATLAS_2013_I1219109_EL.info b/analyses/pluginATLAS/ATLAS_2013_I1219109_EL.info
rename from data/anainfo/ATLAS_2013_I1219109_EL.info
rename to analyses/pluginATLAS/ATLAS_2013_I1219109_EL.info
diff --git a/data/plotinfo/ATLAS_2013_I1219109_EL.plot b/analyses/pluginATLAS/ATLAS_2013_I1219109_EL.plot
rename from data/plotinfo/ATLAS_2013_I1219109_EL.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1219109_EL.plot
diff --git a/data/refdata/ATLAS_2013_I1219109_EL.yoda b/analyses/pluginATLAS/ATLAS_2013_I1219109_EL.yoda
rename from data/refdata/ATLAS_2013_I1219109_EL.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1219109_EL.yoda
diff --git a/data/anainfo/ATLAS_2013_I1219109_MU.info b/analyses/pluginATLAS/ATLAS_2013_I1219109_MU.info
rename from data/anainfo/ATLAS_2013_I1219109_MU.info
rename to analyses/pluginATLAS/ATLAS_2013_I1219109_MU.info
diff --git a/data/plotinfo/ATLAS_2013_I1219109_MU.plot b/analyses/pluginATLAS/ATLAS_2013_I1219109_MU.plot
rename from data/plotinfo/ATLAS_2013_I1219109_MU.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1219109_MU.plot
diff --git a/data/refdata/ATLAS_2013_I1219109_MU.yoda b/analyses/pluginATLAS/ATLAS_2013_I1219109_MU.yoda
rename from data/refdata/ATLAS_2013_I1219109_MU.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1219109_MU.yoda
diff --git a/src/Analyses/ATLAS_2013_I1230812.cc b/analyses/pluginATLAS/ATLAS_2013_I1230812.cc
rename from src/Analyses/ATLAS_2013_I1230812.cc
rename to analyses/pluginATLAS/ATLAS_2013_I1230812.cc
diff --git a/data/anainfo/ATLAS_2013_I1230812.info b/analyses/pluginATLAS/ATLAS_2013_I1230812.info
rename from data/anainfo/ATLAS_2013_I1230812.info
rename to analyses/pluginATLAS/ATLAS_2013_I1230812.info
diff --git a/data/plotinfo/ATLAS_2013_I1230812.plot b/analyses/pluginATLAS/ATLAS_2013_I1230812.plot
rename from data/plotinfo/ATLAS_2013_I1230812.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1230812.plot
diff --git a/data/refdata/ATLAS_2013_I1230812.yoda b/analyses/pluginATLAS/ATLAS_2013_I1230812.yoda
rename from data/refdata/ATLAS_2013_I1230812.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1230812.yoda
diff --git a/data/anainfo/ATLAS_2013_I1230812_EL.info b/analyses/pluginATLAS/ATLAS_2013_I1230812_EL.info
rename from data/anainfo/ATLAS_2013_I1230812_EL.info
rename to analyses/pluginATLAS/ATLAS_2013_I1230812_EL.info
diff --git a/data/plotinfo/ATLAS_2013_I1230812_EL.plot b/analyses/pluginATLAS/ATLAS_2013_I1230812_EL.plot
rename from data/plotinfo/ATLAS_2013_I1230812_EL.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1230812_EL.plot
diff --git a/data/refdata/ATLAS_2013_I1230812_EL.yoda b/analyses/pluginATLAS/ATLAS_2013_I1230812_EL.yoda
rename from data/refdata/ATLAS_2013_I1230812_EL.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1230812_EL.yoda
diff --git a/data/anainfo/ATLAS_2013_I1230812_MU.info b/analyses/pluginATLAS/ATLAS_2013_I1230812_MU.info
rename from data/anainfo/ATLAS_2013_I1230812_MU.info
rename to analyses/pluginATLAS/ATLAS_2013_I1230812_MU.info
diff --git a/data/plotinfo/ATLAS_2013_I1230812_MU.plot b/analyses/pluginATLAS/ATLAS_2013_I1230812_MU.plot
rename from data/plotinfo/ATLAS_2013_I1230812_MU.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1230812_MU.plot
diff --git a/data/refdata/ATLAS_2013_I1230812_MU.yoda b/analyses/pluginATLAS/ATLAS_2013_I1230812_MU.yoda
rename from data/refdata/ATLAS_2013_I1230812_MU.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1230812_MU.yoda
diff --git a/analyses/pluginATLAS/ATLAS_2013_I1234228.cc b/analyses/pluginATLAS/ATLAS_2013_I1234228.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2013_I1234228.cc
@@ -0,0 +1,67 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/ZFinder.hh"
+
+namespace Rivet {
+
+
+  /// @brief Add a short analysis description here
+  class ATLAS_2013_I1234228 : public Analysis {
+  public:
+
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(ATLAS_2013_I1234228);
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      const FinalState fs;
+      Cut cuts = Cuts::abseta < 2.5 && Cuts::pT > 25*GeV;
+      ZFinder zfinder(fs, cuts, PID::ELECTRON, 116*GeV, 1500*GeV, 0.1);      
+      declare(zfinder, "ZFinder");
+      
+      _hist_mll = bookHisto1D(1, 1, 2);
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+    	const double weight = event.weight();
+      const ZFinder& zfinder = apply<ZFinder>(event, "ZFinder");
+
+    	if (zfinder.bosons().size() != 1)  vetoEvent;
+	
+      double mass = zfinder.bosons()[0].mass();
+	    _hist_mll->fill(mass, weight);
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+
+      const double sf = crossSection()/sumOfWeights();
+      scale(_hist_mll, sf);
+    }
+
+    //@}
+
+  private:
+
+
+    /// @name Histograms
+    //@{
+    Histo1DPtr _hist_mll;
+    //@}
+
+  };
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(ATLAS_2013_I1234228);
+
+}
diff --git a/analyses/pluginATLAS/ATLAS_2013_I1234228.info b/analyses/pluginATLAS/ATLAS_2013_I1234228.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2013_I1234228.info
@@ -0,0 +1,48 @@
+Name: ATLAS_2013_I1234228
+Year: 2013
+Summary: High-mass Drell-Yan at 7 TeV
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1234228
+Status: VALIDATED
+Authors:
+ - Christian Gutschow <chris.g@cern.ch>
+References:
+ - Phys.Lett. B725 (2013) 223-242
+ - doi:10.1016/j.physletb.2013.07.049
+ - arXiv:1305.4192 [hep-ex]
+Keywords:
+ - drellyan
+ - vjets
+RunInfo:
+  Drell-Yan production in pp collisons at 7 TeV
+Luminosity_fb: 4.9
+Beams: [p+, p+]
+Energies: [7000]
+PtCuts: [25,25]
+NeedCrossSection: True
+Description:
+  This Letter reports a measurement of the high-mass Drell-Yan differential cross-section in proton-proton collisions at a
+  centre-of-mass energy of 7 TeV at the LHC. Based on an integrated luminosity of 4.9 fb$^{-1}$, the differential cross-section in the
+  $Z/\gamma^\ast \rightarrow e^+e^-$ channel is measured with the ATLAS detector as a function of the invariant mass, $m_{ee}$, in the range
+  $116< m_{ee} <1500$ GeV, for a fiducial region in which both the electron and the positron have transverse momentum $p_\text{T}>25$ GeV and
+  pseudorapidity $|\eta|<2.5$. A comparison is made to various event generators and to the predictions of perturbative QCD calculations
+  at next-to-next-to-leading order.
+BibKey: Aad:2013iua
+BibTeX: '@article{Aad:2013iua,
+      author         = "Aad, Georges and others",
+      title          = "{Measurement of the high-mass Drell--Yan differential
+                        cross-section in pp collisions at sqrt(s)=7 TeV with the
+                        ATLAS detector}",
+      collaboration  = "ATLAS",
+      journal        = "Phys. Lett.",
+      volume         = "B725",
+      year           = "2013",
+      pages          = "223-242",
+      doi            = "10.1016/j.physletb.2013.07.049",
+      eprint         = "1305.4192",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-PH-EP-2013-064",
+      SLACcitation   = "%%CITATION = ARXIV:1305.4192;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2013_I1234228.plot b/analyses/pluginATLAS/ATLAS_2013_I1234228.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2013_I1234228.plot
@@ -0,0 +1,11 @@
+# BEGIN PLOT /ATLAS_2013_I1234228/*
+LogY=1
+XTwosidedTicks=1
+YTwosidedTicks=1
+LeftMargin=1.6
+LegendAlign=r
+Title=$Z\rightarrow e^+e^-$, dressed level
+XLabel=$m_{ee}$ [GeV]
+YLabel=$\frac{\text{d}\sigma}{\text{d} m_{ee}}$ [pb/GeV]
+# END PLOT
+
diff --git a/analyses/pluginATLAS/ATLAS_2013_I1234228.yoda b/analyses/pluginATLAS/ATLAS_2013_I1234228.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2013_I1234228.yoda
@@ -0,0 +1,20 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2013_I1234228/d01-x01-y02
+Path=/REF/ATLAS_2013_I1234228/d01-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.230000e+02	7.000000e+00	7.000000e+00	2.150000e-01	9.334566e-03	9.334566e-03
+1.400000e+02	1.000000e+01	1.000000e+01	9.840000e-02	4.449813e-03	4.449813e-03
+1.600000e+02	1.000000e+01	1.000000e+01	4.930000e-02	2.472875e-03	2.472875e-03
+1.800000e+02	1.000000e+01	1.000000e+01	2.760000e-02	1.496012e-03	1.496012e-03
+2.000000e+02	1.000000e+01	1.000000e+01	1.820000e-02	1.108408e-03	1.108408e-03
+2.200000e+02	1.000000e+01	1.000000e+01	1.040000e-02	7.822155e-04	7.822155e-04
+2.400000e+02	1.000000e+01	1.000000e+01	7.980000e-03	6.275853e-04	6.275853e-04
+2.750000e+02	2.500000e+01	2.500000e+01	4.520000e-03	3.263490e-04	3.263490e-04
+3.500000e+02	5.000000e+01	5.000000e+01	1.650000e-03	1.286788e-04	1.286788e-04
+4.500000e+02	5.000000e+01	5.000000e+01	4.580000e-04	5.182690e-05	5.182690e-05
+6.000000e+02	1.000000e+02	1.000000e+02	1.410000e-04	1.746864e-05	1.746864e-05
+8.500000e+02	1.500000e+02	1.500000e+02	2.130000e-05	5.355796e-06	5.355796e-06
+1.250000e+03	2.500000e+02	2.500000e+02	2.760000e-06	1.406257e-06	1.406257e-06
+END YODA_SCATTER2D
+
diff --git a/src/Analyses/ATLAS_2013_I1243871.cc b/analyses/pluginATLAS/ATLAS_2013_I1243871.cc
rename from src/Analyses/ATLAS_2013_I1243871.cc
rename to analyses/pluginATLAS/ATLAS_2013_I1243871.cc
diff --git a/data/anainfo/ATLAS_2013_I1243871.info b/analyses/pluginATLAS/ATLAS_2013_I1243871.info
rename from data/anainfo/ATLAS_2013_I1243871.info
rename to analyses/pluginATLAS/ATLAS_2013_I1243871.info
diff --git a/data/plotinfo/ATLAS_2013_I1243871.plot b/analyses/pluginATLAS/ATLAS_2013_I1243871.plot
rename from data/plotinfo/ATLAS_2013_I1243871.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1243871.plot
diff --git a/data/refdata/ATLAS_2013_I1243871.yoda b/analyses/pluginATLAS/ATLAS_2013_I1243871.yoda
rename from data/refdata/ATLAS_2013_I1243871.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1243871.yoda
diff --git a/src/Analyses/ATLAS_2013_I1244522.cc b/analyses/pluginATLAS/ATLAS_2013_I1244522.cc
rename from src/Analyses/ATLAS_2013_I1244522.cc
rename to analyses/pluginATLAS/ATLAS_2013_I1244522.cc
diff --git a/data/anainfo/ATLAS_2013_I1244522.info b/analyses/pluginATLAS/ATLAS_2013_I1244522.info
rename from data/anainfo/ATLAS_2013_I1244522.info
rename to analyses/pluginATLAS/ATLAS_2013_I1244522.info
diff --git a/data/plotinfo/ATLAS_2013_I1244522.plot b/analyses/pluginATLAS/ATLAS_2013_I1244522.plot
rename from data/plotinfo/ATLAS_2013_I1244522.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1244522.plot
diff --git a/data/refdata/ATLAS_2013_I1244522.yoda b/analyses/pluginATLAS/ATLAS_2013_I1244522.yoda
rename from data/refdata/ATLAS_2013_I1244522.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1244522.yoda
diff --git a/src/Analyses/ATLAS_2013_I1263495.cc b/analyses/pluginATLAS/ATLAS_2013_I1263495.cc
rename from src/Analyses/ATLAS_2013_I1263495.cc
rename to analyses/pluginATLAS/ATLAS_2013_I1263495.cc
diff --git a/data/anainfo/ATLAS_2013_I1263495.info b/analyses/pluginATLAS/ATLAS_2013_I1263495.info
rename from data/anainfo/ATLAS_2013_I1263495.info
rename to analyses/pluginATLAS/ATLAS_2013_I1263495.info
diff --git a/data/plotinfo/ATLAS_2013_I1263495.plot b/analyses/pluginATLAS/ATLAS_2013_I1263495.plot
rename from data/plotinfo/ATLAS_2013_I1263495.plot
rename to analyses/pluginATLAS/ATLAS_2013_I1263495.plot
diff --git a/data/refdata/ATLAS_2013_I1263495.yoda b/analyses/pluginATLAS/ATLAS_2013_I1263495.yoda
rename from data/refdata/ATLAS_2013_I1263495.yoda
rename to analyses/pluginATLAS/ATLAS_2013_I1263495.yoda
diff --git a/src/Analyses/ATLAS_2014_I1268975.cc b/analyses/pluginATLAS/ATLAS_2014_I1268975.cc
rename from src/Analyses/ATLAS_2014_I1268975.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1268975.cc
diff --git a/data/anainfo/ATLAS_2014_I1268975.info b/analyses/pluginATLAS/ATLAS_2014_I1268975.info
rename from data/anainfo/ATLAS_2014_I1268975.info
rename to analyses/pluginATLAS/ATLAS_2014_I1268975.info
diff --git a/data/plotinfo/ATLAS_2014_I1268975.plot b/analyses/pluginATLAS/ATLAS_2014_I1268975.plot
rename from data/plotinfo/ATLAS_2014_I1268975.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1268975.plot
diff --git a/data/refdata/ATLAS_2014_I1268975.yoda b/analyses/pluginATLAS/ATLAS_2014_I1268975.yoda
rename from data/refdata/ATLAS_2014_I1268975.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1268975.yoda
diff --git a/src/Analyses/ATLAS_2014_I1279489.cc b/analyses/pluginATLAS/ATLAS_2014_I1279489.cc
rename from src/Analyses/ATLAS_2014_I1279489.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1279489.cc
diff --git a/data/anainfo/ATLAS_2014_I1279489.info b/analyses/pluginATLAS/ATLAS_2014_I1279489.info
rename from data/anainfo/ATLAS_2014_I1279489.info
rename to analyses/pluginATLAS/ATLAS_2014_I1279489.info
diff --git a/data/plotinfo/ATLAS_2014_I1279489.plot b/analyses/pluginATLAS/ATLAS_2014_I1279489.plot
rename from data/plotinfo/ATLAS_2014_I1279489.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1279489.plot
diff --git a/data/refdata/ATLAS_2014_I1279489.yoda b/analyses/pluginATLAS/ATLAS_2014_I1279489.yoda
rename from data/refdata/ATLAS_2014_I1279489.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1279489.yoda
diff --git a/src/Analyses/ATLAS_2014_I1282441.cc b/analyses/pluginATLAS/ATLAS_2014_I1282441.cc
rename from src/Analyses/ATLAS_2014_I1282441.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1282441.cc
diff --git a/data/anainfo/ATLAS_2014_I1282441.info b/analyses/pluginATLAS/ATLAS_2014_I1282441.info
rename from data/anainfo/ATLAS_2014_I1282441.info
rename to analyses/pluginATLAS/ATLAS_2014_I1282441.info
diff --git a/data/plotinfo/ATLAS_2014_I1282441.plot b/analyses/pluginATLAS/ATLAS_2014_I1282441.plot
rename from data/plotinfo/ATLAS_2014_I1282441.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1282441.plot
diff --git a/data/refdata/ATLAS_2014_I1282441.yoda b/analyses/pluginATLAS/ATLAS_2014_I1282441.yoda
rename from data/refdata/ATLAS_2014_I1282441.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1282441.yoda
diff --git a/src/Analyses/ATLAS_2014_I1282447.cc b/analyses/pluginATLAS/ATLAS_2014_I1282447.cc
rename from src/Analyses/ATLAS_2014_I1282447.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1282447.cc
diff --git a/data/anainfo/ATLAS_2014_I1282447.info b/analyses/pluginATLAS/ATLAS_2014_I1282447.info
rename from data/anainfo/ATLAS_2014_I1282447.info
rename to analyses/pluginATLAS/ATLAS_2014_I1282447.info
diff --git a/data/plotinfo/ATLAS_2014_I1282447.plot b/analyses/pluginATLAS/ATLAS_2014_I1282447.plot
rename from data/plotinfo/ATLAS_2014_I1282447.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1282447.plot
diff --git a/data/refdata/ATLAS_2014_I1282447.yoda b/analyses/pluginATLAS/ATLAS_2014_I1282447.yoda
rename from data/refdata/ATLAS_2014_I1282447.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1282447.yoda
diff --git a/src/Analyses/ATLAS_2014_I1288706.cc b/analyses/pluginATLAS/ATLAS_2014_I1288706.cc
rename from src/Analyses/ATLAS_2014_I1288706.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1288706.cc
diff --git a/data/anainfo/ATLAS_2014_I1288706.info b/analyses/pluginATLAS/ATLAS_2014_I1288706.info
rename from data/anainfo/ATLAS_2014_I1288706.info
rename to analyses/pluginATLAS/ATLAS_2014_I1288706.info
diff --git a/data/plotinfo/ATLAS_2014_I1288706.plot b/analyses/pluginATLAS/ATLAS_2014_I1288706.plot
rename from data/plotinfo/ATLAS_2014_I1288706.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1288706.plot
diff --git a/data/refdata/ATLAS_2014_I1288706.yoda b/analyses/pluginATLAS/ATLAS_2014_I1288706.yoda
rename from data/refdata/ATLAS_2014_I1288706.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1288706.yoda
diff --git a/src/Analyses/ATLAS_2014_I1298023.cc b/analyses/pluginATLAS/ATLAS_2014_I1298023.cc
rename from src/Analyses/ATLAS_2014_I1298023.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1298023.cc
diff --git a/data/anainfo/ATLAS_2014_I1298023.info b/analyses/pluginATLAS/ATLAS_2014_I1298023.info
rename from data/anainfo/ATLAS_2014_I1298023.info
rename to analyses/pluginATLAS/ATLAS_2014_I1298023.info
diff --git a/data/plotinfo/ATLAS_2014_I1298023.plot b/analyses/pluginATLAS/ATLAS_2014_I1298023.plot
rename from data/plotinfo/ATLAS_2014_I1298023.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1298023.plot
diff --git a/data/refdata/ATLAS_2014_I1298023.yoda b/analyses/pluginATLAS/ATLAS_2014_I1298023.yoda
rename from data/refdata/ATLAS_2014_I1298023.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1298023.yoda
diff --git a/src/Analyses/ATLAS_2014_I1298811.cc b/analyses/pluginATLAS/ATLAS_2014_I1298811.cc
rename from src/Analyses/ATLAS_2014_I1298811.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1298811.cc
diff --git a/data/anainfo/ATLAS_2014_I1298811.info b/analyses/pluginATLAS/ATLAS_2014_I1298811.info
rename from data/anainfo/ATLAS_2014_I1298811.info
rename to analyses/pluginATLAS/ATLAS_2014_I1298811.info
diff --git a/data/plotinfo/ATLAS_2014_I1298811.plot b/analyses/pluginATLAS/ATLAS_2014_I1298811.plot
rename from data/plotinfo/ATLAS_2014_I1298811.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1298811.plot
diff --git a/data/refdata/ATLAS_2014_I1298811.yoda b/analyses/pluginATLAS/ATLAS_2014_I1298811.yoda
rename from data/refdata/ATLAS_2014_I1298811.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1298811.yoda
diff --git a/src/Analyses/ATLAS_2014_I1300647.cc b/analyses/pluginATLAS/ATLAS_2014_I1300647.cc
rename from src/Analyses/ATLAS_2014_I1300647.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1300647.cc
diff --git a/data/anainfo/ATLAS_2014_I1300647.info b/analyses/pluginATLAS/ATLAS_2014_I1300647.info
rename from data/anainfo/ATLAS_2014_I1300647.info
rename to analyses/pluginATLAS/ATLAS_2014_I1300647.info
diff --git a/data/plotinfo/ATLAS_2014_I1300647.plot b/analyses/pluginATLAS/ATLAS_2014_I1300647.plot
rename from data/plotinfo/ATLAS_2014_I1300647.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1300647.plot
diff --git a/data/refdata/ATLAS_2014_I1300647.yoda b/analyses/pluginATLAS/ATLAS_2014_I1300647.yoda
rename from data/refdata/ATLAS_2014_I1300647.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1300647.yoda
diff --git a/src/Analyses/ATLAS_2014_I1304688.cc b/analyses/pluginATLAS/ATLAS_2014_I1304688.cc
rename from src/Analyses/ATLAS_2014_I1304688.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1304688.cc
diff --git a/data/anainfo/ATLAS_2014_I1304688.info b/analyses/pluginATLAS/ATLAS_2014_I1304688.info
rename from data/anainfo/ATLAS_2014_I1304688.info
rename to analyses/pluginATLAS/ATLAS_2014_I1304688.info
diff --git a/data/plotinfo/ATLAS_2014_I1304688.plot b/analyses/pluginATLAS/ATLAS_2014_I1304688.plot
rename from data/plotinfo/ATLAS_2014_I1304688.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1304688.plot
diff --git a/data/refdata/ATLAS_2014_I1304688.yoda b/analyses/pluginATLAS/ATLAS_2014_I1304688.yoda
rename from data/refdata/ATLAS_2014_I1304688.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1304688.yoda
diff --git a/src/Analyses/ATLAS_2014_I1306294.cc b/analyses/pluginATLAS/ATLAS_2014_I1306294.cc
rename from src/Analyses/ATLAS_2014_I1306294.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1306294.cc
diff --git a/data/anainfo/ATLAS_2014_I1306294.info b/analyses/pluginATLAS/ATLAS_2014_I1306294.info
rename from data/anainfo/ATLAS_2014_I1306294.info
rename to analyses/pluginATLAS/ATLAS_2014_I1306294.info
diff --git a/data/plotinfo/ATLAS_2014_I1306294.plot b/analyses/pluginATLAS/ATLAS_2014_I1306294.plot
rename from data/plotinfo/ATLAS_2014_I1306294.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1306294.plot
diff --git a/data/refdata/ATLAS_2014_I1306294.yoda b/analyses/pluginATLAS/ATLAS_2014_I1306294.yoda
rename from data/refdata/ATLAS_2014_I1306294.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1306294.yoda
diff --git a/data/anainfo/ATLAS_2014_I1306294_EL.info b/analyses/pluginATLAS/ATLAS_2014_I1306294_EL.info
rename from data/anainfo/ATLAS_2014_I1306294_EL.info
rename to analyses/pluginATLAS/ATLAS_2014_I1306294_EL.info
diff --git a/data/plotinfo/ATLAS_2014_I1306294_EL.plot b/analyses/pluginATLAS/ATLAS_2014_I1306294_EL.plot
rename from data/plotinfo/ATLAS_2014_I1306294_EL.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1306294_EL.plot
diff --git a/data/refdata/ATLAS_2014_I1306294_EL.yoda b/analyses/pluginATLAS/ATLAS_2014_I1306294_EL.yoda
rename from data/refdata/ATLAS_2014_I1306294_EL.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1306294_EL.yoda
diff --git a/data/anainfo/ATLAS_2014_I1306294_MU.info b/analyses/pluginATLAS/ATLAS_2014_I1306294_MU.info
rename from data/anainfo/ATLAS_2014_I1306294_MU.info
rename to analyses/pluginATLAS/ATLAS_2014_I1306294_MU.info
diff --git a/data/plotinfo/ATLAS_2014_I1306294_MU.plot b/analyses/pluginATLAS/ATLAS_2014_I1306294_MU.plot
rename from data/plotinfo/ATLAS_2014_I1306294_MU.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1306294_MU.plot
diff --git a/data/refdata/ATLAS_2014_I1306294_MU.yoda b/analyses/pluginATLAS/ATLAS_2014_I1306294_MU.yoda
rename from data/refdata/ATLAS_2014_I1306294_MU.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1306294_MU.yoda
diff --git a/src/Analyses/ATLAS_2014_I1306615.cc b/analyses/pluginATLAS/ATLAS_2014_I1306615.cc
rename from src/Analyses/ATLAS_2014_I1306615.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1306615.cc
diff --git a/data/anainfo/ATLAS_2014_I1306615.info b/analyses/pluginATLAS/ATLAS_2014_I1306615.info
rename from data/anainfo/ATLAS_2014_I1306615.info
rename to analyses/pluginATLAS/ATLAS_2014_I1306615.info
diff --git a/data/plotinfo/ATLAS_2014_I1306615.plot b/analyses/pluginATLAS/ATLAS_2014_I1306615.plot
rename from data/plotinfo/ATLAS_2014_I1306615.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1306615.plot
diff --git a/data/refdata/ATLAS_2014_I1306615.yoda b/analyses/pluginATLAS/ATLAS_2014_I1306615.yoda
rename from data/refdata/ATLAS_2014_I1306615.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1306615.yoda
diff --git a/src/Analyses/ATLAS_2014_I1307243.cc b/analyses/pluginATLAS/ATLAS_2014_I1307243.cc
rename from src/Analyses/ATLAS_2014_I1307243.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1307243.cc
diff --git a/data/anainfo/ATLAS_2014_I1307243.info b/analyses/pluginATLAS/ATLAS_2014_I1307243.info
rename from data/anainfo/ATLAS_2014_I1307243.info
rename to analyses/pluginATLAS/ATLAS_2014_I1307243.info
diff --git a/data/plotinfo/ATLAS_2014_I1307243.plot b/analyses/pluginATLAS/ATLAS_2014_I1307243.plot
rename from data/plotinfo/ATLAS_2014_I1307243.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1307243.plot
diff --git a/data/refdata/ATLAS_2014_I1307243.yoda b/analyses/pluginATLAS/ATLAS_2014_I1307243.yoda
rename from data/refdata/ATLAS_2014_I1307243.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1307243.yoda
diff --git a/src/Analyses/ATLAS_2014_I1307756.cc b/analyses/pluginATLAS/ATLAS_2014_I1307756.cc
rename from src/Analyses/ATLAS_2014_I1307756.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1307756.cc
diff --git a/data/anainfo/ATLAS_2014_I1307756.info b/analyses/pluginATLAS/ATLAS_2014_I1307756.info
rename from data/anainfo/ATLAS_2014_I1307756.info
rename to analyses/pluginATLAS/ATLAS_2014_I1307756.info
diff --git a/data/plotinfo/ATLAS_2014_I1307756.plot b/analyses/pluginATLAS/ATLAS_2014_I1307756.plot
rename from data/plotinfo/ATLAS_2014_I1307756.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1307756.plot
diff --git a/data/refdata/ATLAS_2014_I1307756.yoda b/analyses/pluginATLAS/ATLAS_2014_I1307756.yoda
rename from data/refdata/ATLAS_2014_I1307756.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1307756.yoda
diff --git a/src/Analyses/ATLAS_2014_I1312627.cc b/analyses/pluginATLAS/ATLAS_2014_I1312627.cc
rename from src/Analyses/ATLAS_2014_I1312627.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1312627.cc
diff --git a/data/anainfo/ATLAS_2014_I1312627.info b/analyses/pluginATLAS/ATLAS_2014_I1312627.info
rename from data/anainfo/ATLAS_2014_I1312627.info
rename to analyses/pluginATLAS/ATLAS_2014_I1312627.info
diff --git a/data/plotinfo/ATLAS_2014_I1312627.plot b/analyses/pluginATLAS/ATLAS_2014_I1312627.plot
rename from data/plotinfo/ATLAS_2014_I1312627.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1312627.plot
diff --git a/data/refdata/ATLAS_2014_I1312627.yoda b/analyses/pluginATLAS/ATLAS_2014_I1312627.yoda
rename from data/refdata/ATLAS_2014_I1312627.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1312627.yoda
diff --git a/data/anainfo/ATLAS_2014_I1312627_EL.info b/analyses/pluginATLAS/ATLAS_2014_I1312627_EL.info
rename from data/anainfo/ATLAS_2014_I1312627_EL.info
rename to analyses/pluginATLAS/ATLAS_2014_I1312627_EL.info
diff --git a/data/plotinfo/ATLAS_2014_I1312627_EL.plot b/analyses/pluginATLAS/ATLAS_2014_I1312627_EL.plot
rename from data/plotinfo/ATLAS_2014_I1312627_EL.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1312627_EL.plot
diff --git a/data/refdata/ATLAS_2014_I1312627_EL.yoda b/analyses/pluginATLAS/ATLAS_2014_I1312627_EL.yoda
rename from data/refdata/ATLAS_2014_I1312627_EL.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1312627_EL.yoda
diff --git a/data/anainfo/ATLAS_2014_I1312627_MU.info b/analyses/pluginATLAS/ATLAS_2014_I1312627_MU.info
rename from data/anainfo/ATLAS_2014_I1312627_MU.info
rename to analyses/pluginATLAS/ATLAS_2014_I1312627_MU.info
diff --git a/data/plotinfo/ATLAS_2014_I1312627_MU.plot b/analyses/pluginATLAS/ATLAS_2014_I1312627_MU.plot
rename from data/plotinfo/ATLAS_2014_I1312627_MU.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1312627_MU.plot
diff --git a/data/refdata/ATLAS_2014_I1312627_MU.yoda b/analyses/pluginATLAS/ATLAS_2014_I1312627_MU.yoda
rename from data/refdata/ATLAS_2014_I1312627_MU.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1312627_MU.yoda
diff --git a/src/Analyses/ATLAS_2014_I1315949.cc b/analyses/pluginATLAS/ATLAS_2014_I1315949.cc
rename from src/Analyses/ATLAS_2014_I1315949.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1315949.cc
diff --git a/data/anainfo/ATLAS_2014_I1315949.info b/analyses/pluginATLAS/ATLAS_2014_I1315949.info
rename from data/anainfo/ATLAS_2014_I1315949.info
rename to analyses/pluginATLAS/ATLAS_2014_I1315949.info
diff --git a/data/plotinfo/ATLAS_2014_I1315949.plot b/analyses/pluginATLAS/ATLAS_2014_I1315949.plot
rename from data/plotinfo/ATLAS_2014_I1315949.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1315949.plot
diff --git a/data/refdata/ATLAS_2014_I1315949.yoda b/analyses/pluginATLAS/ATLAS_2014_I1315949.yoda
rename from data/refdata/ATLAS_2014_I1315949.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1315949.yoda
diff --git a/src/Analyses/ATLAS_2014_I1319490.cc b/analyses/pluginATLAS/ATLAS_2014_I1319490.cc
rename from src/Analyses/ATLAS_2014_I1319490.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1319490.cc
diff --git a/data/anainfo/ATLAS_2014_I1319490.info b/analyses/pluginATLAS/ATLAS_2014_I1319490.info
rename from data/anainfo/ATLAS_2014_I1319490.info
rename to analyses/pluginATLAS/ATLAS_2014_I1319490.info
diff --git a/data/plotinfo/ATLAS_2014_I1319490.plot b/analyses/pluginATLAS/ATLAS_2014_I1319490.plot
rename from data/plotinfo/ATLAS_2014_I1319490.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1319490.plot
diff --git a/data/refdata/ATLAS_2014_I1319490.yoda b/analyses/pluginATLAS/ATLAS_2014_I1319490.yoda
rename from data/refdata/ATLAS_2014_I1319490.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1319490.yoda
diff --git a/data/anainfo/ATLAS_2014_I1319490_EL.info b/analyses/pluginATLAS/ATLAS_2014_I1319490_EL.info
rename from data/anainfo/ATLAS_2014_I1319490_EL.info
rename to analyses/pluginATLAS/ATLAS_2014_I1319490_EL.info
diff --git a/data/plotinfo/ATLAS_2014_I1319490_EL.plot b/analyses/pluginATLAS/ATLAS_2014_I1319490_EL.plot
rename from data/plotinfo/ATLAS_2014_I1319490_EL.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1319490_EL.plot
diff --git a/data/refdata/ATLAS_2014_I1319490_EL.yoda b/analyses/pluginATLAS/ATLAS_2014_I1319490_EL.yoda
rename from data/refdata/ATLAS_2014_I1319490_EL.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1319490_EL.yoda
diff --git a/data/anainfo/ATLAS_2014_I1319490_MU.info b/analyses/pluginATLAS/ATLAS_2014_I1319490_MU.info
rename from data/anainfo/ATLAS_2014_I1319490_MU.info
rename to analyses/pluginATLAS/ATLAS_2014_I1319490_MU.info
diff --git a/data/plotinfo/ATLAS_2014_I1319490_MU.plot b/analyses/pluginATLAS/ATLAS_2014_I1319490_MU.plot
rename from data/plotinfo/ATLAS_2014_I1319490_MU.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1319490_MU.plot
diff --git a/data/refdata/ATLAS_2014_I1319490_MU.yoda b/analyses/pluginATLAS/ATLAS_2014_I1319490_MU.yoda
rename from data/refdata/ATLAS_2014_I1319490_MU.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1319490_MU.yoda
diff --git a/src/Analyses/ATLAS_2014_I1325553.cc b/analyses/pluginATLAS/ATLAS_2014_I1325553.cc
rename from src/Analyses/ATLAS_2014_I1325553.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1325553.cc
diff --git a/data/anainfo/ATLAS_2014_I1325553.info b/analyses/pluginATLAS/ATLAS_2014_I1325553.info
rename from data/anainfo/ATLAS_2014_I1325553.info
rename to analyses/pluginATLAS/ATLAS_2014_I1325553.info
diff --git a/data/plotinfo/ATLAS_2014_I1325553.plot b/analyses/pluginATLAS/ATLAS_2014_I1325553.plot
rename from data/plotinfo/ATLAS_2014_I1325553.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1325553.plot
diff --git a/data/refdata/ATLAS_2014_I1325553.yoda b/analyses/pluginATLAS/ATLAS_2014_I1325553.yoda
rename from data/refdata/ATLAS_2014_I1325553.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1325553.yoda
diff --git a/src/Analyses/ATLAS_2014_I1326641.cc b/analyses/pluginATLAS/ATLAS_2014_I1326641.cc
rename from src/Analyses/ATLAS_2014_I1326641.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1326641.cc
diff --git a/data/anainfo/ATLAS_2014_I1326641.info b/analyses/pluginATLAS/ATLAS_2014_I1326641.info
rename from data/anainfo/ATLAS_2014_I1326641.info
rename to analyses/pluginATLAS/ATLAS_2014_I1326641.info
diff --git a/data/plotinfo/ATLAS_2014_I1326641.plot b/analyses/pluginATLAS/ATLAS_2014_I1326641.plot
rename from data/plotinfo/ATLAS_2014_I1326641.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1326641.plot
diff --git a/data/refdata/ATLAS_2014_I1326641.yoda b/analyses/pluginATLAS/ATLAS_2014_I1326641.yoda
rename from data/refdata/ATLAS_2014_I1326641.yoda
rename to analyses/pluginATLAS/ATLAS_2014_I1326641.yoda
diff --git a/src/Analyses/ATLAS_2014_I1327229.cc b/analyses/pluginATLAS/ATLAS_2014_I1327229.cc
rename from src/Analyses/ATLAS_2014_I1327229.cc
rename to analyses/pluginATLAS/ATLAS_2014_I1327229.cc
diff --git a/data/anainfo/ATLAS_2014_I1327229.info b/analyses/pluginATLAS/ATLAS_2014_I1327229.info
rename from data/anainfo/ATLAS_2014_I1327229.info
rename to analyses/pluginATLAS/ATLAS_2014_I1327229.info
diff --git a/data/plotinfo/ATLAS_2014_I1327229.plot b/analyses/pluginATLAS/ATLAS_2014_I1327229.plot
rename from data/plotinfo/ATLAS_2014_I1327229.plot
rename to analyses/pluginATLAS/ATLAS_2014_I1327229.plot
diff --git a/src/Analyses/ATLAS_2015_CONF_2015_041.cc b/analyses/pluginATLAS/ATLAS_2015_CONF_2015_041.cc
rename from src/Analyses/ATLAS_2015_CONF_2015_041.cc
rename to analyses/pluginATLAS/ATLAS_2015_CONF_2015_041.cc
diff --git a/data/anainfo/ATLAS_2015_CONF_2015_041.info b/analyses/pluginATLAS/ATLAS_2015_CONF_2015_041.info
rename from data/anainfo/ATLAS_2015_CONF_2015_041.info
rename to analyses/pluginATLAS/ATLAS_2015_CONF_2015_041.info
--- a/data/anainfo/ATLAS_2015_CONF_2015_041.info
+++ b/analyses/pluginATLAS/ATLAS_2015_CONF_2015_041.info
@@ -1,24 +1,26 @@
 Name: ATLAS_2015_CONF_2015_041
 Year: 2015
 Summary: Z+jets at 13 TeV
 Experiment: ATLAS
 Collider: LHC
 InspireID: None
-Status: PRELIMINARY
+Status: OBSOLETE
 Authors:
  - Christian Gutschow <chris.g@cern.ch>
 References:
  - ATLAS-CONF-2015-041
 RunInfo:
   inclusive Z production in the electron channel
 Beams: [p+, p+]
 Energies: [13000]
 PtCuts: [25,30]
 NeedCrossSection: True
 Description:
   Preliminary measurements of the cross section for the production of a $Z$ boson in association with jets in pp collisions at 
   $\sqrt{s} = 13$\,TeV are presented, using data corresponding to an integrated luminosity of $85\,\text{pb}^{-1}$ collected 
   by the ATLAS experiment at the Large Hadron Collider. The cross sections are measured for events containing a $Z$ boson 
   decaying to electrons or muons and produced in association with up to four jets in the kinematical range of 
   $p_\text{T} > 30$\,GeV and $|y| < 2.5$.
-  NB--Use the plugin names ATLAS_2015_CONF_2015_041_EL or ATLAS_2015_CONF_2015_041_MU to specify the lepton channel.
+  NB--Use the pliugin names ATLAS_2015_CONF_2015_041_EL or ATLAS_2015_CONF_2015_041_MU to specify the lepton channel.
+  Note -- this analysis is superseeded by ATLAS_2017_I1514251
+
diff --git a/data/plotinfo/ATLAS_2015_CONF_2015_041.plot b/analyses/pluginATLAS/ATLAS_2015_CONF_2015_041.plot
rename from data/plotinfo/ATLAS_2015_CONF_2015_041.plot
rename to analyses/pluginATLAS/ATLAS_2015_CONF_2015_041.plot
diff --git a/data/refdata/ATLAS_2015_CONF_2015_041.yoda b/analyses/pluginATLAS/ATLAS_2015_CONF_2015_041.yoda
rename from data/refdata/ATLAS_2015_CONF_2015_041.yoda
rename to analyses/pluginATLAS/ATLAS_2015_CONF_2015_041.yoda
diff --git a/data/anainfo/ATLAS_2015_CONF_2015_041_EL.info b/analyses/pluginATLAS/ATLAS_2015_CONF_2015_041_EL.info
rename from data/anainfo/ATLAS_2015_CONF_2015_041_EL.info
rename to analyses/pluginATLAS/ATLAS_2015_CONF_2015_041_EL.info
diff --git a/data/plotinfo/ATLAS_2015_CONF_2015_041_EL.plot b/analyses/pluginATLAS/ATLAS_2015_CONF_2015_041_EL.plot
rename from data/plotinfo/ATLAS_2015_CONF_2015_041_EL.plot
rename to analyses/pluginATLAS/ATLAS_2015_CONF_2015_041_EL.plot
diff --git a/data/refdata/ATLAS_2015_CONF_2015_041_EL.yoda b/analyses/pluginATLAS/ATLAS_2015_CONF_2015_041_EL.yoda
rename from data/refdata/ATLAS_2015_CONF_2015_041_EL.yoda
rename to analyses/pluginATLAS/ATLAS_2015_CONF_2015_041_EL.yoda
diff --git a/data/anainfo/ATLAS_2015_CONF_2015_041_MU.info b/analyses/pluginATLAS/ATLAS_2015_CONF_2015_041_MU.info
rename from data/anainfo/ATLAS_2015_CONF_2015_041_MU.info
rename to analyses/pluginATLAS/ATLAS_2015_CONF_2015_041_MU.info
diff --git a/data/plotinfo/ATLAS_2015_CONF_2015_041_MU.plot b/analyses/pluginATLAS/ATLAS_2015_CONF_2015_041_MU.plot
rename from data/plotinfo/ATLAS_2015_CONF_2015_041_MU.plot
rename to analyses/pluginATLAS/ATLAS_2015_CONF_2015_041_MU.plot
diff --git a/data/refdata/ATLAS_2015_CONF_2015_041_MU.yoda b/analyses/pluginATLAS/ATLAS_2015_CONF_2015_041_MU.yoda
rename from data/refdata/ATLAS_2015_CONF_2015_041_MU.yoda
rename to analyses/pluginATLAS/ATLAS_2015_CONF_2015_041_MU.yoda
diff --git a/src/Analyses/ATLAS_2015_I1345452.cc b/analyses/pluginATLAS/ATLAS_2015_I1345452.cc
rename from src/Analyses/ATLAS_2015_I1345452.cc
rename to analyses/pluginATLAS/ATLAS_2015_I1345452.cc
diff --git a/data/anainfo/ATLAS_2015_I1345452.info b/analyses/pluginATLAS/ATLAS_2015_I1345452.info
rename from data/anainfo/ATLAS_2015_I1345452.info
rename to analyses/pluginATLAS/ATLAS_2015_I1345452.info
diff --git a/data/plotinfo/ATLAS_2015_I1345452.plot b/analyses/pluginATLAS/ATLAS_2015_I1345452.plot
rename from data/plotinfo/ATLAS_2015_I1345452.plot
rename to analyses/pluginATLAS/ATLAS_2015_I1345452.plot
diff --git a/data/refdata/ATLAS_2015_I1345452.yoda b/analyses/pluginATLAS/ATLAS_2015_I1345452.yoda
rename from data/refdata/ATLAS_2015_I1345452.yoda
rename to analyses/pluginATLAS/ATLAS_2015_I1345452.yoda
diff --git a/src/Analyses/ATLAS_2015_I1351916.cc b/analyses/pluginATLAS/ATLAS_2015_I1351916.cc
rename from src/Analyses/ATLAS_2015_I1351916.cc
rename to analyses/pluginATLAS/ATLAS_2015_I1351916.cc
diff --git a/data/anainfo/ATLAS_2015_I1351916.info b/analyses/pluginATLAS/ATLAS_2015_I1351916.info
rename from data/anainfo/ATLAS_2015_I1351916.info
rename to analyses/pluginATLAS/ATLAS_2015_I1351916.info
diff --git a/data/plotinfo/ATLAS_2015_I1351916.plot b/analyses/pluginATLAS/ATLAS_2015_I1351916.plot
rename from data/plotinfo/ATLAS_2015_I1351916.plot
rename to analyses/pluginATLAS/ATLAS_2015_I1351916.plot
diff --git a/data/refdata/ATLAS_2015_I1351916.yoda b/analyses/pluginATLAS/ATLAS_2015_I1351916.yoda
rename from data/refdata/ATLAS_2015_I1351916.yoda
rename to analyses/pluginATLAS/ATLAS_2015_I1351916.yoda
diff --git a/data/anainfo/ATLAS_2015_I1351916_EL.info b/analyses/pluginATLAS/ATLAS_2015_I1351916_EL.info
rename from data/anainfo/ATLAS_2015_I1351916_EL.info
rename to analyses/pluginATLAS/ATLAS_2015_I1351916_EL.info
diff --git a/data/plotinfo/ATLAS_2015_I1351916_EL.plot b/analyses/pluginATLAS/ATLAS_2015_I1351916_EL.plot
rename from data/plotinfo/ATLAS_2015_I1351916_EL.plot
rename to analyses/pluginATLAS/ATLAS_2015_I1351916_EL.plot
diff --git a/data/refdata/ATLAS_2015_I1351916_EL.yoda b/analyses/pluginATLAS/ATLAS_2015_I1351916_EL.yoda
rename from data/refdata/ATLAS_2015_I1351916_EL.yoda
rename to analyses/pluginATLAS/ATLAS_2015_I1351916_EL.yoda
diff --git a/data/anainfo/ATLAS_2015_I1351916_MU.info b/analyses/pluginATLAS/ATLAS_2015_I1351916_MU.info
rename from data/anainfo/ATLAS_2015_I1351916_MU.info
rename to analyses/pluginATLAS/ATLAS_2015_I1351916_MU.info
diff --git a/data/plotinfo/ATLAS_2015_I1351916_MU.plot b/analyses/pluginATLAS/ATLAS_2015_I1351916_MU.plot
rename from data/plotinfo/ATLAS_2015_I1351916_MU.plot
rename to analyses/pluginATLAS/ATLAS_2015_I1351916_MU.plot
diff --git a/data/refdata/ATLAS_2015_I1351916_MU.yoda b/analyses/pluginATLAS/ATLAS_2015_I1351916_MU.yoda
rename from data/refdata/ATLAS_2015_I1351916_MU.yoda
rename to analyses/pluginATLAS/ATLAS_2015_I1351916_MU.yoda
diff --git a/src/Analyses/ATLAS_2015_I1364361.cc b/analyses/pluginATLAS/ATLAS_2015_I1364361.cc
rename from src/Analyses/ATLAS_2015_I1364361.cc
rename to analyses/pluginATLAS/ATLAS_2015_I1364361.cc
diff --git a/data/anainfo/ATLAS_2015_I1364361.info b/analyses/pluginATLAS/ATLAS_2015_I1364361.info
rename from data/anainfo/ATLAS_2015_I1364361.info
rename to analyses/pluginATLAS/ATLAS_2015_I1364361.info
diff --git a/data/plotinfo/ATLAS_2015_I1364361.plot b/analyses/pluginATLAS/ATLAS_2015_I1364361.plot
rename from data/plotinfo/ATLAS_2015_I1364361.plot
rename to analyses/pluginATLAS/ATLAS_2015_I1364361.plot
diff --git a/data/refdata/ATLAS_2015_I1364361.yoda b/analyses/pluginATLAS/ATLAS_2015_I1364361.yoda
rename from data/refdata/ATLAS_2015_I1364361.yoda
rename to analyses/pluginATLAS/ATLAS_2015_I1364361.yoda
diff --git a/src/Analyses/ATLAS_2015_I1376945.cc b/analyses/pluginATLAS/ATLAS_2015_I1376945.cc
rename from src/Analyses/ATLAS_2015_I1376945.cc
rename to analyses/pluginATLAS/ATLAS_2015_I1376945.cc
diff --git a/data/anainfo/ATLAS_2015_I1376945.info b/analyses/pluginATLAS/ATLAS_2015_I1376945.info
rename from data/anainfo/ATLAS_2015_I1376945.info
rename to analyses/pluginATLAS/ATLAS_2015_I1376945.info
diff --git a/data/plotinfo/ATLAS_2015_I1376945.plot b/analyses/pluginATLAS/ATLAS_2015_I1376945.plot
rename from data/plotinfo/ATLAS_2015_I1376945.plot
rename to analyses/pluginATLAS/ATLAS_2015_I1376945.plot
diff --git a/data/refdata/ATLAS_2015_I1376945.yoda b/analyses/pluginATLAS/ATLAS_2015_I1376945.yoda
rename from data/refdata/ATLAS_2015_I1376945.yoda
rename to analyses/pluginATLAS/ATLAS_2015_I1376945.yoda
diff --git a/src/Analyses/ATLAS_2015_I1387176.cc b/analyses/pluginATLAS/ATLAS_2015_I1387176.cc
rename from src/Analyses/ATLAS_2015_I1387176.cc
rename to analyses/pluginATLAS/ATLAS_2015_I1387176.cc
diff --git a/data/anainfo/ATLAS_2015_I1387176.info b/analyses/pluginATLAS/ATLAS_2015_I1387176.info
rename from data/anainfo/ATLAS_2015_I1387176.info
rename to analyses/pluginATLAS/ATLAS_2015_I1387176.info
diff --git a/data/plotinfo/ATLAS_2015_I1387176.plot b/analyses/pluginATLAS/ATLAS_2015_I1387176.plot
rename from data/plotinfo/ATLAS_2015_I1387176.plot
rename to analyses/pluginATLAS/ATLAS_2015_I1387176.plot
diff --git a/data/refdata/ATLAS_2015_I1387176.yoda b/analyses/pluginATLAS/ATLAS_2015_I1387176.yoda
rename from data/refdata/ATLAS_2015_I1387176.yoda
rename to analyses/pluginATLAS/ATLAS_2015_I1387176.yoda
diff --git a/src/Analyses/ATLAS_2015_I1390114.cc b/analyses/pluginATLAS/ATLAS_2015_I1390114.cc
rename from src/Analyses/ATLAS_2015_I1390114.cc
rename to analyses/pluginATLAS/ATLAS_2015_I1390114.cc
diff --git a/data/anainfo/ATLAS_2015_I1390114.info b/analyses/pluginATLAS/ATLAS_2015_I1390114.info
rename from data/anainfo/ATLAS_2015_I1390114.info
rename to analyses/pluginATLAS/ATLAS_2015_I1390114.info
diff --git a/data/plotinfo/ATLAS_2015_I1390114.plot b/analyses/pluginATLAS/ATLAS_2015_I1390114.plot
rename from data/plotinfo/ATLAS_2015_I1390114.plot
rename to analyses/pluginATLAS/ATLAS_2015_I1390114.plot
--- a/data/plotinfo/ATLAS_2015_I1390114.plot
+++ b/analyses/pluginATLAS/ATLAS_2015_I1390114.plot
@@ -1,21 +1,21 @@
 # BEGIN PLOT /ATLAS_2015_I1390114/d..
 XTwosidedTicks=1
 YTwosidedTicks=1
 LegendXPos=0.95
 LegendAlign=r
 XLabel=
 #RatioPlotYMax=2.1
 #RatioPlotYMin=0.1
 # END PLOT
 
 # BEGIN PLOT /ATLAS_2015_I1390114/d01
-XCustomMajorTicks=1.0	$\sigma_{ttb\text{ (lepton$+$jets)}}$	2.0	$\sigma_{ttb\text{ ($e\mu$)}}$	3.0	$\sigma_{ttbb\text{ (cut-based)}}$	4.0	$\sigma_{ttbb\text{ (fit-based)}}$
+XCustomMajorTicks=1.0	$\sigma_\text{ttb(lepton+jets)}$	2.0	$\sigma_{e\mu}$	3.0	$\sigma_{ttbb\text{(cut-based)}}$	4.0	$\sigma_{ttbb\text{(fit-based)}}$
 YLabel=Cross section [fb]
 # END PLOT
 
 # BEGIN PLOT /ATLAS_2015_I1390114/d02
 LogY=0
 XCustomMajorTicks=1.0	$R_{ttbb}$ 
 YLabel=Cross section ratio [$\%$]
 # END PLOT
 
diff --git a/data/refdata/ATLAS_2015_I1390114.yoda b/analyses/pluginATLAS/ATLAS_2015_I1390114.yoda
rename from data/refdata/ATLAS_2015_I1390114.yoda
rename to analyses/pluginATLAS/ATLAS_2015_I1390114.yoda
diff --git a/src/Analyses/ATLAS_2015_I1393758.cc b/analyses/pluginATLAS/ATLAS_2015_I1393758.cc
rename from src/Analyses/ATLAS_2015_I1393758.cc
rename to analyses/pluginATLAS/ATLAS_2015_I1393758.cc
diff --git a/data/anainfo/ATLAS_2015_I1393758.info b/analyses/pluginATLAS/ATLAS_2015_I1393758.info
rename from data/anainfo/ATLAS_2015_I1393758.info
rename to analyses/pluginATLAS/ATLAS_2015_I1393758.info
diff --git a/data/plotinfo/ATLAS_2015_I1393758.plot b/analyses/pluginATLAS/ATLAS_2015_I1393758.plot
rename from data/plotinfo/ATLAS_2015_I1393758.plot
rename to analyses/pluginATLAS/ATLAS_2015_I1393758.plot
diff --git a/data/refdata/ATLAS_2015_I1393758.yoda b/analyses/pluginATLAS/ATLAS_2015_I1393758.yoda
rename from data/refdata/ATLAS_2015_I1393758.yoda
rename to analyses/pluginATLAS/ATLAS_2015_I1393758.yoda
diff --git a/src/Analyses/ATLAS_2015_I1394679.cc b/analyses/pluginATLAS/ATLAS_2015_I1394679.cc
rename from src/Analyses/ATLAS_2015_I1394679.cc
rename to analyses/pluginATLAS/ATLAS_2015_I1394679.cc
diff --git a/data/anainfo/ATLAS_2015_I1394679.info b/analyses/pluginATLAS/ATLAS_2015_I1394679.info
rename from data/anainfo/ATLAS_2015_I1394679.info
rename to analyses/pluginATLAS/ATLAS_2015_I1394679.info
diff --git a/data/plotinfo/ATLAS_2015_I1394679.plot b/analyses/pluginATLAS/ATLAS_2015_I1394679.plot
rename from data/plotinfo/ATLAS_2015_I1394679.plot
rename to analyses/pluginATLAS/ATLAS_2015_I1394679.plot
diff --git a/data/refdata/ATLAS_2015_I1394679.yoda b/analyses/pluginATLAS/ATLAS_2015_I1394679.yoda
rename from data/refdata/ATLAS_2015_I1394679.yoda
rename to analyses/pluginATLAS/ATLAS_2015_I1394679.yoda
diff --git a/analyses/pluginATLAS/ATLAS_2015_I1394865.cc b/analyses/pluginATLAS/ATLAS_2015_I1394865.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2015_I1394865.cc
@@ -0,0 +1,270 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/IdentifiedFinalState.hh"
+#include "Rivet/Projections/WFinder.hh"
+#include "Rivet/Projections/LeadingParticlesFinalState.hh"
+#include "Rivet/Projections/UnstableFinalState.hh"
+#include "Rivet/Projections/VetoedFinalState.hh"
+#include "Rivet/Projections/DressedLeptons.hh"
+#include "Rivet/Projections/MergedFinalState.hh"
+#include "Rivet/Projections/MissingMomentum.hh"
+#include "Rivet/Projections/InvMassFinalState.hh"
+
+namespace Rivet {
+
+
+  /// Inclusive 4-lepton lineshape
+  class ATLAS_2015_I1394865 : public Analysis {
+  public:
+
+    /// Default constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(ATLAS_2015_I1394865);
+
+
+    void init() {
+      FinalState fs(Cuts::abseta < 5.0);
+
+      IdentifiedFinalState photon(fs, PID::PHOTON);
+      IdentifiedFinalState bare_EL(fs, {PID::ELECTRON, -PID::ELECTRON});
+      IdentifiedFinalState bare_MU(fs, {PID::MUON, -PID::MUON});
+
+      // Selection 1: ZZ-> llll selection
+      Cut etaranges_el = Cuts::abseta < 2.5 && Cuts::pT > 7*GeV;
+      Cut etaranges_mu = Cuts::abseta < 2.7 && Cuts::pT > 6*GeV;
+
+      DressedLeptons electron_sel4l(photon, bare_EL, 0.1, etaranges_el);
+      declare(electron_sel4l, "ELECTRON_sel4l");
+      DressedLeptons muon_sel4l(photon, bare_MU, 0.1, etaranges_mu);
+      declare(muon_sel4l, "MUON_sel4l");
+
+
+      // Both ZZ on-shell histos
+      _h_ZZ_mZZ  = bookHisto1D(1, 1, 1);
+      _h_ZZ_pTZZ = bookHisto1D(2, 1, 1);
+    }
+
+
+    /// Do the analysis
+    void analyze(const Event& e) {
+      const double weight = e.weight();
+
+      ////////////////////////////////////////////////////////////////////
+      // Preselection of leptons for ZZ-> llll final state
+      ////////////////////////////////////////////////////////////////////
+
+      Particles leptons_sel4l;
+      const vector<DressedLepton>& mu_sel4l = apply<DressedLeptons>(e, "MUON_sel4l").dressedLeptons();
+      const vector<DressedLepton>& el_sel4l = apply<DressedLeptons>(e, "ELECTRON_sel4l").dressedLeptons();
+      const vector<DressedLepton> leptonsFS_sel4l = mu_sel4l + el_sel4l;
+      // leptonsFS_sel4l.insert( leptonsFS_sel4l.end(), mu_sel4l.begin(), mu_sel4l.end() );
+      // leptonsFS_sel4l.insert( leptonsFS_sel4l.end(), el_sel4l.begin(), el_sel4l.end() );
+
+      // mu: pT > 6 GeV, eta < 2.7; ele: pT > 7 GeV, eta < 2.5
+      for (const DressedLepton& l : leptonsFS_sel4l) {
+        if (l.abspid() == PID::ELECTRON) leptons_sel4l.push_back(l);  // REDUNDANT: if (l.pT() > 7*GeV && l.abseta() < 2.5)
+        else if (l.abspid() == PID::MUON) leptons_sel4l.push_back(l); // REDUNDANT: if (l.pT() > 6*GeV && l.abseta() < 2.7)
+      }
+
+      //////////////////////////////////////////////////////////////////
+      // Exactly two opposite charged leptons
+      //////////////////////////////////////////////////////////////////
+
+      // Calculate total 'flavour' charge
+      double totalcharge = 0;
+      for (const Particle& l : leptons_sel4l)  totalcharge += l.pid();
+
+      // Analyze 4 lepton events
+      if (leptons_sel4l.size() != 4 || totalcharge != 0) vetoEvent;
+
+      // Identify Z states from 4 lepton pairs
+      Zstate Z1, Z2, Z1_alt, Z2_alt;
+      if ( !identifyZstates(Z1, Z2, Z1_alt, Z2_alt, leptons_sel4l) )  vetoEvent;
+
+      const double mZ1 = Z1.mom().mass();
+      const double mZ2 = Z2.mom().mass();
+      const double mZ1_alt = Z1_alt.mom().mass();
+      const double mZ2_alt = Z2_alt.mom().mass();
+      const double pTZ1 = Z1.mom().pT();
+      const double pTZ2 = Z2.mom().pT();
+      const double mZZ = (Z1.mom() + Z2.mom()).mass();
+      const double pTZZ = (Z1.mom() + Z2.mom()).pT();
+
+      // Event selections
+      // pT(Z) > 2 GeV
+      bool pass = pTZ1 > 2*GeV && pTZ2 > 2*GeV;
+      if (!pass) vetoEvent;
+
+      // Lepton kinematics: pT > 20, 15, 10 (8 if muon) GeV
+      int n1 = 0, n2 = 0, n3 = 0;
+      for (Particle& l : leptons_sel4l) {
+        if (l.pT() > 20*GeV) ++n1;
+        if (l.pT() > 15*GeV) ++n2;
+        if (l.pT() > 10*GeV && l.abspid() == PID::ELECTRON) ++n3;
+        if (l.pT() >  8*GeV && l.abspid() == PID::MUON) ++n3;
+      }
+      pass = pass && n1>=1 && n2>=2 && n3>=3;
+      if (!pass) vetoEvent;
+
+      // Dilepton mass: 50 < mZ1 < 120 GeV, 12 < mZ2 < 120 GeV
+      pass = pass && mZ1 > 50*GeV && mZ1 < 120*GeV;
+      pass = pass && mZ2 > 12*GeV && mZ2 < 120*GeV;
+      if (!pass) vetoEvent;
+
+      // Lepton separation: deltaR(l, l') > 0.1 (0.2) for same- (different-) flavor leptons
+      for (size_t i = 0; i < leptons_sel4l.size(); ++i) {
+        for (size_t j = i + 1; j < leptons_sel4l.size(); ++j) {
+          const Particle& l1 = leptons_sel4l[i];
+          const Particle& l2 = leptons_sel4l[j];
+          pass = pass && deltaR(l1, l2) > (l1.abspid() == l2.abspid() ? 0.1 : 0.2);
+          if (!pass) vetoEvent;
+        }
+      }
+
+      // J/Psi veto: m(l+l-) > 5 GeV
+      pass = pass && mZ1 > 5*GeV && mZ2 > 5*GeV && mZ1_alt > 5*GeV && mZ2_alt > 5*GeV;
+      if (!pass) vetoEvent;
+
+      // 80 < m4l < 1000 GeV
+      pass = pass && mZZ > 80*GeV && mZZ < 1000*GeV;
+      if (!pass) vetoEvent;
+
+      // Fill histograms
+      _h_ZZ_mZZ->fill(mZZ, weight);
+      _h_ZZ_pTZZ->fill(pTZZ, weight);
+    }
+
+
+    /// Finalize
+    void finalize() {
+      const double norm = crossSection()/sumOfWeights()/femtobarn;
+      scale(_h_ZZ_mZZ,  norm);
+      scale(_h_ZZ_pTZZ, norm);
+    }
+
+
+    /// Generic Z candidate
+    struct Zstate : public ParticlePair {
+      Zstate() { }
+      Zstate(ParticlePair _particlepair) : ParticlePair(_particlepair) { }
+      FourMomentum mom() const { return first.momentum() + second.momentum(); }
+      operator FourMomentum() const { return mom(); }
+      static bool cmppT(const Zstate& lx, const Zstate& rx) { return lx.mom().pT() < rx.mom().pT(); }
+    };
+
+
+    /// @brief 4l to ZZ assignment algorithm
+    ///
+    /// ZZ->4l pairing
+    /// - At least two same flavour opposite sign (SFOS) lepton pairs
+    /// - Ambiguities in pairing are resolved following the procedure
+    ///   1. the leading Z (Z1) is choosen as the SFOS with dilepton mass closet to Z mass
+    ///   2. the subleading Z (Z2) is choosen as the remaining SFOS dilepton pair
+    ///
+    /// Z1, Z2: the selected pairing
+    /// Z1_alt, Z2_alt: the alternative pairing (the same as Z1, Z2 in 2e2m case)
+    bool identifyZstates(Zstate& Z1, Zstate& Z2, Zstate& Z1_alt, Zstate& Z2_alt, const Particles& leptons_sel4l) {
+      const double ZMASS = 91.1876*GeV;
+      bool findZZ = false;
+
+      Particles part_pos_el, part_neg_el, part_pos_mu, part_neg_mu;
+      for (const Particle& l : leptons_sel4l) {
+        if (l.abspid() == PID::ELECTRON) {
+          if (l.pid() < 0) part_neg_el.push_back(l);
+          if (l.pid() > 0) part_pos_el.push_back(l);
+        }
+        else if (l.abspid() == PID::MUON) {
+          if (l.pid() < 0) part_neg_mu.push_back(l);
+          if (l.pid() > 0) part_pos_mu.push_back(l);
+        }
+      }
+
+      // eeee/mmmm channel
+      if ((part_neg_el.size() == 2 && part_pos_el.size() == 2) || (part_neg_mu.size() == 2 && part_pos_mu.size() == 2)) {
+        findZZ = true;
+
+        Zstate Zcand_1, Zcand_2, Zcand_3, Zcand_4;
+        Zstate Zcand_1_tmp, Zcand_2_tmp, Zcand_3_tmp, Zcand_4_tmp;
+        if (part_neg_el.size() == 2) { // eeee
+          Zcand_1_tmp = Zstate( ParticlePair( part_neg_el[0],  part_pos_el[0] ) );
+          Zcand_2_tmp = Zstate( ParticlePair( part_neg_el[0],  part_pos_el[1] ) );
+          Zcand_3_tmp = Zstate( ParticlePair( part_neg_el[1],  part_pos_el[0] ) );
+          Zcand_4_tmp = Zstate( ParticlePair( part_neg_el[1],  part_pos_el[1] ) );
+        }
+        else { // mmmm
+          Zcand_1_tmp = Zstate( ParticlePair( part_neg_mu[0],  part_pos_mu[0] ) );
+          Zcand_2_tmp = Zstate( ParticlePair( part_neg_mu[0],  part_pos_mu[1] ) );
+          Zcand_3_tmp = Zstate( ParticlePair( part_neg_mu[1],  part_pos_mu[0] ) );
+          Zcand_4_tmp = Zstate( ParticlePair( part_neg_mu[1],  part_pos_mu[1] ) );
+        }
+
+        // We can have the following pairs: (Z1 + Z4) || (Z2 + Z3)
+        // Firstly, reorder withing each quadruplet to have
+        //  - fabs(mZ1 - ZMASS) < fabs(mZ4 - ZMASS)
+        //  - fabs(mZ2 - ZMASS) < fabs(mZ3 - ZMASS)
+        if (fabs(Zcand_1_tmp.mom().mass() - ZMASS) < fabs(Zcand_4_tmp.mom().mass() - ZMASS)) {
+          Zcand_1 = Zcand_1_tmp;
+          Zcand_4 = Zcand_4_tmp;
+        } else {
+          Zcand_1 = Zcand_4_tmp;
+          Zcand_4 = Zcand_1_tmp;
+        }
+        if (fabs(Zcand_2_tmp.mom().mass() - ZMASS) < fabs(Zcand_3_tmp.mom().mass() - ZMASS)) {
+          Zcand_2 = Zcand_2_tmp;
+          Zcand_3 = Zcand_3_tmp;
+        } else {
+          Zcand_2 = Zcand_3_tmp;
+          Zcand_3 = Zcand_2_tmp;
+        }
+
+        // We can have the following pairs: (Z1 + Z4) || (Z2 + Z3)
+        // Secondly, select the leading and subleading Z following
+        //   1. the leading Z (Z1) is choosen as the SFOS with dilepton mass closet to Z mass
+        //   2. the subleading Z (Z2) is choosen as the remaining SFOS dilepton pair
+        if (fabs(Zcand_1.mom().mass() - ZMASS) < fabs(Zcand_2.mom().mass() - ZMASS)) {
+          Z1 = Zcand_1;
+          Z2 = Zcand_4;
+          Z1_alt = Zcand_2;
+          Z2_alt = Zcand_3;
+        } else {
+          Z1 = Zcand_2;
+          Z2 = Zcand_3;
+          Z1_alt = Zcand_1;
+          Z2_alt = Zcand_4;
+        }
+      } // end of eeee/mmmm channel
+      else if (part_neg_el.size() == 1 && part_pos_el.size() == 1 && part_neg_mu.size() == 1 && part_pos_mu.size() == 1) { // 2e2m channel
+        findZZ = true;
+
+        Zstate Zcand_1, Zcand_2;
+
+        Zcand_1 = Zstate( ParticlePair( part_neg_mu[0],  part_pos_mu[0] ) );
+        Zcand_2 = Zstate( ParticlePair( part_neg_el[0],  part_pos_el[0] ) );
+
+        if (fabs(Zcand_1.mom().mass() - ZMASS) < fabs(Zcand_2.mom().mass() - ZMASS)) {
+          Z1 = Zcand_1;
+          Z2 = Zcand_2;
+        } else {
+          Z1 = Zcand_2;
+          Z2 = Zcand_1;
+        }
+        Z1_alt = Z1;
+        Z2_alt = Z2;
+      }
+
+      return findZZ;
+    }
+
+
+  private:
+
+    Histo1DPtr _h_ZZ_pTZZ, _h_ZZ_mZZ;
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(ATLAS_2015_I1394865);
+
+}
diff --git a/analyses/pluginATLAS/ATLAS_2015_I1394865.info b/analyses/pluginATLAS/ATLAS_2015_I1394865.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2015_I1394865.info
@@ -0,0 +1,47 @@
+Name: ATLAS_2015_I1394865
+Year: 2015
+Summary: Inclusive 4-lepton lineshape
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1394865
+Status: VALIDATED
+Authors:
+ - Bing Li <bing.li@cern.ch>
+References:
+ - Phys.Lett. B753 (2016) 552-572
+ - doi:10.1016/j.physletb.2015.12.048
+ - arXiv:1509.07844 [hep-ex]
+Keywords:
+ - diboson
+ - leptons
+ - lineshape
+RunInfo:
+  '$p p \to \ell \ell \ell \ell + X$'
+Luminosity_fb: 20.3
+Beams: [p+, p+]
+Energies: [8000]
+PtCuts: [20., 15., 10., 8.]
+Description:
+   The four-lepton (4$\ell$, $\ell = e,\mu$) production cross section is measured in the mass range from 80 to 1000 GeV
+   using 20.3 fb$^{-1}$ of data in $pp$ collisions at $\sqrt{s}=8$ TeV collected with the ATLAS detector at the LHC.
+   The $4\ell$ events are produced in the decays of resonant $Z$ and Higgs bosons and the non-resonant $ZZ$ continuum
+   originating from $q\bar{q}$, $gg$, $qg$ initial states. A total of 476 signal candidate events are observed with a
+   background expectation of 26.2$\pm$3.6 events, enabling the measurement of the integrated cross section and the
+   differential cross section as a function of the invariant mass and transverse momentum of the four-lepton system.
+BibKey: Aad:2015rka,
+BibTeX: '@article{Aad:2015rka,
+      author         = "Aad, Georges and others",
+      title          = "{Measurements of four-lepton production in $pp$
+                        collisions at $\sqrt{s}=$ 8 TeV with the ATLAS detector}",
+      collaboration  = "ATLAS",
+      journal        = "Phys. Lett.",
+      volume         = "B753",
+      year           = "2016",
+      pages          = "552-572",
+      doi            = "10.1016/j.physletb.2015.12.048",
+      eprint         = "1509.07844",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-PH-EP-2015-220",
+      SLACcitation   = "%%CITATION = ARXIV:1509.07844;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2015_I1394865.plot b/analyses/pluginATLAS/ATLAS_2015_I1394865.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2015_I1394865.plot
@@ -0,0 +1,18 @@
+# BEGIN PLOT /ATLAS_2015_I1394865/*
+LogY=0
+XTwosidedTicks=1
+YTwosidedTicks=1
+LegendAlign=r
+LeftMargin=1.5
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2015_I1394865/d01-x01-y01
+XLabel=$m_{4\ell}$ [GeV]
+YLabel=$\text{d} \sigma^\text{fid}_{4\ell}/\text{d}m_{4\ell}$ [fb / GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2015_I1394865/d02-x01-y01
+XLabel=$p^{4\ell}_\text{T}$ [GeV]
+YLabel=$\text{d} \sigma^\text{fid}_{4\ell}/\text{d}p^{4\ell}_\text{T}$ [fb / GeV]
+# END PLOT
+
diff --git a/analyses/pluginATLAS/ATLAS_2015_I1394865.yoda b/analyses/pluginATLAS/ATLAS_2015_I1394865.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2015_I1394865.yoda
@@ -0,0 +1,31 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2015_I1394865/d01-x01-y01
+Path=/REF/ATLAS_2015_I1394865/d01-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+9.000000e+01	1.000000e+01	1.000000e+01	1.730000e-01	2.816026e-02	2.816026e-02
+1.100000e+02	1.000000e+01	1.000000e+01	2.280000e-02	1.047855e-02	1.047855e-02
+1.250000e+02	5.000000e+00	5.000000e+00	2.430000e-01	4.244997e-02	4.244997e-02
+1.400000e+02	1.000000e+01	1.000000e+01	6.510000e-02	1.532873e-02	1.532873e-02
+1.650000e+02	1.500000e+01	1.500000e+01	6.640000e-02	1.089312e-02	1.089312e-02
+1.900000e+02	1.000000e+01	1.000000e+01	2.200000e-01	2.529822e-02	2.529822e-02
+2.200000e+02	2.000000e+01	2.000000e+01	1.980000e-01	1.746425e-02	1.746425e-02
+2.700000e+02	3.000000e+01	3.000000e+01	8.960000e-02	9.897980e-03	9.897980e-03
+3.500000e+02	5.000000e+01	5.000000e+01	3.340000e-02	4.560702e-03	4.560702e-03
+7.000000e+02	3.000000e+02	3.000000e+02	2.140000e-03	4.850773e-04	4.850773e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2015_I1394865/d02-x01-y01
+Path=/REF/ATLAS_2015_I1394865/d02-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e+00	5.000000e+00	5.000000e+00	1.068000e+00	8.810221e-02	8.810221e-02
+1.500000e+01	5.000000e+00	5.000000e+00	6.110000e-01	6.053924e-02	6.053924e-02
+2.500000e+01	5.000000e+00	5.000000e+00	3.390000e-01	4.396590e-02	4.396590e-02
+3.500000e+01	5.000000e+00	5.000000e+00	3.460000e-01	4.205948e-02	4.205948e-02
+5.000000e+01	1.000000e+01	1.000000e+01	2.020000e-01	2.500000e-02	2.500000e-02
+7.000000e+01	1.000000e+01	1.000000e+01	5.860000e-02	1.450000e-02	1.450000e-02
+1.650000e+02	8.500000e+01	8.500000e+01	1.840000e-02	2.983287e-03	2.983287e-03
+END YODA_SCATTER2D
+
diff --git a/src/Analyses/ATLAS_2015_I1397635.cc b/analyses/pluginATLAS/ATLAS_2015_I1397635.cc
rename from src/Analyses/ATLAS_2015_I1397635.cc
rename to analyses/pluginATLAS/ATLAS_2015_I1397635.cc
diff --git a/data/anainfo/ATLAS_2015_I1397635.info b/analyses/pluginATLAS/ATLAS_2015_I1397635.info
rename from data/anainfo/ATLAS_2015_I1397635.info
rename to analyses/pluginATLAS/ATLAS_2015_I1397635.info
diff --git a/data/plotinfo/ATLAS_2015_I1397635.plot b/analyses/pluginATLAS/ATLAS_2015_I1397635.plot
rename from data/plotinfo/ATLAS_2015_I1397635.plot
rename to analyses/pluginATLAS/ATLAS_2015_I1397635.plot
diff --git a/data/refdata/ATLAS_2015_I1397635.yoda b/analyses/pluginATLAS/ATLAS_2015_I1397635.yoda
rename from data/refdata/ATLAS_2015_I1397635.yoda
rename to analyses/pluginATLAS/ATLAS_2015_I1397635.yoda
diff --git a/src/Analyses/ATLAS_2015_I1397637.cc b/analyses/pluginATLAS/ATLAS_2015_I1397637.cc
rename from src/Analyses/ATLAS_2015_I1397637.cc
rename to analyses/pluginATLAS/ATLAS_2015_I1397637.cc
diff --git a/data/anainfo/ATLAS_2015_I1397637.info b/analyses/pluginATLAS/ATLAS_2015_I1397637.info
rename from data/anainfo/ATLAS_2015_I1397637.info
rename to analyses/pluginATLAS/ATLAS_2015_I1397637.info
diff --git a/data/plotinfo/ATLAS_2015_I1397637.plot b/analyses/pluginATLAS/ATLAS_2015_I1397637.plot
rename from data/plotinfo/ATLAS_2015_I1397637.plot
rename to analyses/pluginATLAS/ATLAS_2015_I1397637.plot
diff --git a/data/refdata/ATLAS_2015_I1397637.yoda b/analyses/pluginATLAS/ATLAS_2015_I1397637.yoda
rename from data/refdata/ATLAS_2015_I1397637.yoda
rename to analyses/pluginATLAS/ATLAS_2015_I1397637.yoda
diff --git a/src/Analyses/ATLAS_2015_I1404878.cc b/analyses/pluginATLAS/ATLAS_2015_I1404878.cc
rename from src/Analyses/ATLAS_2015_I1404878.cc
rename to analyses/pluginATLAS/ATLAS_2015_I1404878.cc
diff --git a/data/anainfo/ATLAS_2015_I1404878.info b/analyses/pluginATLAS/ATLAS_2015_I1404878.info
rename from data/anainfo/ATLAS_2015_I1404878.info
rename to analyses/pluginATLAS/ATLAS_2015_I1404878.info
diff --git a/data/plotinfo/ATLAS_2015_I1404878.plot b/analyses/pluginATLAS/ATLAS_2015_I1404878.plot
rename from data/plotinfo/ATLAS_2015_I1404878.plot
rename to analyses/pluginATLAS/ATLAS_2015_I1404878.plot
diff --git a/data/refdata/ATLAS_2015_I1404878.yoda b/analyses/pluginATLAS/ATLAS_2015_I1404878.yoda
rename from data/refdata/ATLAS_2015_I1404878.yoda
rename to analyses/pluginATLAS/ATLAS_2015_I1404878.yoda
diff --git a/src/Analyses/ATLAS_2015_I1408516.cc b/analyses/pluginATLAS/ATLAS_2015_I1408516.cc
rename from src/Analyses/ATLAS_2015_I1408516.cc
rename to analyses/pluginATLAS/ATLAS_2015_I1408516.cc
diff --git a/data/anainfo/ATLAS_2015_I1408516.info b/analyses/pluginATLAS/ATLAS_2015_I1408516.info
rename from data/anainfo/ATLAS_2015_I1408516.info
rename to analyses/pluginATLAS/ATLAS_2015_I1408516.info
diff --git a/data/plotinfo/ATLAS_2015_I1408516.plot b/analyses/pluginATLAS/ATLAS_2015_I1408516.plot
rename from data/plotinfo/ATLAS_2015_I1408516.plot
rename to analyses/pluginATLAS/ATLAS_2015_I1408516.plot
diff --git a/data/refdata/ATLAS_2015_I1408516.yoda b/analyses/pluginATLAS/ATLAS_2015_I1408516.yoda
rename from data/refdata/ATLAS_2015_I1408516.yoda
rename to analyses/pluginATLAS/ATLAS_2015_I1408516.yoda
diff --git a/data/anainfo/ATLAS_2015_I1408516_EL.info b/analyses/pluginATLAS/ATLAS_2015_I1408516_EL.info
rename from data/anainfo/ATLAS_2015_I1408516_EL.info
rename to analyses/pluginATLAS/ATLAS_2015_I1408516_EL.info
diff --git a/data/plotinfo/ATLAS_2015_I1408516_EL.plot b/analyses/pluginATLAS/ATLAS_2015_I1408516_EL.plot
rename from data/plotinfo/ATLAS_2015_I1408516_EL.plot
rename to analyses/pluginATLAS/ATLAS_2015_I1408516_EL.plot
diff --git a/data/refdata/ATLAS_2015_I1408516_EL.yoda b/analyses/pluginATLAS/ATLAS_2015_I1408516_EL.yoda
rename from data/refdata/ATLAS_2015_I1408516_EL.yoda
rename to analyses/pluginATLAS/ATLAS_2015_I1408516_EL.yoda
diff --git a/data/anainfo/ATLAS_2015_I1408516_MU.info b/analyses/pluginATLAS/ATLAS_2015_I1408516_MU.info
rename from data/anainfo/ATLAS_2015_I1408516_MU.info
rename to analyses/pluginATLAS/ATLAS_2015_I1408516_MU.info
diff --git a/data/plotinfo/ATLAS_2015_I1408516_MU.plot b/analyses/pluginATLAS/ATLAS_2015_I1408516_MU.plot
rename from data/plotinfo/ATLAS_2015_I1408516_MU.plot
rename to analyses/pluginATLAS/ATLAS_2015_I1408516_MU.plot
diff --git a/data/refdata/ATLAS_2015_I1408516_MU.yoda b/analyses/pluginATLAS/ATLAS_2015_I1408516_MU.yoda
rename from data/refdata/ATLAS_2015_I1408516_MU.yoda
rename to analyses/pluginATLAS/ATLAS_2015_I1408516_MU.yoda
diff --git a/src/Analyses/ATLAS_2016_CONF_2016_037.cc b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_037.cc
rename from src/Analyses/ATLAS_2016_CONF_2016_037.cc
rename to analyses/pluginATLAS/ATLAS_2016_CONF_2016_037.cc
diff --git a/data/anainfo/ATLAS_2016_CONF_2016_037.info b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_037.info
rename from data/anainfo/ATLAS_2016_CONF_2016_037.info
rename to analyses/pluginATLAS/ATLAS_2016_CONF_2016_037.info
diff --git a/src/Analyses/ATLAS_2016_CONF_2016_054.cc b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_054.cc
rename from src/Analyses/ATLAS_2016_CONF_2016_054.cc
rename to analyses/pluginATLAS/ATLAS_2016_CONF_2016_054.cc
diff --git a/data/anainfo/ATLAS_2016_CONF_2016_054.info b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_054.info
rename from data/anainfo/ATLAS_2016_CONF_2016_054.info
rename to analyses/pluginATLAS/ATLAS_2016_CONF_2016_054.info
diff --git a/analyses/pluginATLAS/ATLAS_2016_CONF_2016_078.cc b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_078.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_078.cc
@@ -0,0 +1,273 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/PromptFinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Projections/Sphericity.hh"
+#include "Rivet/Projections/SmearedParticles.hh"
+#include "Rivet/Projections/SmearedJets.hh"
+#include "Rivet/Projections/SmearedMET.hh"
+#include "Rivet/Tools/Cutflow.hh"
+
+namespace Rivet {
+
+
+  /// @brief ATLAS 2016 0-lepton SUSY search, from 13/fb ICHEP'16 CONF note
+  class ATLAS_2016_CONF_2016_078 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(ATLAS_2016_CONF_2016_078);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      // Initialise and register projections
+      FinalState calofs(Cuts::abseta < 3.2);
+      FastJets fj(calofs, FastJets::ANTIKT, 0.4);
+      declare(fj, "TruthJets");
+      declare(SmearedJets(fj, JET_SMEAR_ATLAS_RUN2, //JET_BTAG_ATLAS_RUN2_MV2C10
+                          [](const Jet& j) {
+                            if (j.abseta() > 2.5) return 0.;
+                            return j.bTagged(Cuts::pT > 5*GeV) ? 0.77 : j.cTagged(Cuts::pT > 5*GeV) ? 1/6. : 1/134.;
+                          }), "RecoJets");
+
+      MissingMomentum mm(calofs);
+      declare(mm, "TruthMET");
+      declare(SmearedMET(mm, MET_SMEAR_ATLAS_RUN2), "RecoMET");
+
+      PromptFinalState es(Cuts::abseta < 2.47 && Cuts::abspid == PID::ELECTRON, true, true);
+      declare(es, "TruthElectrons");
+      declare(SmearedParticles(es, ELECTRON_EFF_ATLAS_RUN2, ELECTRON_SMEAR_ATLAS_RUN2), "RecoElectrons");
+
+      PromptFinalState mus(Cuts::abseta < 2.7 && Cuts::abspid == PID::MUON, true);
+      declare(mus, "TruthMuons");
+      declare(SmearedParticles(mus, MUON_EFF_ATLAS_RUN2, MUON_SMEAR_ATLAS_RUN2), "RecoMuons");
+
+
+      // Book histograms/counters
+      _h_2j_0800 = bookCounter("2j-0800");
+      _h_2j_1200 = bookCounter("2j-1200");
+      _h_2j_1600 = bookCounter("2j-1600");
+      _h_2j_2000 = bookCounter("2j-2000");
+      _h_3j_1200 = bookCounter("2j-2000");
+      _h_4j_1000 = bookCounter("4j-1000");
+      _h_4j_1400 = bookCounter("4j-1400");
+      _h_4j_1800 = bookCounter("4j-1800");
+      _h_4j_2200 = bookCounter("4j-2200");
+      _h_4j_2600 = bookCounter("4j-2600");
+      _h_5j_1400 = bookCounter("5j-1400");
+      _h_6j_1800 = bookCounter("6j-1800");
+      _h_6j_2200 = bookCounter("6j-2200");
+
+
+      // Book cut-flows
+      const vector<string> cuts23j = {"Pre-sel+MET+pT1+meff", "Njet", "Dphi_min(j123,MET)", "Dphi_min(j4+,MET)", "pT2", "eta_j12", "MET/sqrtHT", "m_eff(incl)"};
+      _flows.addCutflow("2j-0800", cuts23j);
+      _flows.addCutflow("2j-1200", cuts23j);
+      _flows.addCutflow("2j-1600", cuts23j);
+      _flows.addCutflow("2j-2000", cuts23j);
+      _flows.addCutflow("3j-1200", cuts23j);
+      const vector<string> cuts456j = {"Pre-sel+MET+pT1+meff", "Njet", "Dphi_min(j123,MET)", "Dphi_min(j4+,MET)", "pT4", "eta_j1234", "Aplanarity", "MET/m_eff(Nj)", "m_eff(incl)"};
+      _flows.addCutflow("4j-1000", cuts456j);
+      _flows.addCutflow("4j-1400", cuts456j);
+      _flows.addCutflow("4j-1800", cuts456j);
+      _flows.addCutflow("4j-2200", cuts456j);
+      _flows.addCutflow("4j-2600", cuts456j);
+      _flows.addCutflow("5j-1400", cuts456j);
+      _flows.addCutflow("6j-1800", cuts456j);
+      _flows.addCutflow("6j-2200", cuts456j);
+
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      _flows.fillinit();
+
+      // Same MET cut for all signal regions
+      const Vector3 vmet = -apply<SmearedMET>(event, "RecoMET").vectorEt();
+      const double met = vmet.mod();
+      if (met < 250*GeV) vetoEvent;
+
+      // Get baseline electrons, muons, and jets
+      Particles elecs = apply<ParticleFinder>(event, "RecoElectrons").particles(Cuts::pT > 10*GeV);
+      Particles muons = apply<ParticleFinder>(event, "RecoMuons").particles(Cuts::pT > 10*GeV);
+      Jets jets = apply<JetAlg>(event, "RecoJets").jetsByPt(Cuts::pT > 20*GeV && Cuts::abseta < 2.8); ///< @todo Pile-up subtraction
+
+      // Jet/electron/muons overlap removal and selection
+      // Remove electrons within dR = 0.2 of a b-tagged jet
+      for (const Jet& j : jets)
+        if (j.abseta() < 2.5 && j.pT() > 50*GeV && j.bTagged(Cuts::pT > 5*GeV))
+          ifilter_discard(elecs, deltaRLess(j, 0.2, RAPIDITY));
+      // Remove any |eta| < 2.8 jet within dR = 0.2 of a remaining electron
+      for (const Particle& e : elecs)
+        ifilter_discard(jets, deltaRLess(e, 0.2, RAPIDITY));
+      // Remove any electron with dR in [0.2, 0.4] of a remaining jet
+      for (const Jet& j : jets)
+        ifilter_discard(elecs, [&](const Particle& e) { return inRange(deltaR(e,j, RAPIDITY), 0.2, 0.4); });
+      // Remove any muon with dR close to a remaining jet, via a functional form
+      for (const Jet& j : jets)
+        ifilter_discard(muons, [&](const Particle& m) { return deltaR(m,j, RAPIDITY) < min(0.4, 0.04 + 10*GeV/m.pT()); });
+      // Remove any |eta| < 2.8 jet within dR = 0.2 of a remaining muon if track conditions are met
+      for (const Particle& m : muons)
+        /// @todo Add track efficiency random filtering
+        ifilter_discard(jets, [&](const Jet& j) {
+            if (deltaR(j,m, RAPIDITY) > 0.2) return false;
+            const Particles trks = j.particles(Cuts::abscharge > 0 && Cuts::pT > 0.5*GeV);
+            return trks.size() < 3 || (m.pT() > 2*j.pT() && m.pT() > 0.7*sum(trks, pT, 0.0));
+          });
+      // Loose electron selection
+      ifilter_select(elecs, ParticleEffFilter(ELECTRON_IDEFF_ATLAS_RUN2_LOOSE));
+
+      // Veto the event if there are any remaining baseline leptons
+      if (!elecs.empty()) vetoEvent;
+      if (!muons.empty()) vetoEvent;
+
+      // Passed presel & MET
+      _flows.fill(0, true);
+
+      // Get jets and their pTs
+      const Jets jets20 = jets;
+      const Jets jets50 = filterBy(jets, Cuts::pT > 50*GeV);
+      const size_t njets50 = jets50.size(), njets20 = jets20.size();
+      if (jets50.size() < 2) vetoEvent;
+      vector<double> jetpts20, jetpts50;
+      transform(jets20, jetpts20, pT);
+      transform(jets50, jetpts50, pT);
+
+      // Construct multi-jet observables
+      const double ht = sum(jetpts20, 0.0);
+      const double met_sqrtHT = met / sqrt(ht);
+      const double meff_incl = sum(jetpts50, met);
+      const double meff_4 = (njets50 >= 4) ? sum(head(jetpts50, 4), met) : -1;
+      const double meff_5 = (njets50 >= 5) ? sum(head(jetpts50, 5), met) : -1;
+      const double meff_6 = (njets50 >= 6) ? sum(head(jetpts50, 6), met) : -1;
+      const double met_meff_4 = met / meff_4;
+      const double met_meff_5 = met / meff_5;
+      const double met_meff_6 = met / meff_6;
+
+      // Jet |eta|s
+      vector<double> jetetas20; transform(jets20, jetetas20, abseta);
+      const double etamax_2 = (njets20 >= 2) ? max(head(jetetas20, 2)) : -1;
+      const double etamax_4 = (njets20 >= 4) ? max(head(jetetas20, 4)) : -1;
+      const double etamax_6 = (njets20 >= 6) ? max(head(jetetas20, 6)) : -1;
+
+      // Get dphis between MET and jets
+      vector<double> dphimets50; transform(jets50, dphimets50, deltaPhiWRT(vmet));
+      const vector<double> dphimets50_123 = head(dphimets50, 3);
+      const vector<double> dphimets50_more = tail(dphimets50, -3);
+      const double dphimin_123 = !dphimets50_123.empty() ? min(dphimets50_123) : -1;
+      const double dphimin_more = !dphimets50_more.empty() ? min(dphimets50_more) : -1;
+
+      // Jet aplanarity
+      Sphericity sph; sph.calc(jets50);
+      const double aplanarity = sph.aplanarity();
+
+
+      //////////////////
+
+
+      const double w = event.weight();
+
+      // 2 jet regions
+      if (dphimin_123 > 0.8 && dphimin_more > 0.4) {
+        if (jetpts50[1] > 200*GeV && etamax_2 < 0.8) { //< implicit pT[0] cut
+          if (met_sqrtHT > 14*sqrt(GeV) && meff_incl > 800*GeV) _h_2j_0800->fill(w);
+        }
+        if (jetpts50[1] > 250*GeV && etamax_2 < 1.2) { //< implicit pT[0] cut
+          if (met_sqrtHT > 16*sqrt(GeV) && meff_incl > 1200*GeV) _h_2j_1200->fill(w);
+          if (met_sqrtHT > 18*sqrt(GeV) && meff_incl > 1600*GeV) _h_2j_1600->fill(w);
+          if (met_sqrtHT > 20*sqrt(GeV) && meff_incl > 2000*GeV) _h_2j_2000->fill(w);
+        }
+      }
+
+      // 3 jet region
+      if (njets50 >= 3 && dphimin_123 > 0.4 && dphimin_more > 0.2) {
+        if (jetpts50[0] > 600*GeV && jetpts50[2] > 50*GeV) { //< implicit pT[1] cut
+          if (met_sqrtHT > 16*sqrt(GeV) && meff_incl > 1200*GeV) _h_3j_1200->fill(w);
+        }
+      }
+
+      // 4 jet regions (note implicit pT[1,2] cuts)
+      if (njets50 >= 4 && dphimin_123 > 0.4 && dphimin_more > 0.4 && jetpts50[0] > 200*GeV && aplanarity > 0.04) {
+        if (jetpts50[3] > 100*GeV && etamax_4 < 1.2 && met_meff_4 > 0.25*sqrt(GeV) && meff_incl > 1000*GeV) _h_4j_1000->fill(w);
+        if (jetpts50[3] > 100*GeV && etamax_4 < 2.0 && met_meff_4 > 0.25*sqrt(GeV) && meff_incl > 1400*GeV) _h_4j_1400->fill(w);
+        if (jetpts50[3] > 100*GeV && etamax_4 < 2.0 && met_meff_4 > 0.20*sqrt(GeV) && meff_incl > 1800*GeV) _h_4j_1800->fill(w);
+        if (jetpts50[3] > 150*GeV && etamax_4 < 2.0 && met_meff_4 > 0.20*sqrt(GeV) && meff_incl > 2200*GeV) _h_4j_2200->fill(w);
+        if (jetpts50[3] > 150*GeV &&                   met_meff_4 > 0.20*sqrt(GeV) && meff_incl > 2600*GeV) _h_4j_2600->fill(w);
+      }
+
+      // 5 jet region (note implicit pT[1,2,3] cuts)
+      if (njets50 >= 5 && dphimin_123 > 0.4 && dphimin_more > 0.2 && jetpts50[0] > 500*GeV) {
+        if (jetpts50[4] > 50*GeV && met_meff_5 > 0.3*sqrt(GeV) && meff_incl > 1400*GeV) _h_5j_1400->fill(w);
+      }
+
+      // 6 jet regions (note implicit pT[1,2,3,4] cuts)
+      if (njets50 >= 6 && dphimin_123 > 0.4 && dphimin_more > 0.2 && jetpts50[0] > 200*GeV && aplanarity > 0.08) {
+        if (jetpts50[5] >  50*GeV && etamax_6 < 2.0 && met_meff_6*sqrt(GeV) > 0.20 && meff_incl > 1800*GeV) _h_6j_1800->fill(w);
+        if (jetpts50[5] > 100*GeV &&                   met_meff_6*sqrt(GeV) > 0.15 && meff_incl > 2200*GeV) _h_6j_2200->fill(w);
+      }
+
+      // Cutflows
+      _flows["2j-0800"].filltail({true, dphimin_123 > 0.8, dphimin_more > 0.4, jetpts50[1] > 200*GeV, etamax_2 < 0.8, met_sqrtHT > 14*sqrt(GeV), meff_incl >  800*GeV});
+      _flows["2j-1200"].filltail({true, dphimin_123 > 0.8, dphimin_more > 0.4, jetpts50[1] > 250*GeV, etamax_2 < 1.2, met_sqrtHT > 16*sqrt(GeV), meff_incl > 1200*GeV});
+      _flows["2j-1600"].filltail({true, dphimin_123 > 0.8, dphimin_more > 0.4, jetpts50[1] > 250*GeV, etamax_2 < 1.2, met_sqrtHT > 18*sqrt(GeV), meff_incl > 1600*GeV});
+      _flows["2j-2000"].filltail({true, dphimin_123 > 0.8, dphimin_more > 0.4, jetpts50[1] > 250*GeV, etamax_2 < 1.2, met_sqrtHT > 20*sqrt(GeV), meff_incl > 2000*GeV});
+      _flows["3j-1200"].filltail({njets50 >= 3, dphimin_123 > 0.4, dphimin_more > 0.2, jetpts50[0] > 600*GeV && jetpts50[2] > 50*GeV, true, met_sqrtHT > 16*sqrt(GeV), meff_incl > 1200*GeV});
+      _flows["4j-1000"].filltail({njets50 >= 4, dphimin_123 > 0.4, dphimin_more > 0.4, jetpts50[0] > 200*GeV && jetpts50[3] > 100*GeV, etamax_4 < 1.2, aplanarity > 0.04, met_meff_4 > 0.25*sqrt(GeV), meff_incl > 1000*GeV});
+      _flows["4j-1400"].filltail({njets50 >= 4, dphimin_123 > 0.4, dphimin_more > 0.4, jetpts50[0] > 200*GeV && jetpts50[3] > 100*GeV, etamax_4 < 2.0, aplanarity > 0.04, met_meff_4 > 0.25*sqrt(GeV), meff_incl > 1400*GeV});
+      _flows["4j-1800"].filltail({njets50 >= 4, dphimin_123 > 0.4, dphimin_more > 0.4, jetpts50[0] > 200*GeV && jetpts50[3] > 100*GeV, etamax_4 < 2.0, aplanarity > 0.04, met_meff_4 > 0.20*sqrt(GeV), meff_incl > 1800*GeV});
+      _flows["4j-2200"].filltail({njets50 >= 4, dphimin_123 > 0.4, dphimin_more > 0.4, jetpts50[0] > 200*GeV && jetpts50[3] > 150*GeV, etamax_4 < 2.0, aplanarity > 0.04, met_meff_4 > 0.20*sqrt(GeV), meff_incl > 2200*GeV});
+      _flows["4j-2600"].filltail({njets50 >= 4, dphimin_123 > 0.4, dphimin_more > 0.4, jetpts50[0] > 200*GeV && jetpts50[3] > 150*GeV, true,           aplanarity > 0.04, met_meff_4 > 0.20*sqrt(GeV), meff_incl > 2600*GeV});
+      _flows["5j-1400"].filltail({njets50 >= 5, dphimin_123 > 0.4, dphimin_more > 0.2, jetpts50[0] > 500*GeV && jetpts50[4] > 50*GeV, true, true, met_meff_5 > 0.3*sqrt(GeV), meff_incl > 1400*GeV});
+      _flows["6j-1800"].filltail({njets50 >= 6, dphimin_123 > 0.4, dphimin_more > 0.2, jetpts50[0] > 200*GeV && jetpts50[5] >  50*GeV, etamax_6 < 2.0, aplanarity > 0.08, met_meff_6 > 0.20*sqrt(GeV), meff_incl > 1800*GeV});
+      _flows["6j-2200"].filltail({njets50 >= 6, dphimin_123 > 0.4, dphimin_more > 0.2, jetpts50[0] > 200*GeV && jetpts50[5] > 100*GeV, true,           aplanarity > 0.08, met_meff_6 > 0.15*sqrt(GeV), meff_incl > 2200*GeV});
+
+    }
+
+
+    /// Normalise counters after the run
+    void finalize() {
+
+      const double sf = 13.3*crossSection()/femtobarn/sumOfWeights();
+      scale({_h_2j_0800, _h_2j_1200, _h_2j_1600, _h_2j_2000}, sf);
+      scale( _h_3j_1200, sf);
+      scale({_h_4j_1000, _h_4j_1400, _h_4j_1800, _h_4j_2200, _h_4j_2600}, sf);
+      scale( _h_5j_1400, sf);
+      scale({_h_6j_1800, _h_6j_2200}, sf);
+
+      _flows.scale(sf);
+      MSG_INFO("CUTFLOWS:\n\n" << _flows);
+
+    }
+
+    //@}
+
+
+  private:
+
+    /// @name Histograms
+    //@{
+    CounterPtr _h_2j_0800, _h_2j_1200, _h_2j_1600, _h_2j_2000, _h_3j_1200;
+    CounterPtr _h_4j_1000, _h_4j_1400, _h_4j_1800, _h_4j_2200, _h_4j_2600;
+    CounterPtr _h_5j_1400, _h_6j_1800, _h_6j_2200;
+    //@}
+
+    /// Cut-flows
+    Cutflows _flows;
+
+  };
+
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(ATLAS_2016_CONF_2016_078);
+
+
+}
diff --git a/analyses/pluginATLAS/ATLAS_2016_CONF_2016_078.info b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_078.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_078.info
@@ -0,0 +1,19 @@
+Name: ATLAS_2016_CONF_2016_078
+Year: 2016
+Summary: ATLAS ICHEP16 0-lepton SUSY search at 13~\TeV with 13.2/fb
+Experiment: ATLAS
+Collider: LHC
+Status: VALIDATED
+Authors:
+ - Andy Buckley <andy.buckley@cern.ch>
+RunInfo: BSM signal events.
+NumEvents: 10000
+NeedCrossSection: yes
+Beams: [p+, p+]
+Energies: [13000]
+Description:
+  'ATLAS search for SUSY in 13~TeV $pp$ collisions at LHC Run~2, using 13.2/fb of
+  integrated luminosity and events containing missing transverse momentum and
+  no isolated high-energy leptons.
+  Detailed info:
+  https://atlas.web.cern.ch/Atlas/GROUPS/PHYSICS/CONFNOTES/ATLAS-CONF-2016-078/ '
diff --git a/analyses/pluginATLAS/ATLAS_2016_CONF_2016_092.cc b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_092.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_092.cc
@@ -0,0 +1,60 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Tools/BinnedHistogram.hh"
+
+namespace Rivet {
+
+
+  /// Inclusive jet cross sections using early 13 TeV data
+  /// @author Stefan von Buddenbrock <stef.von.b@cern.ch>
+  class ATLAS_2016_CONF_2016_092 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(ATLAS_2016_CONF_2016_092);
+
+
+    /// Bookings
+    void init() {
+
+      // Define the jets
+      FastJets antiKT04Jets(FinalState(Cuts::open()),  FastJets::ANTIKT, 0.4);
+      antiKT04Jets.useInvisibles();
+      declare(antiKT04Jets, "antiKT04Jets");
+
+      // Book histograms
+      const double y_bins[] = {0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0};
+      for (size_t i = 0; i < 6; i++)
+        _h_pT.addHistogram(y_bins[i], y_bins[i+1], bookHisto1D(i+1, 1, 1));
+
+    }
+
+
+    /// Per-event analysis
+    void analyze(const Event& event) {
+      const Jets& jets = apply<FastJets>(event, "antiKT04Jets")
+        .jetsByPt(Cuts::pT > 100*GeV && Cuts::absrap < 3.0);
+      for (const Jet& j : jets)
+        _h_pT.fill(j.absrap(), j.pT()/GeV, event.weight());
+    }
+
+
+    /// Post-run scaling
+    void finalize() {
+      // Divide by 2 to only get positive rapidity values
+      _h_pT.scale(0.5*crossSection()/picobarn/sumOfWeights(), this);
+    }
+
+
+    /// Histograms
+    BinnedHistogram<double> _h_pT;
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(ATLAS_2016_CONF_2016_092);
+
+}
diff --git a/analyses/pluginATLAS/ATLAS_2016_CONF_2016_092.info b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_092.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_092.info
@@ -0,0 +1,36 @@
+Name: ATLAS_2016_CONF_2016_092
+Year: 2016
+Summary: Inclusive jet cross sections using early 13 TeV data
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1482689
+Status: VALIDATED
+Authors:
+ - Stefan von Buddenbrock <stef.von.b@cern.ch>
+References:
+  - ATLAS-CONF-2016-092
+Keywords:
+ - JETS
+RunInfo: Soft and hard QCD events
+Luminosity_fb: 3.2
+Beams: [p+, p+]
+Energies: [13000]
+Description:
+  'This note presents the measurement of inclusive-jet cross-sections in proton--proton collisions at a centre-of-mass energy of 13TeV.
+  The measurement uses data corresponding to an integrated luminosity of 3.2 fb$^{-1}$ collected with the ATLAS detector at the 
+  Large Hadron Collider in 2015. Jets are clustered using the anti-$k_\text{t}$ algorithm with a radius parameter value of $R = 0.4$. 
+  Double differential inclusive-jet cross-sections are presented as a function of the jet transverse momentum, covering the range from 
+  100 GeV to about 3.2 TeV, and of the absolute jet rapidity, up to $|y| = 3$. The predictions of next-to-leading-order QCD calculations 
+  using several parton distribution function (PDF) sets and corrected for non-perturbative and electroweak effects are compared to the 
+  measured cross-sections. The predictions are consistent with the measured cross-sections within uncertainties.'
+BibKey: ATLAS:2016djc
+BibTeX: '@article{ATLAS:2016djc,
+      author         = "The ATLAS collaboration",
+      title          = "{Measurement of inclusive-jet cross-sections in
+                        proton-proton collisions at $\sqrt{s} = 13~\mathrm{TeV}$
+                        centre-of-mass energy with the ATLAS detector}",
+      collaboration  = "ATLAS",
+      year           = "2016",
+      reportNumber   = "ATLAS-CONF-2016-092",
+      SLACcitation   = "%%CITATION = ATLAS-CONF-2016-092;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2016_CONF_2016_092.plot b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_092.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_092.plot
@@ -0,0 +1,36 @@
+# BEGIN PLOT /ATLAS_2016_CONF_2016_092/d.*-x01-y01
+XLabel=Jet $p_\text{T}$ [GeV]
+YLabel=$\text{d}^2\sigma/\text{d}p_\text{T}\text{d}y$ [pb/GeV]
+LogX=1
+LogY=1
+LeftMargin=1.5
+XTwosidedTicks=1
+YTwosidedTicks=1
+LegendXPos=0.95
+LegendAlign=r
+YMin=2.0E-06
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_CONF_2016_092/d01-x01-y01
+Title=Inclusive jet cross section as a function of jet $p_\text{T}$ ($0.0 < |y| < 0.5$)
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_CONF_2016_092/d02-x01-y01
+Title=Inclusive jet cross section as a function of jet $p_\text{T}$ ($0.5 < |y| < 1.0$)
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_CONF_2016_092/d03-x01-y01
+Title=Inclusive jet cross section as a function of jet $p_\text{T}$ ($1.0 < |y| < 1.5$)
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_CONF_2016_092/d04-x01-y01
+Title=Inclusive jet cross section as a function of jet $p_\text{T}$ ($1.5 < |y| < 2.0$)
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_CONF_2016_092/d05-x01-y01
+Title=Inclusive jet cross section as a function of jet $p_\text{T}$ ($2.0 < |y| < 2.5$)
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_CONF_2016_092/d06-x01-y01
+Title=Inclusive jet cross section as a function of jet $p_\text{T}$ ($2.5 < |y| < 3.0$)
+# END PLOT
diff --git a/analyses/pluginATLAS/ATLAS_2016_CONF_2016_092.yoda b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_092.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_092.yoda
@@ -0,0 +1,216 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_CONF_2016_092/d01-x01-y01
+Path=/REF/ATLAS_2016_CONF_2016_092/d01-x01-y01
+Title=Inclusive jet cross section as a function of jet $p_\text{T}$ ($0.0 < |y| < 0.5$)
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.080000e+02	8.000000e+00	8.000000e+00	1.180800e+04	6.395043e+02	6.564581e+02
+1.250000e+02	9.000000e+00	9.000000e+00	5.769000e+03	2.968379e+02	3.244907e+02
+1.430000e+02	9.000000e+00	9.000000e+00	2.965161e+03	1.689066e+02	1.766983e+02
+1.620000e+02	1.000000e+01	1.000000e+01	1.620690e+03	9.890013e+01	9.715525e+01
+1.830000e+02	1.100000e+01	1.100000e+01	8.641227e+02	4.613975e+01	4.901481e+01
+2.050000e+02	1.100000e+01	1.100000e+01	4.804864e+02	2.147602e+01	2.531446e+01
+2.280000e+02	1.200000e+01	1.200000e+01	2.727525e+02	1.090512e+01	1.278172e+01
+2.520000e+02	1.200000e+01	1.200000e+01	1.591842e+02	6.159835e+00	6.758910e+00
+2.770000e+02	1.300000e+01	1.300000e+01	9.610923e+01	3.769223e+00	3.929732e+00
+3.040000e+02	1.400000e+01	1.400000e+01	5.717107e+01	2.291042e+00	2.304440e+00
+3.320000e+02	1.400000e+01	1.400000e+01	3.539789e+01	1.393449e+00	1.369325e+00
+3.610000e+02	1.500000e+01	1.500000e+01	2.219577e+01	8.536694e-01	8.313884e-01
+3.920000e+02	1.600000e+01	1.600000e+01	1.387663e+01	5.346869e-01	5.257846e-01
+4.250000e+02	1.700000e+01	1.700000e+01	8.856706e+00	3.597372e-01	3.588295e-01
+4.600000e+02	1.800000e+01	1.800000e+01	5.656333e+00	2.451973e-01	2.425138e-01
+4.970000e+02	1.900000e+01	1.900000e+01	3.580842e+00	1.656649e-01	1.603874e-01
+5.360000e+02	2.000000e+01	2.000000e+01	2.296690e+00	1.103931e-01	1.059074e-01
+5.770000e+02	2.100000e+01	2.100000e+01	1.489674e+00	7.299903e-02	7.053826e-02
+6.200000e+02	2.200000e+01	2.200000e+01	9.669773e-01	4.821814e-02	4.701769e-02
+6.650000e+02	2.300000e+01	2.300000e+01	6.323283e-01	3.247140e-02	3.166469e-02
+7.120000e+02	2.400000e+01	2.400000e+01	4.133063e-01	2.209440e-02	2.143212e-02
+7.610000e+02	2.500000e+01	2.500000e+01	2.724220e-01	1.509475e-02	1.461357e-02
+8.120000e+02	2.600000e+01	2.600000e+01	1.790304e-01	1.019736e-02	9.921619e-03
+8.660000e+02	2.800000e+01	2.800000e+01	1.189554e-01	6.956280e-03	6.821756e-03
+9.230000e+02	2.900000e+01	2.900000e+01	7.864224e-02	4.760283e-03	4.680801e-03
+9.820000e+02	3.000000e+01	3.000000e+01	5.200783e-02	3.262284e-03	3.191130e-03
+1.044000e+03	3.200000e+01	3.200000e+01	3.385813e-02	2.201727e-03	2.137816e-03
+1.119000e+03	4.300000e+01	4.300000e+01	2.130826e-02	1.449760e-03	1.403977e-03
+1.236000e+03	7.400000e+01	7.400000e+01	1.112020e-02	8.029408e-04	7.806908e-04
+1.420000e+03	1.100000e+02	1.100000e+02	4.070645e-03	3.383302e-04	3.272268e-04
+1.761000e+03	2.310000e+02	2.310000e+02	8.194351e-04	9.934419e-05	9.594095e-05
+2.964500e+03	9.725000e+02	9.725000e+02	2.621661e-05	5.845624e-06	5.695535e-06
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_CONF_2016_092/d02-x01-y01
+Path=/REF/ATLAS_2016_CONF_2016_092/d02-x01-y01
+Title=Inclusive jet cross section as a function of jet $p_\text{T}$ ($0.5 < |y| < 1.0$)
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.080000e+02	8.000000e+00	8.000000e+00	1.113300e+04	6.602727e+02	6.165228e+02
+1.250000e+02	9.000000e+00	9.000000e+00	5.460217e+03	2.873722e+02	3.053690e+02
+1.430000e+02	9.000000e+00	9.000000e+00	2.792233e+03	1.496961e+02	1.590057e+02
+1.620000e+02	1.000000e+01	1.000000e+01	1.480400e+03	8.602609e+01	8.579270e+01
+1.830000e+02	1.100000e+01	1.100000e+01	7.903682e+02	4.298121e+01	4.541222e+01
+2.050000e+02	1.100000e+01	1.100000e+01	4.476914e+02	2.155501e+01	2.410972e+01
+2.280000e+02	1.200000e+01	1.200000e+01	2.541517e+02	1.093850e+01	1.215239e+01
+2.520000e+02	1.200000e+01	1.200000e+01	1.473208e+02	6.075782e+00	6.529662e+00
+2.770000e+02	1.300000e+01	1.300000e+01	8.912731e+01	3.693298e+00	3.892568e+00
+3.040000e+02	1.400000e+01	1.400000e+01	5.339464e+01	2.229226e+00	2.305049e+00
+3.320000e+02	1.400000e+01	1.400000e+01	3.237871e+01	1.336951e+00	1.336778e+00
+3.610000e+02	1.500000e+01	1.500000e+01	2.048777e+01	8.382166e-01	8.155814e-01
+3.920000e+02	1.600000e+01	1.600000e+01	1.272413e+01	5.240467e-01	5.116143e-01
+4.250000e+02	1.700000e+01	1.700000e+01	7.949412e+00	3.444729e-01	3.374651e-01
+4.600000e+02	1.800000e+01	1.800000e+01	5.040167e+00	2.319109e-01	2.221696e-01
+4.970000e+02	1.900000e+01	1.900000e+01	3.234053e+00	1.571323e-01	1.488129e-01
+5.360000e+02	2.000000e+01	2.000000e+01	2.052735e+00	1.024678e-01	9.873164e-02
+5.770000e+02	2.100000e+01	2.100000e+01	1.311340e+00	6.662807e-02	6.549056e-02
+6.200000e+02	2.200000e+01	2.200000e+01	8.507955e-01	4.424041e-02	4.362429e-02
+6.650000e+02	2.300000e+01	2.300000e+01	5.490152e-01	2.946920e-02	2.887356e-02
+7.120000e+02	2.400000e+01	2.400000e+01	3.609833e-01	2.021947e-02	1.971366e-02
+7.610000e+02	2.500000e+01	2.500000e+01	2.370580e-01	1.391557e-02	1.353533e-02
+8.120000e+02	2.600000e+01	2.600000e+01	1.541027e-01	9.523687e-03	9.240587e-03
+8.660000e+02	2.800000e+01	2.800000e+01	9.955661e-02	6.458412e-03	6.250493e-03
+9.230000e+02	2.900000e+01	2.900000e+01	6.541259e-02	4.430461e-03	4.291384e-03
+9.820000e+02	3.000000e+01	3.000000e+01	4.271017e-02	2.995453e-03	2.918779e-03
+1.044000e+03	3.200000e+01	3.200000e+01	2.763719e-02	1.985849e-03	1.951008e-03
+1.119000e+03	4.300000e+01	4.300000e+01	1.710430e-02	1.270528e-03	1.254947e-03
+1.236000e+03	7.400000e+01	7.400000e+01	8.627027e-03	6.842991e-04	6.704148e-04
+1.420000e+03	1.100000e+02	1.100000e+02	2.977068e-03	2.752099e-04	2.657419e-04
+1.761000e+03	2.310000e+02	2.310000e+02	5.882987e-04	7.885907e-05	7.717771e-05
+2.964500e+03	9.725000e+02	9.725000e+02	1.451990e-05	3.938558e-06	3.786055e-06
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_CONF_2016_092/d03-x01-y01
+Path=/REF/ATLAS_2016_CONF_2016_092/d03-x01-y01
+Title=Inclusive jet cross section as a function of jet $p_\text{T}$ ($1.0 < |y| < 1.5$)
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.080000e+02	8.000000e+00	8.000000e+00	9.869625e+03	6.536835e+02	6.562589e+02
+1.250000e+02	9.000000e+00	9.000000e+00	4.797878e+03	3.019278e+02	3.039797e+02
+1.430000e+02	9.000000e+00	9.000000e+00	2.372283e+03	1.560575e+02	1.565659e+02
+1.620000e+02	1.000000e+01	1.000000e+01	1.270865e+03	9.005784e+01	8.718276e+01
+1.830000e+02	1.100000e+01	1.100000e+01	6.906273e+02	4.469351e+01	4.623864e+01
+2.050000e+02	1.100000e+01	1.100000e+01	3.766968e+02	2.106313e+01	2.393837e+01
+2.280000e+02	1.200000e+01	1.200000e+01	2.115288e+02	1.059037e+01	1.211911e+01
+2.520000e+02	1.200000e+01	1.200000e+01	1.219237e+02	5.871212e+00	6.312548e+00
+2.770000e+02	1.300000e+01	1.300000e+01	7.252692e+01	3.557005e+00	3.611541e+00
+3.040000e+02	1.400000e+01	1.400000e+01	4.300714e+01	2.143906e+00	2.139296e+00
+3.320000e+02	1.400000e+01	1.400000e+01	2.617704e+01	1.277848e+00	1.279597e+00
+3.610000e+02	1.500000e+01	1.500000e+01	1.608923e+01	7.640553e-01	7.623738e-01
+3.920000e+02	1.600000e+01	1.600000e+01	9.882813e+00	4.750406e-01	4.709930e-01
+4.250000e+02	1.700000e+01	1.700000e+01	6.092794e+00	3.116959e-01	3.099124e-01
+4.600000e+02	1.800000e+01	1.800000e+01	3.843583e+00	2.127246e-01	2.116711e-01
+4.970000e+02	1.900000e+01	1.900000e+01	2.391187e+00	1.431945e-01	1.410775e-01
+5.360000e+02	2.000000e+01	2.000000e+01	1.504065e+00	9.666964e-02	9.371211e-02
+5.770000e+02	2.100000e+01	2.100000e+01	9.548214e-01	6.529385e-02	6.265335e-02
+6.200000e+02	2.200000e+01	2.200000e+01	6.020477e-01	4.343447e-02	4.188195e-02
+6.650000e+02	2.300000e+01	2.300000e+01	3.841283e-01	2.917123e-02	2.843080e-02
+7.120000e+02	2.400000e+01	2.400000e+01	2.430917e-01	1.944935e-02	1.897051e-02
+7.610000e+02	2.500000e+01	2.500000e+01	1.537542e-01	1.292358e-02	1.247912e-02
+8.120000e+02	2.600000e+01	2.600000e+01	9.760577e-02	8.572959e-03	8.189561e-03
+8.660000e+02	2.800000e+01	2.800000e+01	6.135339e-02	5.640101e-03	5.355871e-03
+9.230000e+02	2.900000e+01	2.900000e+01	3.818793e-02	3.676132e-03	3.476342e-03
+9.820000e+02	3.000000e+01	3.000000e+01	2.369583e-02	2.387488e-03	2.250728e-03
+1.044000e+03	3.200000e+01	3.200000e+01	1.503556e-02	1.570504e-03	1.480954e-03
+1.119000e+03	4.300000e+01	4.300000e+01	8.629628e-03	9.428528e-04	8.961623e-04
+1.236000e+03	7.400000e+01	7.400000e+01	3.700446e-03	4.350235e-04	4.207937e-04
+1.420000e+03	1.100000e+02	1.100000e+02	1.100564e-03	1.489421e-04	1.466700e-04
+2.015000e+03	4.850000e+02	4.850000e+02	6.925732e-05	1.356849e-05	1.320596e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_CONF_2016_092/d04-x01-y01
+Path=/REF/ATLAS_2016_CONF_2016_092/d04-x01-y01
+Title=Inclusive jet cross section as a function of jet $p_\text{T}$ ($1.5 < |y| < 2.0$)
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.080000e+02	8.000000e+00	8.000000e+00	8.188875e+03	6.218253e+02	6.052604e+02
+1.250000e+02	9.000000e+00	9.000000e+00	3.924783e+03	2.657285e+02	2.809984e+02
+1.430000e+02	9.000000e+00	9.000000e+00	1.962372e+03	1.303162e+02	1.357918e+02
+1.620000e+02	1.000000e+01	1.000000e+01	1.039260e+03	7.218609e+01	7.011589e+01
+1.830000e+02	1.100000e+01	1.100000e+01	5.469955e+02	3.490169e+01	3.596152e+01
+2.050000e+02	1.100000e+01	1.100000e+01	2.969145e+02	1.683197e+01	1.921185e+01
+2.280000e+02	1.200000e+01	1.200000e+01	1.681808e+02	8.756829e+00	1.028731e+01
+2.520000e+02	1.200000e+01	1.200000e+01	9.680792e+01	4.948346e+00	5.589334e+00
+2.770000e+02	1.300000e+01	1.300000e+01	5.485308e+01	2.872024e+00	3.069484e+00
+3.040000e+02	1.400000e+01	1.400000e+01	3.210400e+01	1.731646e+00	1.756878e+00
+3.320000e+02	1.400000e+01	1.400000e+01	1.881889e+01	1.026866e+00	1.012046e+00
+3.610000e+02	1.500000e+01	1.500000e+01	1.151947e+01	6.323966e-01	6.273519e-01
+3.920000e+02	1.600000e+01	1.600000e+01	6.927938e+00	3.934695e-01	3.949051e-01
+4.250000e+02	1.700000e+01	1.700000e+01	4.268324e+00	2.655205e-01	2.631363e-01
+4.600000e+02	1.800000e+01	1.800000e+01	2.548889e+00	1.769812e-01	1.711340e-01
+4.970000e+02	1.900000e+01	1.900000e+01	1.545400e+00	1.188287e-01	1.132286e-01
+5.360000e+02	2.000000e+01	2.000000e+01	9.369300e-01	7.798966e-02	7.431294e-02
+5.770000e+02	2.100000e+01	2.100000e+01	5.590452e-01	5.015002e-02	4.804738e-02
+6.200000e+02	2.200000e+01	2.200000e+01	3.418523e-01	3.325587e-02	3.190056e-02
+6.650000e+02	2.300000e+01	2.300000e+01	2.010383e-01	2.103274e-02	2.007335e-02
+7.120000e+02	2.400000e+01	2.400000e+01	1.180394e-01	1.306941e-02	1.239607e-02
+7.610000e+02	2.500000e+01	2.500000e+01	6.932460e-02	8.081174e-03	7.616898e-03
+8.120000e+02	2.600000e+01	2.600000e+01	4.086346e-02	5.057387e-03	4.712668e-03
+8.660000e+02	2.800000e+01	2.800000e+01	2.361696e-02	3.134310e-03	2.881192e-03
+9.230000e+02	2.900000e+01	2.900000e+01	1.271976e-02	1.800188e-03	1.644632e-03
+9.820000e+02	3.000000e+01	3.000000e+01	6.869100e-03	1.036774e-03	9.533535e-04
+1.044000e+03	3.200000e+01	3.200000e+01	3.854047e-03	6.164207e-04	5.726541e-04
+1.119000e+03	4.300000e+01	4.300000e+01	1.976128e-03	3.420050e-04	3.202542e-04
+1.236000e+03	7.400000e+01	7.400000e+01	6.326034e-04	1.245446e-04	1.159698e-04
+1.651000e+03	3.410000e+02	3.410000e+02	3.732243e-05	9.987565e-06	9.307173e-06
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_CONF_2016_092/d05-x01-y01
+Path=/REF/ATLAS_2016_CONF_2016_092/d05-x01-y01
+Title=Inclusive jet cross section as a function of jet $p_\text{T}$ ($2.0 < |y| < 2.5$)
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.080000e+02	8.000000e+00	8.000000e+00	6.635688e+03	5.833101e+02	5.741875e+02
+1.250000e+02	9.000000e+00	9.000000e+00	3.053150e+03	2.666816e+02	2.820499e+02
+1.430000e+02	9.000000e+00	9.000000e+00	1.466917e+03	1.366725e+02	1.315134e+02
+1.620000e+02	1.000000e+01	1.000000e+01	7.580600e+02	6.537903e+01	6.137366e+01
+1.830000e+02	1.100000e+01	1.100000e+01	3.894664e+02	2.903960e+01	2.964455e+01
+2.050000e+02	1.100000e+01	1.100000e+01	2.079414e+02	1.457224e+01	1.559506e+01
+2.280000e+02	1.200000e+01	1.200000e+01	1.135175e+02	7.891931e+00	8.341159e+00
+2.520000e+02	1.200000e+01	1.200000e+01	6.290750e+01	4.359225e+00	4.387878e+00
+2.770000e+02	1.300000e+01	1.300000e+01	3.616446e+01	2.506402e+00	2.410189e+00
+3.040000e+02	1.400000e+01	1.400000e+01	1.944046e+01	1.369829e+00	1.314551e+00
+3.320000e+02	1.400000e+01	1.400000e+01	1.082043e+01	7.646430e-01	7.501617e-01
+3.610000e+02	1.500000e+01	1.500000e+01	6.284733e+00	4.463940e-01	4.386266e-01
+3.920000e+02	1.600000e+01	1.600000e+01	3.506500e+00	2.616217e-01	2.527478e-01
+4.250000e+02	1.700000e+01	1.700000e+01	2.014071e+00	1.641270e-01	1.576016e-01
+4.600000e+02	1.800000e+01	1.800000e+01	1.117700e+00	9.719621e-02	9.359069e-02
+4.970000e+02	1.900000e+01	1.900000e+01	6.025342e-01	5.632512e-02	5.451131e-02
+5.360000e+02	2.000000e+01	2.000000e+01	3.236375e-01	3.286846e-02	3.159644e-02
+5.770000e+02	2.100000e+01	2.100000e+01	1.747290e-01	1.927466e-02	1.814339e-02
+6.200000e+02	2.200000e+01	2.200000e+01	8.888727e-02	1.046577e-02	9.753247e-03
+6.650000e+02	2.300000e+01	2.300000e+01	4.366065e-02	5.427978e-03	5.093878e-03
+7.120000e+02	2.400000e+01	2.400000e+01	2.182292e-02	2.908055e-03	2.729058e-03
+7.610000e+02	2.500000e+01	2.500000e+01	1.024358e-02	1.489012e-03	1.386787e-03
+8.120000e+02	2.600000e+01	2.600000e+01	4.900250e-03	7.849928e-04	7.358216e-04
+8.660000e+02	2.800000e+01	2.800000e+01	1.988429e-03	3.549005e-04	3.378554e-04
+9.230000e+02	2.900000e+01	2.900000e+01	7.788897e-04	1.597727e-04	1.537595e-04
+9.820000e+02	3.000000e+01	3.000000e+01	3.175483e-04	7.204503e-05	6.974633e-05
+1.087000e+03	7.500000e+01	7.500000e+01	7.814000e-05	2.050351e-05	2.098451e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_CONF_2016_092/d06-x01-y01
+Path=/REF/ATLAS_2016_CONF_2016_092/d06-x01-y01
+Title=Inclusive jet cross section as a function of jet $p_\text{T}$ ($2.5 < |y| < 3.0$)
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.080000e+02	8.000000e+00	8.000000e+00	4.893837e+03	4.604491e+02	4.744132e+02
+1.250000e+02	9.000000e+00	9.000000e+00	2.189761e+03	2.045504e+02	2.089379e+02
+1.430000e+02	9.000000e+00	9.000000e+00	1.016544e+03	9.608102e+01	9.255201e+01
+1.620000e+02	1.000000e+01	1.000000e+01	4.978610e+02	4.876671e+01	4.441989e+01
+1.830000e+02	1.100000e+01	1.100000e+01	2.461077e+02	2.454255e+01	2.332874e+01
+2.050000e+02	1.100000e+01	1.100000e+01	1.201677e+02	1.202407e+01	1.216752e+01
+2.280000e+02	1.200000e+01	1.200000e+01	5.950375e+01	5.867772e+00	6.131243e+00
+2.520000e+02	1.200000e+01	1.200000e+01	2.977454e+01	2.931087e+00	3.078940e+00
+2.770000e+02	1.300000e+01	1.300000e+01	1.484427e+01	1.519942e+00	1.557890e+00
+3.040000e+02	1.400000e+01	1.400000e+01	7.270143e+00	7.830558e-01	7.698647e-01
+3.320000e+02	1.400000e+01	1.400000e+01	3.491975e+00	3.897128e-01	3.739682e-01
+3.610000e+02	1.500000e+01	1.500000e+01	1.694243e+00	1.968606e-01	1.905375e-01
+3.920000e+02	1.600000e+01	1.600000e+01	8.197500e-01	1.008361e-01	9.940984e-02
+4.250000e+02	1.700000e+01	1.700000e+01	3.753559e-01	4.908622e-02	4.812134e-02
+4.600000e+02	1.800000e+01	1.800000e+01	1.570714e-01	2.186903e-02	2.053652e-02
+4.970000e+02	1.900000e+01	1.900000e+01	6.480000e-02	1.058099e-02	9.417253e-03
+5.360000e+02	2.000000e+01	2.000000e+01	2.471655e-02	5.067188e-03	4.380637e-03
+5.770000e+02	2.100000e+01	2.100000e+01	7.996476e-03	2.000748e-03	1.709910e-03
+6.200000e+02	2.200000e+01	2.200000e+01	2.584682e-03	7.419535e-04	6.224554e-04
+6.650000e+02	2.300000e+01	2.300000e+01	7.690457e-04	2.504520e-04	2.017349e-04
+7.120000e+02	2.400000e+01	2.400000e+01	2.552438e-04	1.053817e-04	8.214621e-05
+8.150000e+02	7.900000e+01	7.900000e+01	2.516646e-05	1.479013e-05	1.133624e-05
+END YODA_SCATTER2D
+
diff --git a/src/Analyses/ATLAS_2016_CONF_2016_094.cc b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_094.cc
rename from src/Analyses/ATLAS_2016_CONF_2016_094.cc
rename to analyses/pluginATLAS/ATLAS_2016_CONF_2016_094.cc
diff --git a/data/anainfo/ATLAS_2016_CONF_2016_094.info b/analyses/pluginATLAS/ATLAS_2016_CONF_2016_094.info
rename from data/anainfo/ATLAS_2016_CONF_2016_094.info
rename to analyses/pluginATLAS/ATLAS_2016_CONF_2016_094.info
diff --git a/src/Analyses/ATLAS_2016_I1419070.cc b/analyses/pluginATLAS/ATLAS_2016_I1419070.cc
rename from src/Analyses/ATLAS_2016_I1419070.cc
rename to analyses/pluginATLAS/ATLAS_2016_I1419070.cc
diff --git a/data/anainfo/ATLAS_2016_I1419070.info b/analyses/pluginATLAS/ATLAS_2016_I1419070.info
rename from data/anainfo/ATLAS_2016_I1419070.info
rename to analyses/pluginATLAS/ATLAS_2016_I1419070.info
diff --git a/data/plotinfo/ATLAS_2016_I1419070.plot b/analyses/pluginATLAS/ATLAS_2016_I1419070.plot
rename from data/plotinfo/ATLAS_2016_I1419070.plot
rename to analyses/pluginATLAS/ATLAS_2016_I1419070.plot
diff --git a/data/refdata/ATLAS_2016_I1419070.yoda b/analyses/pluginATLAS/ATLAS_2016_I1419070.yoda
rename from data/refdata/ATLAS_2016_I1419070.yoda
rename to analyses/pluginATLAS/ATLAS_2016_I1419070.yoda
diff --git a/src/Analyses/ATLAS_2016_I1419652.cc b/analyses/pluginATLAS/ATLAS_2016_I1419652.cc
rename from src/Analyses/ATLAS_2016_I1419652.cc
rename to analyses/pluginATLAS/ATLAS_2016_I1419652.cc
diff --git a/data/anainfo/ATLAS_2016_I1419652.info b/analyses/pluginATLAS/ATLAS_2016_I1419652.info
rename from data/anainfo/ATLAS_2016_I1419652.info
rename to analyses/pluginATLAS/ATLAS_2016_I1419652.info
diff --git a/data/plotinfo/ATLAS_2016_I1419652.plot b/analyses/pluginATLAS/ATLAS_2016_I1419652.plot
rename from data/plotinfo/ATLAS_2016_I1419652.plot
rename to analyses/pluginATLAS/ATLAS_2016_I1419652.plot
diff --git a/data/refdata/ATLAS_2016_I1419652.yoda b/analyses/pluginATLAS/ATLAS_2016_I1419652.yoda
rename from data/refdata/ATLAS_2016_I1419652.yoda
rename to analyses/pluginATLAS/ATLAS_2016_I1419652.yoda
diff --git a/src/Analyses/ATLAS_2016_I1424838.cc b/analyses/pluginATLAS/ATLAS_2016_I1424838.cc
rename from src/Analyses/ATLAS_2016_I1424838.cc
rename to analyses/pluginATLAS/ATLAS_2016_I1424838.cc
diff --git a/data/anainfo/ATLAS_2016_I1424838.info b/analyses/pluginATLAS/ATLAS_2016_I1424838.info
rename from data/anainfo/ATLAS_2016_I1424838.info
rename to analyses/pluginATLAS/ATLAS_2016_I1424838.info
diff --git a/data/plotinfo/ATLAS_2016_I1424838.plot b/analyses/pluginATLAS/ATLAS_2016_I1424838.plot
rename from data/plotinfo/ATLAS_2016_I1424838.plot
rename to analyses/pluginATLAS/ATLAS_2016_I1424838.plot
diff --git a/data/refdata/ATLAS_2016_I1424838.yoda b/analyses/pluginATLAS/ATLAS_2016_I1424838.yoda
rename from data/refdata/ATLAS_2016_I1424838.yoda
rename to analyses/pluginATLAS/ATLAS_2016_I1424838.yoda
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1426515.cc b/analyses/pluginATLAS/ATLAS_2016_I1426515.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1426515.cc
@@ -0,0 +1,269 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/IdentifiedFinalState.hh"
+#include "Rivet/Projections/PromptFinalState.hh"
+#include "Rivet/Projections/DressedLeptons.hh"
+#include "Rivet/Projections/VetoedFinalState.hh"
+#include "Rivet/Projections/VisibleFinalState.hh"
+
+namespace Rivet {
+
+
+  /// WW production at 8 TeV
+  class ATLAS_2016_I1426515 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(ATLAS_2016_I1426515);
+
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      const FinalState fs(Cuts::abseta < 4.5);
+
+      // Project photons for dressing
+      IdentifiedFinalState photon_id(fs);
+      photon_id.acceptIdPair(PID::PHOTON);
+
+      // Project dressed electrons with pT > 15 GeV and |eta| < 2.47
+      PromptFinalState el_bare(FinalState(Cuts::abspid == PID::ELECTRON));
+      Cut cuts = (Cuts::abseta < 2.47) && ( (Cuts::abseta <= 1.37) || (Cuts::abseta >= 1.52) ) && (Cuts::pT > 10*GeV);
+      DressedLeptons el_dressed_FS(photon_id, el_bare, 0.1, cuts, true, true);
+      declare(el_dressed_FS, "EL_DRESSED_FS");
+
+      // Project dressed muons with pT > 15 GeV and |eta| < 2.5
+      PromptFinalState mu_bare(FinalState(Cuts::abspid == PID::MUON));
+      DressedLeptons mu_dressed_FS(photon_id, mu_bare, 0.1, Cuts::abseta < 2.4 && Cuts::pT > 15*GeV, true, true);
+      declare(mu_dressed_FS, "MU_DRESSED_FS");
+
+      Cut cuts_WW = (Cuts::abseta < 2.5) && (Cuts::pT > 20*GeV);
+      IdentifiedFinalState lep_id(fs);
+      lep_id.acceptIdPair(PID::MUON);
+      lep_id.acceptIdPair(PID::ELECTRON);
+      PromptFinalState lep_bare(lep_id);
+      DressedLeptons leptons(photon_id, lep_bare, 0.1, cuts_WW, true, true);
+      declare(leptons,"leptons");
+
+      declare(FinalState(Cuts::abspid == PID::TAU || Cuts::abspid == PID::NU_TAU), "tau_id");
+
+      // Get MET from generic invisibles
+      VetoedFinalState ivfs(fs);
+      ivfs.addVetoOnThisFinalState(VisibleFinalState(fs));
+      addProjection(ivfs, "InvisibleFS");
+
+      // Project jets
+      FastJets jets(fs, FastJets::ANTIKT, 0.4, JetAlg::NO_MUONS, JetAlg::NO_INVISIBLES);
+      addProjection(jets, "jets");
+
+
+      // Integrated cross sections
+      // d01 ee/mm fiducial integrated cross sections
+      _hist_mm_fid_intxsec = bookHisto1D(1, 1, 1);
+      _hist_ee_fid_intxsec = bookHisto1D(1, 1, 2);
+
+      // d02 emme fiducial integrated cross sections
+      _hist_emme_fid_intxsec = bookHisto1D(2, 1, 1);
+
+      // d10  emme fiducial differential cross section (leading lepton ptlead + ptlead normalized)
+      _hist_emme_fid_ptlead = bookHisto1D(10, 1, 1);
+      _hist_emme_fid_ptleadnorm = bookHisto1D(10, 1, 2);
+
+      // d11  emme fiducial differential cross section (dilepton-system ptll + ptll normalized)
+      _hist_emme_fid_ptll = bookHisto1D(11, 1, 1);
+      _hist_emme_fid_ptllnorm = bookHisto1D(11, 1, 2);
+
+      // d12  emme fiducial differential cross section (dilepton-system mll + mll normalized)
+      _hist_emme_fid_mll = bookHisto1D(12, 1, 1);
+      _hist_emme_fid_mllnorm = bookHisto1D(12, 1, 2);
+
+      // d13  emme fiducial differential cross section (dilepton-system delta_phi_ll + dphill normalized)
+      _hist_emme_fid_dphill = bookHisto1D(13, 1, 1);
+      _hist_emme_fid_dphillnorm = bookHisto1D(13, 1, 2);
+
+      // d14  emme fiducial differential cross section (absolute rapidity of dilepton-system y_ll + y_ll normalized)
+      _hist_emme_fid_yll = bookHisto1D(14, 1, 1);
+      _hist_emme_fid_yllnorm = bookHisto1D(14, 1, 2);
+
+      // d15  emme fiducial differential cross section (absolute costheta* of dilepton-system costhetastar_ll + costhetastar_ll normalized)
+      _hist_emme_fid_costhetastarll = bookHisto1D(15, 1, 1);
+      _hist_emme_fid_costhetastarllnorm = bookHisto1D(15, 1, 2);
+
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      // Find leptons
+      const FinalState& ifs = apply<VetoedFinalState>(event, "InvisibleFS");
+      const vector<DressedLepton>& leptons = apply<DressedLeptons>(event, "leptons").dressedLeptons();
+      const vector<DressedLepton>& good_mu = apply<DressedLeptons>(event, "MU_DRESSED_FS").dressedLeptons();
+      const vector<DressedLepton>& good_el = apply<DressedLeptons>(event, "EL_DRESSED_FS").dressedLeptons();
+      const Jets& jets = applyProjection<FastJets>(event, "jets").jetsByPt(Cuts::pT > 25*GeV && Cuts::abseta < 4.5);
+
+      // Taus are excluded from the fiducial cross section
+      const Particles taus = applyProjection<FinalState>(event, "tau_id").particlesByPt(Cuts::pT>12.*GeV && Cuts::abseta < 3.0);
+      if (!taus.empty()) vetoEvent;
+
+      // Remove events that do not contain 2 good leptons (either muons or electrons)
+      if (leptons.size() != 2 && (good_el.size() != 1 || good_mu.size() != 1)) vetoEvent;
+
+      // Split into channels
+      int channel = -1; // 1=mm, 2=ee;  3=emu; 4=mue
+      if (good_mu.size() == 2)  channel = 1; //mm
+      else if (good_el.size() == 2)  channel = 2; //ee
+      else if (good_mu.size() == 1 && good_el.size() == 1 && good_el[0].pT() > good_mu[0].pT())  channel = 3; //emu
+      else if (good_mu.size() == 1 && good_el.size() == 1 && good_el[0].pT() < good_mu[0].pT())  channel = 4; //mue
+      if (channel == -1) vetoEvent;
+
+      // Assign leptons
+      const DressedLepton *lep1, *lep2;
+      if (channel == 1) { //mm
+        if (good_mu[0].pT() > good_mu[1].pT()) {
+          lep1 = &good_mu[0];
+          lep2 = &good_mu[1];
+        } else {
+          lep1 = &good_mu[1];
+          lep2 = &good_mu[0];
+        }
+      }
+      else if (channel == 2) { //ee
+        if (good_el[0].pT() > good_el[1].pT()) {
+          lep1 = &good_el[0];
+          lep2 = &good_el[1];
+        } else {
+          lep1 = &good_el[1];
+          lep2 = &good_el[0];
+        }
+      }
+      else if (channel == 3) { //emu
+        lep1 = &good_el[0];
+        lep2 = &good_mu[0];
+      }
+      else { // if (channel == 4) { //mue
+        lep1 = &good_mu[0];
+        lep2 = &good_el[0];
+      }
+
+      // Cut on leptons
+      if (lep1->pT() < 25*GeV || lep2->pT() < 20*GeV)  vetoEvent;
+
+      // Select jets isolated from electrons
+      const Jets jets_selected = filter_select(jets, [&](const Jet& j){ return all(good_el, deltaRGtr(j, 0.3)); });
+
+      // Define variables
+      const FourMomentum met = sum(ifs.particles(), FourMomentum());
+      const FourMomentum dilep = lep1->momentum() + lep2->momentum();
+      const double ptll = dilep.pT()/GeV;
+      const double Mll = dilep.mass()/GeV;
+      const double Yll = dilep.absrap();
+      const double DPhill = fabs(deltaPhi(*lep1, *lep2));
+      const double costhetastar = fabs(tanh((lep1->eta() - lep2->eta()) / 2));
+
+      // Calculate dphi to MET
+      double DPhi_met = fabs(deltaPhi((*lep1), met));
+      if (fabs(deltaPhi( (*lep2), met)) < DPhi_met)  DPhi_met = fabs(deltaPhi((*lep2), met));
+      if (DPhi_met > M_PI/2) DPhi_met = 1.; else DPhi_met = fabs(sin(DPhi_met));
+
+      // Apply selections
+      // mll lower cut (reject quarkonia)
+      if ((channel == 1 || channel == 2) && Mll < 15.)  vetoEvent;
+      else if (Mll < 10.)  vetoEvent;
+
+      // Z veto (reject Z -- only dilepton channels)
+      if ((channel == 1 || channel == 2) && abs(Mll - 91.1876) < 15.)  vetoEvent;
+
+      // Met rel cut
+      if ((channel == 1 || channel == 2) && met.pT()*DPhi_met < 45*GeV)  vetoEvent;
+      else if (met.pT()*DPhi_met < 15*GeV)  vetoEvent;
+
+      // MET (pt-MET) cut
+      if ((channel == 1 || channel == 2) && met.pT() <= 45*GeV)  vetoEvent; // begin MET cut
+      else if (met.pT() <= 20*GeV)  vetoEvent;
+
+      // Require 0 jets
+      if (!jets_selected.empty()) vetoEvent;
+
+      // Fill histograms
+      const double weight = event.weight();
+      if (channel == 1) {
+        _hist_mm_fid_intxsec->fill(1.0, weight);
+
+      } else if (channel == 2) {
+        _hist_ee_fid_intxsec->fill(1.0, weight);
+
+      } else if (channel == 3 || channel == 4) {
+        _hist_emme_fid_intxsec->fill(1.0, weight);
+
+        _hist_emme_fid_ptlead->fill(lep1->pT()/GeV, weight);
+        _hist_emme_fid_ptleadnorm->fill(lep1->pT()/GeV, weight);
+
+        _hist_emme_fid_ptll->fill(ptll, weight);
+        _hist_emme_fid_ptllnorm->fill(ptll, weight);
+
+        _hist_emme_fid_mll->fill(Mll, weight);
+        _hist_emme_fid_mllnorm->fill(Mll, weight);
+
+        _hist_emme_fid_dphill->fill(DPhill, weight);
+        _hist_emme_fid_dphillnorm->fill(DPhill, weight);
+
+        _hist_emme_fid_yll->fill(Yll, weight);
+        _hist_emme_fid_yllnorm->fill(Yll, weight);
+
+        _hist_emme_fid_costhetastarll->fill(costhetastar, weight);
+        _hist_emme_fid_costhetastarllnorm->fill(costhetastar, weight);
+      }
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+      const double sf(crossSection()/femtobarn/sumOfWeights());
+      scale({_hist_mm_fid_intxsec, _hist_ee_fid_intxsec, _hist_emme_fid_intxsec}, sf);
+      scale({_hist_emme_fid_ptlead, _hist_emme_fid_ptll, _hist_emme_fid_mll,
+            _hist_emme_fid_dphill, _hist_emme_fid_yll, _hist_emme_fid_costhetastarll}, sf);
+      normalize({_hist_emme_fid_ptleadnorm, _hist_emme_fid_ptllnorm, _hist_emme_fid_mllnorm,
+            _hist_emme_fid_dphillnorm, _hist_emme_fid_yllnorm, _hist_emme_fid_costhetastarllnorm});
+    }
+
+
+  private:
+
+    /// @name Histograms
+    //@{
+
+    // d01 ee/mm fiducial integrated cross sections
+    Histo1DPtr _hist_mm_fid_intxsec, _hist_ee_fid_intxsec;
+
+    // d02 emme fiducial integrated cross sections
+    Histo1DPtr _hist_emme_fid_intxsec;
+
+    // d10  emme fiducial differential cross section (leading lepton ptlead + ptlead normalized)
+    Histo1DPtr _hist_emme_fid_ptlead, _hist_emme_fid_ptleadnorm;
+
+    // d11  emme fiducial differential cross section (dilepton-system ptll + ptll normalized)
+    Histo1DPtr _hist_emme_fid_ptll, _hist_emme_fid_ptllnorm;
+
+    // d12  emme fiducial differential cross section (dilepton-system mll + mll normalized)
+    Histo1DPtr _hist_emme_fid_mll, _hist_emme_fid_mllnorm;
+
+    // d13  emme fiducial differential cross section (dilepton-system delta_phi_ll + dphill normalized)
+    Histo1DPtr _hist_emme_fid_dphill, _hist_emme_fid_dphillnorm;
+
+    // d14  emme fiducial differential cross section (absolute rapidity of dilepton-system y_ll + y_ll normalized)
+    Histo1DPtr _hist_emme_fid_yll, _hist_emme_fid_yllnorm;
+
+    // d15  emme fiducial differential cross section (absolute costheta* of dilepton-system costhetastar_ll + costhetastar_ll normalized)
+    Histo1DPtr _hist_emme_fid_costhetastarll, _hist_emme_fid_costhetastarllnorm;
+    //@}
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(ATLAS_2016_I1426515);
+
+}
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1426515.info b/analyses/pluginATLAS/ATLAS_2016_I1426515.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1426515.info
@@ -0,0 +1,55 @@
+Name: ATLAS_2016_I1426515
+Year: 2016
+Summary: WW production at 8 TeV
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1426515
+Status: VALIDATED
+Authors:
+ - Kristin Lohwasser <kristin.lohwasser@cern.ch>
+ - Christian Gutschow <chris.g@cern.ch>
+References:
+ - JHEP 1609 (2016) 029
+ - doi:10.1007/JHEP09(2016)029
+ - arXiv:1603.01702 [hep-ex]
+Keywords:
+ - diboson
+ - multiboson
+ - leptons
+ - W
+RunInfo:
+  pp -> WW production at 8 TeV
+Luminosity_fb: 20.3
+Beams: [p+, p+]
+Energies: [8000]
+PtCuts: [25,20] 
+Description:
+  'The production of $W$ boson pairs in proton-proton collisions at $\sqrt{s} = 8$ TeV is studied using data corresponding to 
+  20.3 fb${}^{-1}$ of integrated luminosity collected by the ATLAS detector during 2012 at the CERN Large Hadron Collider. The 
+  $W$ bosons are reconstructed using their leptonic decays into electrons or muons and neutrinos. Events with reconstructed jets 
+  are not included in the candidate event sample. A total of 6636 $WW$ candidate events are observed. Measurements are performed 
+  in fiducial regions closely approximating the detector acceptance. The integrated measurement is corrected for all acceptance 
+  effects and for the $W$ branching fractions to leptons in order to obtain the total $WW$ production cross section, which is found 
+  to be $71.1 \pm 1.1$ (stat) ${}^{+5.7}_{-5.0}$ (syst) $\pm 1.4$ (lumi) pb. This agrees with the next-to-next-to-leading-order 
+  Standard Model prediction of $63.2 {}^{+1.6}_{-1.4}$ (scale) $\pm 1.2$ (PDF) pb. Fiducial differential cross sections are 
+  measured as a function of each of six kinematic variables. The distribution of the transverse momentum of the leading lepton 
+  is used to set limits on anomalous triple-gauge-boson couplings.'
+BibKey: Aad:2016wpd
+BibTeX: '@article{Aad:2016wpd,
+      author         = "Aad, Georges and others",
+      title          = "{Measurement of total and differential $W^+W^-$
+                        production cross sections in proton-proton collisions at
+                        $\sqrt{s}=$ 8 TeV with the ATLAS detector and limits on
+                        anomalous triple-gauge-boson couplings}",
+      collaboration  = "ATLAS",
+      journal        = "JHEP",
+      volume         = "09",
+      year           = "2016",
+      pages          = "029",
+      doi            = "10.1007/JHEP09(2016)029",
+      eprint         = "1603.01702",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-PH-EP-2015-323",
+      SLACcitation   = "%%CITATION = ARXIV:1603.01702;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1426515.plot b/analyses/pluginATLAS/ATLAS_2016_I1426515.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1426515.plot
@@ -0,0 +1,117 @@
+# BEGIN PLOT /ATLAS_2016_I1426515/*
+XTwosidedTicks=1
+YTwosidedTicks=1
+LegendAlign=r
+LegendXPos=0.95
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1426515/d01-x01-y01
+Title=Fiducial $WW$ cross section in the $\mu\mu$ final state
+XLabel=
+XCustomMajorTicks=1.0 $WW\rightarrow\mu\mu$
+YLabel=Fiducial cross section [fb]
+LogY=0
+LegendYPos=0.3
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1426515/d01-x01-y02
+Title=Fiducial $WW$ cross section in the $ee$ final state
+XLabel=
+XCustomMajorTicks=1.0 $WW\rightarrow{ee}$
+YLabel=Fiducial cross section [fb]
+LogY=0
+LegendYPos=0.3
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1426515/d02-x01-y01
+Title=Fiducial $WW$ cross section in the $e\mu$ final state
+XLabel=
+XCustomMajorTicks=1.0 $WW\rightarrow{e\mu}$
+YLabel=Fiducial cross section [fb]
+LogY=0
+LegendYPos=0.3
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1426515/d10-x01-y01
+Title=$WW \rightarrow e\mu$
+XLabel=leading $p_\text{T}^\ell$ [GeV]
+YLabel=$\text{d}\sigma/\text{d} p_\text{T}^\ell$ [fb/GeV]
+LogY=1
+LeftMargin=1.5
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1426515/d10-x01-y02
+Title=$WW \rightarrow e\mu$
+XLabel=leading $p_\text{T}^\ell$ [GeV]
+YLabel=$1 / \sigma \; \text{d}\sigma/\text{d} p_\text{T}^\ell$ [1/GeV]
+LeftMargin=1.5
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1426515/d11-x01-y01
+Title=$WW \rightarrow e\mu$
+XLabel=$p_\text{T}^{\ell\ell}$ [GeV]
+YLabel=$\text{d}\sigma / \text{d}p_\text{T}^{\ell\ell}$ [fb/GeV]
+LeftMargin=1.5
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1426515/d11-x01-y02
+Title=$WW \rightarrow e\mu$
+XLabel=$p_\text{T}^{\ell\ell}$ [GeV]
+YLabel=$1 / \sigma \; \text{d}\sigma / \text{d}p_\text{T}^{\ell\ell}$ [1/GeV]
+LeftMargin=1.5
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1426515/d12-x01-y01
+Title=$WW \rightarrow e\mu$
+XLabel=$m_\text{T}^{\ell\ell}$ [GeV]
+YLabel=$\text{d}\sigma / \text{d}m_\text{T}^{\ell\ell}$ [fb/GeV]
+LeftMargin=1.5
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1426515/d12-x01-y02
+Title=$WW \rightarrow e\mu$
+XLabel=$m_\text{T}^{\ell\ell}$ [GeV]
+YLabel=$1 / \sigma \; \text{d}\sigma / \text{d}m_\text{T}^{\ell\ell}$ [1/GeV]
+LeftMargin=1.5
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1426515/d13-x01-y01
+Title=$WW \rightarrow e\mu$
+XLabel=$\Delta \phi_{\ell\ell}$
+YLabel=$\text{d}\sigma / \text{d} \Delta \phi_{\ell\ell}$ [fb]
+LegendXPos=0.05
+LegendAlign=l
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1426515/d13-x01-y02
+Title=$WW \rightarrow e\mu$
+XLabel=$\Delta \phi_{\ell\ell}$
+YLabel=$1 / \sigma \; \text{d}\sigma / \text{d} \Delta \phi_{\ell\ell}$
+LegendXPos=0.05
+LegendAlign=l
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1426515/d14-x01-y01
+Title=$WW \rightarrow e\mu$
+XLabel=$\left|y_{\ell\ell}\right|$
+YLabel=$\text{d}\sigma / \text{d} \left|y_{\ell\ell}\right|$ [fb]
+LogY=0
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1426515/d14-x01-y02
+Title=$WW \rightarrow e\mu$
+XLabel=$\left|y_{\ell\ell}\right|$
+YLabel=$1 / \sigma \; \text{d}\sigma / \text{d} \left|y_{\ell\ell}\right|$
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1426515/d15-x01-y01
+Title=$WW \rightarrow e\mu$
+XLabel=$\cos(\theta^\ast)$
+YLabel=$\text{d}\sigma / \text{d}\cos(\theta^\ast)$ [fb]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1426515/d15-x01-y02
+Title=$WW \rightarrow e\mu$
+XLabel=$\cos(\theta^\ast)$
+YLabel=$1 / \sigma \; \text{d}\sigma / \text{d}\cos(\theta^\ast)$
+# END PLOT
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1426515.yoda b/analyses/pluginATLAS/ATLAS_2016_I1426515.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1426515.yoda
@@ -0,0 +1,262 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d01-x01-y01
+Path=/REF/ATLAS_2016_I1426515/d01-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+00	5.000000e-01	5.000000e-01	8.020000e+01	6.561250e+00	7.376313e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d01-x01-y02
+Path=/REF/ATLAS_2016_I1426515/d01-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+00	5.000000e-01	5.000000e-01	7.340000e+01	7.100704e+00	7.882893e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d02-x01-y01
+Path=/REF/ATLAS_2016_I1426515/d02-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+00	5.000000e-01	5.000000e-01	3.740000e+02	2.503997e+01	2.716616e+01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d03-x01-y01
+Path=/REF/ATLAS_2016_I1426515/d03-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+00	5.000000e-01	5.000000e-01	7.060000e+01	5.446100e+00	6.106554e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d03-x01-y02
+Path=/REF/ATLAS_2016_I1426515/d03-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+00	5.000000e-01	5.000000e-01	7.360000e+01	7.747258e+00	8.725824e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d03-x01-y03
+Path=/REF/ATLAS_2016_I1426515/d03-x01-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+00	5.000000e-01	5.000000e-01	7.400000e+01	6.786752e+00	7.852388e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d03-x01-y04
+Path=/REF/ATLAS_2016_I1426515/d03-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+00	5.000000e-01	5.000000e-01	7.110000e+01	5.307542e+00	5.971599e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d10-x01-y01
+Path=/REF/ATLAS_2016_I1426515/d10-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.750000e+01	2.500000e+00	2.500000e+00	3.489980e+00	7.928935e-01	7.928935e-01
+3.250000e+01	2.500000e+00	2.500000e+00	7.048410e+00	1.146735e+00	1.146735e+00
+3.750000e+01	2.500000e+00	2.500000e+00	1.067680e+01	1.282080e+00	1.282080e+00
+4.500000e+01	5.000000e+00	5.000000e+00	9.302880e+00	8.770608e-01	8.770608e-01
+5.500000e+01	5.000000e+00	5.000000e+00	6.646040e+00	5.068820e-01	5.068820e-01
+6.500000e+01	5.000000e+00	5.000000e+00	3.969290e+00	4.995723e-01	4.995723e-01
+7.500000e+01	5.000000e+00	5.000000e+00	2.348900e+00	3.748215e-01	3.748215e-01
+9.000000e+01	1.000000e+01	1.000000e+01	1.204080e+00	1.783553e-01	1.783553e-01
+1.250000e+02	2.500000e+01	2.500000e+01	3.631400e-01	4.887979e-02	4.887979e-02
+3.250000e+02	1.750000e+02	1.750000e+02	8.674000e-03	2.621660e-03	2.621660e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d10-x01-y02
+Path=/REF/ATLAS_2016_I1426515/d10-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.750000e+01	2.500000e+00	2.500000e+00	9.330900e-03	2.361846e-03	2.361846e-03
+3.250000e+01	2.500000e+00	2.500000e+00	1.884490e-02	3.514648e-03	3.514648e-03
+3.750000e+01	2.500000e+00	2.500000e+00	2.854610e-02	2.376514e-03	2.376514e-03
+4.500000e+01	5.000000e+00	5.000000e+00	2.487250e-02	1.246310e-03	1.246310e-03
+5.500000e+01	5.000000e+00	5.000000e+00	1.776910e-02	9.058235e-04	9.058235e-04
+6.500000e+01	5.000000e+00	5.000000e+00	1.061250e-02	8.966092e-04	8.966092e-04
+7.500000e+01	5.000000e+00	5.000000e+00	6.280100e-03	8.207210e-04	8.207210e-04
+9.000000e+01	1.000000e+01	1.000000e+01	3.219300e-03	3.429964e-04	3.429964e-04
+1.250000e+02	2.500000e+01	2.500000e+01	9.709000e-04	1.065256e-04	1.065256e-04
+3.250000e+02	1.750000e+02	1.750000e+02	2.320000e-05	6.402431e-06	6.402431e-06
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d11-x01-y01
+Path=/REF/ATLAS_2016_I1426515/d11-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+01	1.250000e+01	1.250000e+01	1.693890e+00	4.891166e-01	4.891166e-01
+2.750000e+01	2.500000e+00	2.500000e+00	5.603920e+00	7.563591e-01	7.563591e-01
+3.250000e+01	2.500000e+00	2.500000e+00	6.107280e+00	8.701375e-01	8.701375e-01
+3.750000e+01	2.500000e+00	2.500000e+00	6.588060e+00	8.928473e-01	8.928473e-01
+4.500000e+01	5.000000e+00	5.000000e+00	6.808730e+00	6.814215e-01	6.814215e-01
+5.500000e+01	5.000000e+00	5.000000e+00	6.842330e+00	7.377597e-01	7.377597e-01
+6.500000e+01	5.000000e+00	5.000000e+00	4.840520e+00	4.555413e-01	4.555413e-01
+7.500000e+01	5.000000e+00	5.000000e+00	3.004340e+00	3.021775e-01	3.021775e-01
+2.900000e+02	2.100000e+02	2.100000e+02	6.005000e-02	7.850046e-03	7.850046e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d11-x01-y02
+Path=/REF/ATLAS_2016_I1426515/d11-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+01	1.250000e+01	1.250000e+01	4.528900e-03	1.383771e-03	1.383771e-03
+2.750000e+01	2.500000e+00	2.500000e+00	1.498280e-02	1.747772e-03	1.747772e-03
+3.250000e+01	2.500000e+00	2.500000e+00	1.632870e-02	1.975137e-03	1.975137e-03
+3.750000e+01	2.500000e+00	2.500000e+00	1.761400e-02	1.921027e-03	1.921027e-03
+4.500000e+01	5.000000e+00	5.000000e+00	1.820410e-02	1.200626e-03	1.200626e-03
+5.500000e+01	5.000000e+00	5.000000e+00	1.829390e-02	1.376318e-03	1.376318e-03
+6.500000e+01	5.000000e+00	5.000000e+00	1.294180e-02	8.386212e-04	8.386212e-04
+7.500000e+01	5.000000e+00	5.000000e+00	8.032500e-03	6.041829e-04	6.041829e-04
+2.900000e+02	2.100000e+02	2.100000e+02	1.605000e-04	1.547302e-05	1.547302e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d12-x01-y01
+Path=/REF/ATLAS_2016_I1426515/d12-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+01	5.000000e+00	5.000000e+00	1.193470e+00	1.456566e-01	1.456566e-01
+2.500000e+01	5.000000e+00	5.000000e+00	1.400420e+00	1.649514e-01	1.649514e-01
+3.500000e+01	5.000000e+00	5.000000e+00	1.843260e+00	2.191572e-01	2.191572e-01
+4.500000e+01	5.000000e+00	5.000000e+00	2.624350e+00	5.678312e-01	5.678312e-01
+5.500000e+01	5.000000e+00	5.000000e+00	3.496170e+00	4.271980e-01	4.271980e-01
+6.500000e+01	5.000000e+00	5.000000e+00	3.324390e+00	4.098523e-01	4.098523e-01
+7.750000e+01	7.500000e+00	7.500000e+00	3.452150e+00	3.252273e-01	3.252273e-01
+9.250000e+01	7.500000e+00	7.500000e+00	2.920480e+00	2.565729e-01	2.565729e-01
+1.075000e+02	7.500000e+00	7.500000e+00	1.857330e+00	2.418270e-01	2.418270e-01
+1.250000e+02	1.000000e+01	1.000000e+01	1.626190e+00	2.217631e-01	2.217631e-01
+1.450000e+02	1.000000e+01	1.000000e+01	1.223310e+00	1.393391e-01	1.393391e-01
+1.650000e+02	1.000000e+01	1.000000e+01	7.610270e-01	1.789077e-01	1.789077e-01
+1.925000e+02	1.750000e+01	1.750000e+01	4.979450e-01	1.028705e-01	1.028705e-01
+4.300000e+02	2.200000e+02	2.200000e+02	5.007000e-02	8.049167e-03	8.049167e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d12-x01-y02
+Path=/REF/ATLAS_2016_I1426515/d12-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+01	5.000000e+00	5.000000e+00	3.190900e-03	3.322683e-04	3.322683e-04
+2.500000e+01	5.000000e+00	5.000000e+00	3.744200e-03	4.232702e-04	4.232702e-04
+3.500000e+01	5.000000e+00	5.000000e+00	4.928200e-03	4.421054e-04	4.421054e-04
+4.500000e+01	5.000000e+00	5.000000e+00	7.016500e-03	1.245161e-03	1.245161e-03
+5.500000e+01	5.000000e+00	5.000000e+00	9.347500e-03	7.575976e-04	7.575976e-04
+6.500000e+01	5.000000e+00	5.000000e+00	8.888200e-03	7.511803e-04	7.511803e-04
+7.750000e+01	7.500000e+00	7.500000e+00	9.229800e-03	5.052516e-04	5.052516e-04
+9.250000e+01	7.500000e+00	7.500000e+00	7.808300e-03	4.475462e-04	4.475462e-04
+1.075000e+02	7.500000e+00	7.500000e+00	4.965800e-03	5.337999e-04	5.337999e-04
+1.250000e+02	1.000000e+01	1.000000e+01	4.347800e-03	4.307977e-04	4.307977e-04
+1.450000e+02	1.000000e+01	1.000000e+01	3.270700e-03	2.987244e-04	2.987244e-04
+1.650000e+02	1.000000e+01	1.000000e+01	2.034700e-03	4.610779e-04	4.610779e-04
+1.925000e+02	1.750000e+01	1.750000e+01	1.331300e-03	3.179408e-04	3.179408e-04
+4.300000e+02	2.200000e+02	2.200000e+02	1.344000e-04	2.504199e-05	2.504199e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d13-x01-y01
+Path=/REF/ATLAS_2016_I1426515/d13-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.963495e-01	1.963495e-01	1.963495e-01	4.731300e+01	5.362466e+00	5.362466e+00
+5.890485e-01	1.963495e-01	1.963495e-01	7.069340e+01	6.348626e+00	6.348626e+00
+9.817475e-01	1.963495e-01	1.963495e-01	8.164840e+01	7.782659e+00	7.782659e+00
+1.374446e+00	1.963495e-01	1.963495e-01	1.019770e+02	1.489991e+01	1.489991e+01
+1.767146e+00	1.963495e-01	1.963495e-01	1.403800e+02	1.327785e+01	1.327785e+01
+2.159845e+00	1.963495e-01	1.963495e-01	1.928760e+02	1.447782e+01	1.447782e+01
+2.552544e+00	1.963500e-01	1.963500e-01	2.174250e+02	1.732519e+01	1.732519e+01
+2.945244e+00	1.963495e-01	1.963495e-01	9.879550e+01	1.556596e+01	1.556596e+01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d13-x01-y02
+Path=/REF/ATLAS_2016_I1426515/d13-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.963495e-01	1.963495e-01	1.963495e-01	1.266750e-01	1.010093e-02	1.010093e-02
+5.890485e-01	1.963495e-01	1.963495e-01	1.892730e-01	1.286551e-02	1.286551e-02
+9.817475e-01	1.963495e-01	1.963495e-01	2.186030e-01	2.453664e-02	2.453664e-02
+1.374446e+00	1.963495e-01	1.963495e-01	2.730300e-01	2.690303e-02	2.690303e-02
+1.767146e+00	1.963495e-01	1.963495e-01	3.758490e-01	1.855844e-02	1.855844e-02
+2.159845e+00	1.963495e-01	1.963495e-01	5.164010e-01	2.135581e-02	2.135581e-02
+2.552544e+00	1.963500e-01	1.963500e-01	5.821290e-01	2.282113e-02	2.282113e-02
+2.945244e+00	1.963495e-01	1.963495e-01	2.645130e-01	3.161994e-02	3.161994e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d14-x01-y01
+Path=/REF/ATLAS_2016_I1426515/d14-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e-01	1.000000e-01	1.000000e-01	2.374110e+02	2.109214e+01	2.109214e+01
+3.000000e-01	1.000000e-01	1.000000e-01	2.229090e+02	2.055433e+01	2.055433e+01
+5.000000e-01	1.000000e-01	1.000000e-01	2.324680e+02	2.065629e+01	2.065629e+01
+7.000000e-01	1.000000e-01	1.000000e-01	2.072130e+02	1.974022e+01	1.974022e+01
+9.000000e-01	1.000000e-01	1.000000e-01	2.161540e+02	1.792345e+01	1.792345e+01
+1.100000e+00	1.000000e-01	1.000000e-01	1.939080e+02	1.704307e+01	1.704307e+01
+1.300000e+00	1.000000e-01	1.000000e-01	1.457460e+02	2.378334e+01	2.378334e+01
+1.500000e+00	1.000000e-01	1.000000e-01	1.263000e+02	1.807074e+01	1.807074e+01
+1.700000e+00	1.000000e-01	1.000000e-01	1.017540e+02	1.945776e+01	1.945776e+01
+1.900000e+00	1.000000e-01	1.000000e-01	9.743700e+01	1.118728e+01	1.118728e+01
+2.250000e+00	2.500000e-01	2.500000e-01	3.552710e+01	8.728699e+00	8.728699e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d14-x01-y02
+Path=/REF/ATLAS_2016_I1426515/d14-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e-01	1.000000e-01	1.000000e-01	6.347490e-01	5.900254e-02	5.900254e-02
+3.000000e-01	1.000000e-01	1.000000e-01	5.959750e-01	3.442252e-02	3.442252e-02
+5.000000e-01	1.000000e-01	1.000000e-01	6.215350e-01	5.711992e-02	5.711992e-02
+7.000000e-01	1.000000e-01	1.000000e-01	5.540090e-01	3.430464e-02	3.430464e-02
+9.000000e-01	1.000000e-01	1.000000e-01	5.779150e-01	3.182706e-02	3.182706e-02
+1.100000e+00	1.000000e-01	1.000000e-01	5.184370e-01	2.870461e-02	2.870461e-02
+1.300000e+00	1.000000e-01	1.000000e-01	3.896700e-01	5.066844e-02	5.066844e-02
+1.500000e+00	1.000000e-01	1.000000e-01	3.376780e-01	3.504647e-02	3.504647e-02
+1.700000e+00	1.000000e-01	1.000000e-01	2.720530e-01	4.146563e-02	4.146563e-02
+1.900000e+00	1.000000e-01	1.000000e-01	2.605110e-01	2.424049e-02	2.424049e-02
+2.250000e+00	2.500000e-01	2.500000e-01	9.498620e-02	1.994100e-02	1.994100e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d15-x01-y01
+Path=/REF/ATLAS_2016_I1426515/d15-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-02	5.000000e-02	5.000000e-02	4.602930e+02	4.677782e+01	4.677782e+01
+1.500000e-01	5.000000e-02	5.000000e-02	4.190640e+02	7.677878e+01	7.677878e+01
+2.500000e-01	5.000000e-02	5.000000e-02	4.699520e+02	3.943418e+01	3.943418e+01
+3.500000e-01	5.000000e-02	5.000000e-02	4.024540e+02	4.026202e+01	4.026202e+01
+4.500000e-01	5.000000e-02	5.000000e-02	3.714820e+02	5.645906e+01	5.645906e+01
+5.500000e-01	5.000000e-02	5.000000e-02	4.027560e+02	4.237676e+01	4.237676e+01
+6.500000e-01	5.000000e-02	5.000000e-02	4.045760e+02	4.126885e+01	4.126885e+01
+7.500000e-01	5.000000e-02	5.000000e-02	3.870640e+02	4.702812e+01	4.702812e+01
+9.000000e-01	1.000000e-01	1.000000e-01	2.112960e+02	3.027806e+01	3.027806e+01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1426515/d15-x01-y02
+Path=/REF/ATLAS_2016_I1426515/d15-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-02	5.000000e-02	5.000000e-02	1.238840e+00	7.361148e-02	7.361148e-02
+1.500000e-01	5.000000e-02	5.000000e-02	1.122930e+00	1.575333e-01	1.575333e-01
+2.500000e-01	5.000000e-02	5.000000e-02	1.254130e+00	6.446731e-02	6.446731e-02
+3.500000e-01	5.000000e-02	5.000000e-02	1.078910e+00	6.352746e-02	6.352746e-02
+4.500000e-01	5.000000e-02	5.000000e-02	9.934480e-01	1.073727e-01	1.073727e-01
+5.500000e-01	5.000000e-02	5.000000e-02	1.074280e+00	6.562287e-02	6.562287e-02
+6.500000e-01	5.000000e-02	5.000000e-02	1.075170e+00	7.406380e-02	7.406380e-02
+7.500000e-01	5.000000e-02	5.000000e-02	1.031730e+00	1.396764e-01	1.396764e-01
+9.000000e-01	1.000000e-01	1.000000e-01	5.652810e-01	9.750739e-02	9.750739e-02
+END YODA_SCATTER2D
+
diff --git a/src/Analyses/ATLAS_2016_I1426695.cc b/analyses/pluginATLAS/ATLAS_2016_I1426695.cc
rename from src/Analyses/ATLAS_2016_I1426695.cc
rename to analyses/pluginATLAS/ATLAS_2016_I1426695.cc
diff --git a/data/anainfo/ATLAS_2016_I1426695.info b/analyses/pluginATLAS/ATLAS_2016_I1426695.info
rename from data/anainfo/ATLAS_2016_I1426695.info
rename to analyses/pluginATLAS/ATLAS_2016_I1426695.info
diff --git a/data/plotinfo/ATLAS_2016_I1426695.plot b/analyses/pluginATLAS/ATLAS_2016_I1426695.plot
rename from data/plotinfo/ATLAS_2016_I1426695.plot
rename to analyses/pluginATLAS/ATLAS_2016_I1426695.plot
diff --git a/data/refdata/ATLAS_2016_I1426695.yoda b/analyses/pluginATLAS/ATLAS_2016_I1426695.yoda
rename from data/refdata/ATLAS_2016_I1426695.yoda
rename to analyses/pluginATLAS/ATLAS_2016_I1426695.yoda
diff --git a/src/Analyses/ATLAS_2016_I1444991.cc b/analyses/pluginATLAS/ATLAS_2016_I1444991.cc
rename from src/Analyses/ATLAS_2016_I1444991.cc
rename to analyses/pluginATLAS/ATLAS_2016_I1444991.cc
diff --git a/data/anainfo/ATLAS_2016_I1444991.info b/analyses/pluginATLAS/ATLAS_2016_I1444991.info
rename from data/anainfo/ATLAS_2016_I1444991.info
rename to analyses/pluginATLAS/ATLAS_2016_I1444991.info
diff --git a/data/plotinfo/ATLAS_2016_I1444991.plot b/analyses/pluginATLAS/ATLAS_2016_I1444991.plot
rename from data/plotinfo/ATLAS_2016_I1444991.plot
rename to analyses/pluginATLAS/ATLAS_2016_I1444991.plot
diff --git a/data/refdata/ATLAS_2016_I1444991.yoda b/analyses/pluginATLAS/ATLAS_2016_I1444991.yoda
rename from data/refdata/ATLAS_2016_I1444991.yoda
rename to analyses/pluginATLAS/ATLAS_2016_I1444991.yoda
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1448301.cc b/analyses/pluginATLAS/ATLAS_2016_I1448301.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1448301.cc
@@ -0,0 +1,315 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Projections/VetoedFinalState.hh"
+#include "Rivet/Projections/IdentifiedFinalState.hh"
+#include "Rivet/Projections/DressedLeptons.hh"
+#include "Rivet/Projections/PromptFinalState.hh"
+#include "Rivet/Projections/VisibleFinalState.hh"
+
+namespace Rivet {
+
+
+  /// @brief Z/gamma cross section measurement at 8 TeV
+  class ATLAS_2016_I1448301 : public Analysis {
+  public:
+
+    /// Constructor
+    ATLAS_2016_I1448301(string name="ATLAS_2016_I1448301") : Analysis(name) {
+      _mode = 0; // pick electron channel by default
+      setNeedsCrossSection(true);
+    }
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      // Prompt photons
+      const Cut photoncut = Cuts::abspid == PID::PHOTON && Cuts::pT > 15*GeV && Cuts::abseta < 2.37;
+      PromptFinalState photon_fs(photoncut);
+      declare(photon_fs, "Photons");
+
+      // Prompt leptons
+      const PromptFinalState barelepton_fs = _mode ? Cuts::abspid == PID::MUON : Cuts::abspid == PID::ELECTRON;
+
+      // Dressed leptons
+      const IdentifiedFinalState allphoton_fs(PID::PHOTON); // photons used for lepton dressing
+      const Cut leptoncut = Cuts::pT > 25*GeV && Cuts::abseta < 2.47;
+      const DressedLeptons dressedlepton_fs(allphoton_fs, barelepton_fs, 0.1, leptoncut, true, true); //use all the photons for lepton dressing
+      declare(dressedlepton_fs, "Leptons");
+
+      // MET (prompt neutrinos)
+      VetoedFinalState ivfs;
+      ivfs.addVetoOnThisFinalState(VisibleFinalState());
+      declare(PromptFinalState(ivfs), "MET");
+
+      // Jets
+      VetoedFinalState jet_fs;
+      jet_fs.vetoNeutrinos();
+      jet_fs.addVetoPairId(PID::MUON);
+      const FastJets fastjets(jet_fs, FastJets::ANTIKT, 0.4);
+      declare(fastjets, "Jets");
+
+
+      // Histograms
+      if (_mode == 2) {
+        _h["vvg"]     = bookHisto1D( 2, 1, 1);
+        _h["vvgg"]    = bookHisto1D( 4, 1, 1);
+        _h["pT"]      = bookHisto1D( 7, 1, 1);
+        _h["pT_0jet"] = bookHisto1D( 8, 1, 1);
+      } else {
+        const size_t ch = 1 + bool(_mode);
+        _h["llg"]       = bookHisto1D( 1, 1, ch);
+        _h["llg_comb"]  = bookHisto1D( 1, 1, 3);
+        _h["llgg"]      = bookHisto1D( 3, 1, ch);
+        _h["llgg_comb"] = bookHisto1D( 3, 1, 3);
+        //
+        _h["pT"]       = bookHisto1D( 5, 1, 1);
+        _h["pT_0jet"]  = bookHisto1D( 6, 1, 1);
+        _h["M"]        = bookHisto1D( 9, 1, 1);
+        _h["M_0jet"]   = bookHisto1D(10, 1, 1);
+        _h["Njets"]    = bookHisto1D(11, 1, 1);
+      }
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      const double weight = event.weight();
+
+      // Get objects
+      vector<DressedLepton> leptons = apply<DressedLeptons>(event, "Leptons").dressedLeptons();
+      const Particles& photons = apply<PromptFinalState>(event, "Photons").particlesByPt();
+      const Jets jets = apply<FastJets>(event, "Jets").jetsByPt();
+
+      if (_mode == 2) {
+        const FinalState& metfs = apply<PromptFinalState>(event, "MET");
+        Vector3 met_vec;
+        for (const Particle& p : metfs.particles()) met_vec += p.mom().perpVec();
+
+        if (met_vec.mod() < 100*GeV) vetoEvent;
+        if (photons.empty()) vetoEvent;
+
+        if (photons.size() > 1) { // nu nu y y
+
+          bool yy_veto = false;
+          yy_veto |= photons[0].pT() < 22*GeV;
+          yy_veto |= photons[1].pT() < 22*GeV;
+          yy_veto |= met_vec.mod() < 110*GeV;
+          const double yyPhi = (photons[0].momentum() + photons[1].momentum()).phi();
+          yy_veto |= fabs(yyPhi - met_vec.phi()) < 2.62 || fabs(yyPhi - met_vec.phi()) > 3.66;
+          yy_veto |= deltaR(photons[0], photons[1]) < 0.4;
+
+          // Photon isolation calculated by jets, count jets
+          Jet ph0_jet, ph1_jet;
+          double min_dR_ph0_jet = 999., min_dR_ph1_jet = 999.;
+          size_t njets = 0;
+          for (const Jet& j : jets) {
+            if (j.pT() > 30*GeV && j.abseta() < 4.5) {
+              if (deltaR(j, photons[0]) > 0.3 && deltaR(j, photons[1]) > 0.3)  ++njets;
+            }
+            if (deltaR(j, photons[0]) < min_dR_ph0_jet) {
+              min_dR_ph0_jet = deltaR(j, photons[0]);
+              ph0_jet = j;
+            }
+            if (deltaR(j, photons[1]) < min_dR_ph1_jet) {
+              min_dR_ph1_jet = deltaR(j, photons[1]);
+              ph1_jet = j;
+            }
+          }
+          double photon0iso = 0., photon1iso = 0.;
+          if (min_dR_ph0_jet < 0.4)  photon0iso = ph0_jet.pT() - photons[0].pT();
+          if (min_dR_ph1_jet < 0.4)  photon1iso = ph1_jet.pT() - photons[1].pT();
+          yy_veto |= photon0iso/photons[0].pT() > 0.5;
+          yy_veto |= photon1iso/photons[1].pT() > 0.5;
+
+          if (!yy_veto) {
+            _h["vvgg"]->fill(0.5, weight);
+            if (!njets)  _h["vvgg"]->fill(1.5, weight);
+          }
+        } // end of nu nu y y section
+
+
+        if (photons[0].pT() < 130*GeV)  vetoEvent;
+        if (fabs(fabs(deltaPhi(photons[0], met_vec)) - 3.14) > 1.57)  vetoEvent;
+
+        // Photon isolation calculated by jets, count jets
+        Jet ph_jet;
+        double min_dR_ph_jet = 999.;
+        size_t njets = 0;
+        for (const Jet& j : jets) {
+          if (j.pT() > 30*GeV && j.abseta() < 4.5) {
+            if (deltaR(j, photons[0]) > 0.3)  ++njets;
+          }
+          if (deltaR(j, photons[0]) < min_dR_ph_jet) {
+            min_dR_ph_jet = deltaR(j, photons[0]);
+            ph_jet = j;
+          }
+        }
+        double photoniso = 0;
+        if (min_dR_ph_jet < 0.4)  photoniso = ph_jet.pT() - photons[0].pT();
+        if (photoniso/photons[0].pT() > 0.5)  vetoEvent;
+
+        const double pTgamma = photons[0].pT()/GeV;
+        _h["pT"]->fill(pTgamma, weight);
+        _h["vvg"]->fill(0.5, weight);
+        if (!njets) {
+          _h["vvg"]->fill(1.5, weight);
+          _h["pT_0jet"]->fill(pTgamma, weight);
+        }
+      } // end of nu nu y (y) section
+
+
+      else {
+
+        // Dilepton candidate
+        if (leptons.size() < 2) vetoEvent;
+
+        // Sort the dressed leptons by pt
+        std::sort(leptons.begin(), leptons.end(), cmpMomByPt);
+
+        vector<DressedLepton> lep_p, lep_m;
+        for (const DressedLepton& lep : leptons) {
+          if (lep.charge() > 0.)  lep_p.push_back(lep);
+          if (lep.charge() < 0.)  lep_m.push_back(lep);
+        }
+
+        if (lep_p.empty() || lep_m.empty())  vetoEvent;
+        if (lep_p[0].abspid() != lep_m[0].abspid())  vetoEvent;
+        if ((lep_p[0].momentum() + lep_m[0].momentum()).mass() < 40*GeV)  vetoEvent;
+
+        // Photon lepton overlap removal
+        if (photons.empty())  vetoEvent;
+
+        if (photons.size() > 1) {
+          bool veto = false;
+          veto |= deltaR(photons[0], lep_p[0]) < 0.4;
+          veto |= deltaR(photons[0], lep_m[0]) < 0.4;
+          veto |= deltaR(photons[1], lep_p[0]) < 0.4;
+          veto |= deltaR(photons[1], lep_m[0]) < 0.4;
+          veto |= deltaR(photons[0], photons[1]) < 0.4;
+
+          Jet ph0_jet, ph1_jet;
+          double min_dR_ph0_jet = 999., min_dR_ph1_jet=999.;
+          int njets = 0;
+          for (const Jet& j : jets){
+            if (j.pT() > 30*GeV && j.abseta() < 4.5) {
+              if (deltaR(j, lep_p[0]) > 0.3 && deltaR(j, lep_m[0]) > 0.3) {
+                if (deltaR(j, photons[0]) > 0.3 && deltaR(j, photons[1]) > 0.3 )  ++njets;
+              }
+            }
+            if (deltaR(j, photons[0]) < min_dR_ph0_jet) {
+              min_dR_ph0_jet = deltaR(j, photons[0]);
+              ph0_jet = j;
+            }
+            if (deltaR(j, photons[1]) < min_dR_ph1_jet) {
+              min_dR_ph1_jet = deltaR(j, photons[1]);
+              ph1_jet = j;
+            }
+          }
+          double photon0iso = 0, photon1iso = 0;
+          if (min_dR_ph0_jet < 0.4) photon0iso = ph0_jet.pT() - photons[0].pT();
+          if (min_dR_ph1_jet < 0.4) photon1iso = ph1_jet.pT() - photons[1].pT();
+          veto |= photon0iso/photons[0].pT() > 0.5;
+          veto |= photon1iso/photons[1].pT() > 0.5;
+
+          // Fill plots
+          if (!veto) {
+            _h["llgg"]->fill(0.5, weight);
+            _h["llgg_comb"]->fill(0.5, weight);
+            if (!njets) {
+              _h["llgg"]->fill(1.5, weight);
+              _h["llgg_comb"]->fill(1.5, weight);
+            }
+          }
+        }
+
+        if (deltaR(photons[0], lep_p[0]) < 0.7)  vetoEvent;
+        if (deltaR(photons[0], lep_m[0]) < 0.7)  vetoEvent;
+
+        // Photon isolation calculated by jets, count jets
+        Jet ph_jet;
+        double min_dR_ph_jet = 999.;
+        size_t njets = 0;
+        for (const Jet& j : jets) {
+          if (j.pT() > 30*GeV && j.abseta() < 4.5) {
+            if (deltaR(j, lep_p[0]) > 0.3 && deltaR(j, lep_m[0]) > 0.3 && deltaR(j, photons[0]) > 0.3)  ++njets;
+          }
+          if (deltaR(j, photons[0]) < min_dR_ph_jet) {
+            min_dR_ph_jet = deltaR(j, photons[0]);
+            ph_jet = j;
+          }
+        }
+        double photoniso = 0;
+        if (min_dR_ph_jet < 0.4)  photoniso = ph_jet.pT() - photons[0].pT();
+        if (photoniso/photons[0].pT() > 0.5)  vetoEvent;
+
+
+        // Fill plots
+        const double pTgamma = photons[0].pT()/GeV;
+        const double mllgamma = (lep_p[0].momentum() + lep_m[0].momentum() + photons[0].momentum()).mass()/GeV;
+
+        _h["pT"]->fill(pTgamma,  weight);
+        _h["M"]->fill(mllgamma, weight);
+        _h["Njets"]->fill(njets < 3? njets : 3, weight);
+
+        _h["llg"]->fill(0.5, weight);
+        _h["llg_comb"]->fill(0.5, weight);
+
+        if (!njets) {
+          _h["pT_0jet"]->fill(pTgamma, weight);
+          _h["M_0jet"]->fill(mllgamma, weight);
+          _h["llg"]->fill(1.5, weight);
+          _h["llg_comb"]->fill(1.5, weight);
+        }
+      } // end of _mode check
+    } // end of analysis
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+      const double sf = crossSection()/femtobarn/sumOfWeights();
+      for (const auto& kv : _h) scale(kv.second, sf);
+    }
+
+    //@}
+
+
+  protected:
+
+    // Data members like post-cuts event weight counters go here
+    size_t _mode;
+
+  private:
+
+    /// Histograms
+    map<string, Histo1DPtr> _h;
+
+  };
+
+
+  struct ATLAS_2016_I1448301_EL : public ATLAS_2016_I1448301 {
+    ATLAS_2016_I1448301_EL() : ATLAS_2016_I1448301("ATLAS_2016_I1448301_EL") { _mode = 0; }
+  };
+
+  struct ATLAS_2016_I1448301_MU : public ATLAS_2016_I1448301 {
+    ATLAS_2016_I1448301_MU() : ATLAS_2016_I1448301("ATLAS_2016_I1448301_MU") { _mode = 1; }
+  };
+
+  struct ATLAS_2016_I1448301_NU : public ATLAS_2016_I1448301 {
+    ATLAS_2016_I1448301_NU() : ATLAS_2016_I1448301("ATLAS_2016_I1448301_NU") { _mode = 2; }
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(ATLAS_2016_I1448301);
+  DECLARE_RIVET_PLUGIN(ATLAS_2016_I1448301_EL);
+  DECLARE_RIVET_PLUGIN(ATLAS_2016_I1448301_MU);
+  DECLARE_RIVET_PLUGIN(ATLAS_2016_I1448301_NU);
+
+}
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1448301.info b/analyses/pluginATLAS/ATLAS_2016_I1448301.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1448301.info
@@ -0,0 +1,59 @@
+Name: ATLAS_2016_I1448301
+Year: 2016
+Summary: Zg(g) cross sections at 8 TeV
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1448301
+Status: VALIDATED
+Authors:
+ - Hulin Wang <Hulin.Wang@cern.ch>
+ - Evgeny Soldatov <Evgeny.Soldatov@cern.ch>
+ - Christian Gutschow <chris.g@cern.ch>
+References:
+  - Phys.Rev. D93 (2016) no.11, 112002
+  - doi:10.1103/PhysRevD.93.112002
+  - arXiv:1604.05232 [hep-ex]
+Keywords:
+ - multiboson
+ - triboson
+ - diphoton
+ - photon
+ - Z
+RunInfo: p + p -> e+ e- gamma (gamma) at 8 TeV
+Luminosity_fb: 20.3
+Beams: [p+, p+]
+Energies: [8000]
+PtCuts: [25,25,15] 
+Description:
+  'The production of $Z$ bosons with one or two isolated high-energy photons is studied using pp collisions at $\sqrt{s}=8$ TeV.
+  The analyses use a data sample with an integrated luminosity of 20.3 fb${}^{-1}$ collected by the ATLAS detector during the 
+  2012 LHC data taking. The $Z\gamma$ and $Z\gamma\gamma$ production cross sections are measured with leptonic ($e^+e^-$, 
+  $\mu^+\mu^-$, $\nu\bar{\nu}$) decays of the Z boson, in extended fiducial regions defined in terms of the lepton and photon 
+  acceptance. They are then compared to cross-section predictions from the Standard Model, where the sources of the photons are 
+  radiation off initial-state quarks and radiative Z-boson decay to charged leptons, and from fragmentation of final-state quarks 
+  and gluons into photons. The yields of events with photon transverse energy $E_\text{T}>250$ GeV from $\ell^+\ell^-\gamma$ events 
+  and with $E_\text{T}>400$ GeV from $\nu\bar{\nu}\gamma$ events are used to search for anomalous triple gauge-boson couplings
+  $ZZ\gamma$ and $Z\gamma\gamma$. The yields of events with diphoton invariant mass $m_{\gamma\gamma}>200$ GeV from 
+  $\ell^+\ell^-\gamma\gamma$ events and with $m_{\gamma\gamma}>300$ GeV from $\nu\bar{\nu}\gamma\gamma$ events are used to search 
+  for anomalous quartic gauge-boson couplings $ZZ\gamma\gamma$ and $Z\gamma\gamma\gamma$. No deviations from Standard Model predictions
+  are observed and limits are placed on parameters used to describe anomalous triple and quartic gauge-boson couplings.
+  The lepton channel can be specified by using the relevant plugins (_EL, _MU, _NU). The default plugin uses the electron channel.'
+BibKey: Aad:2016sau
+BibTeX: '@article{Aad:2016sau,
+      author         = "Aad, Georges and others",
+      title          = "{Measurements of $Z\gamma$ and $Z\gamma\gamma$ production
+                        in $pp$ collisions at $\sqrt{s}=$ 8 TeV with the ATLAS
+                        detector}",
+      collaboration  = "ATLAS",
+      journal        = "Phys. Rev.",
+      volume         = "D93",
+      year           = "2016",
+      number         = "11",
+      pages          = "112002",
+      doi            = "10.1103/PhysRevD.93.112002",
+      eprint         = "1604.05232",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2016-049",
+      SLACcitation   = "%%CITATION = ARXIV:1604.05232;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1448301.plot b/analyses/pluginATLAS/ATLAS_2016_I1448301.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1448301.plot
@@ -0,0 +1,67 @@
+# BEGIN PLOT /ATLAS_2016_I1448301/*
+LogY=1
+LogX=1
+XTwosidedTicks=1
+YTwosidedTicks=1
+LegendAlign=r
+LegendXPos=0.95
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301/d0[1-3]
+LogY=0
+LogX=0
+YLabel=Fiducial Cross section [fb]
+XLabel=$N_\text{jets}$
+XCustomMajorTicks=0.5 $\geq0$ 1.5 $=0$
+LegendYPos=0.3
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301/d01-x01-y01
+Title=$Z(\to ee)+\gamma$ data
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301/d01-x01-y03
+Title=$Z(\to \ell\ell)+\gamma$ data
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301/d03-x01-y01
+Title=$Z(\to ee)+\gamma +\gamma$ data
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301/d03-x01-y03
+Title=$Z(\to \ell\ell)+\gamma +\gamma$ data
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301/d05-x01-y01
+Title=$N_\text{jets} \ge 0$
+XLabel=$E_\text{T}^\gamma$ [GeV]
+YLabel=$\text{d}\sigma / \text{d} E_\text{T}^\gamma$ [fb/GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301/d06-x01-y01
+Title=$N_\text{jets} = 0$
+XLabel=$E_\text{T}^\gamma$ [GeV]
+YLabel=$\text{d}\sigma / \text{d} E_\text{T}^\gamma$ [fb/GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301/d09-x01-y01
+Title=$N_\text{jets} \ge 0$
+XLabel=$m_{\ell\ell\gamma}$ [GeV]
+YLabel=$\text{d}\sigma / \text{d} m_{\ell\ell\gamma}$ [fb/GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301/d10-x01-y01
+Title=$N_\text{jets} = 0$
+XLabel=$m_{\ell\ell\gamma}$ [GeV]
+YLabel=$\text{d}\sigma / \text{d} m_{\ell\ell\gamma}$ [fb/GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301/d11-x01-y01
+LogX=0
+Title=extended phase space
+XLabel=$N_\text{jets}$
+YLabel=$\text{d}\sigma / \text{d} N_\text{jets}$ [fb]
+XCustomMajorTicks=0.0 $=0$ 1.0 $=1$ 2.0 $=2$ 3.0 $\geq3$
+# END PLOT
+
+
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1448301.yoda b/analyses/pluginATLAS/ATLAS_2016_I1448301.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1448301.yoda
@@ -0,0 +1,117 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301/d01-x01-y01
+Path=/REF/ATLAS_2016_I1448301/d01-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	1.510000e+03	8.980535e+01	9.698453e+01
+1.500000e+00	5.000000e-01	5.000000e-01	1.205000e+03	7.968689e+01	8.820998e+01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301/d01-x01-y03
+Path=/REF/ATLAS_2016_I1448301/d01-x01-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	1.507000e+03	7.882259e+01	8.381527e+01
+1.500000e+00	5.000000e-01	5.000000e-01	1.189000e+03	6.733498e+01	7.328711e+01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301/d03-x01-y01
+Path=/REF/ATLAS_2016_I1448301/d03-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	6.200000e+00	1.174734e+00	1.268858e+00
+1.500000e+00	5.000000e-01	5.000000e-01	4.600000e+00	9.539392e-01	1.081665e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301/d03-x01-y03
+Path=/REF/ATLAS_2016_I1448301/d03-x01-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	5.070000e+00	7.853662e-01	8.432082e-01
+1.500000e+00	5.000000e-01	5.000000e-01	3.480000e+00	6.172520e-01	6.790434e-01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301/d05-x01-y01
+Path=/REF/ATLAS_2016_I1448301/d05-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.750000e+01	2.500000e+00	2.500000e+00	1.317000e+02	1.052236e+01	1.052236e+01
+2.500000e+01	5.000000e+00	5.000000e+00	4.788000e+01	3.108456e+00	3.108456e+00
+3.500000e+01	5.000000e+00	5.000000e+00	1.523000e+01	8.672946e-01	8.672946e-01
+4.500000e+01	5.000000e+00	5.000000e+00	6.980000e+00	4.167733e-01	4.167733e-01
+5.500000e+01	5.000000e+00	5.000000e+00	3.880000e+00	2.662705e-01	2.662705e-01
+7.000000e+01	1.000000e+01	1.000000e+01	2.142000e+00	1.258769e-01	1.258769e-01
+9.000000e+01	1.000000e+01	1.000000e+01	9.330000e-01	7.723341e-02	7.723341e-02
+1.250000e+02	2.500000e+01	2.500000e+01	3.060000e-01	2.475884e-02	2.475884e-02
+1.750000e+02	2.500000e+01	2.500000e+01	9.520000e-02	1.229675e-02	1.229675e-02
+6.000000e+02	4.000000e+02	4.000000e+02	4.090000e-03	6.276942e-04	6.276942e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301/d06-x01-y01
+Path=/REF/ATLAS_2016_I1448301/d06-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.750000e+01	2.500000e+00	2.500000e+00	1.140000e+02	8.910668e+00	8.910668e+00
+2.500000e+01	5.000000e+00	5.000000e+00	3.819000e+01	2.645695e+00	2.645695e+00
+3.500000e+01	5.000000e+00	5.000000e+00	1.106000e+01	7.502666e-01	7.502666e-01
+4.500000e+01	5.000000e+00	5.000000e+00	4.570000e+00	3.224903e-01	3.224903e-01
+5.500000e+01	5.000000e+00	5.000000e+00	2.390000e+00	2.000000e-01	2.000000e-01
+7.000000e+01	1.000000e+01	1.000000e+01	1.298000e+00	9.449339e-02	9.449339e-02
+9.000000e+01	1.000000e+01	1.000000e+01	4.850000e-01	5.162364e-02	5.162364e-02
+1.250000e+02	2.500000e+01	2.500000e+01	1.490000e-01	1.702939e-02	1.702939e-02
+1.750000e+02	2.500000e+01	2.500000e+01	3.690000e-02	7.571658e-03	7.571658e-03
+6.000000e+02	4.000000e+02	4.000000e+02	1.670000e-03	3.584690e-04	3.584690e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301/d09-x01-y01
+Path=/REF/ATLAS_2016_I1448301/d09-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+6.800000e+01	1.800000e+01	1.800000e+01	7.730000e-01	1.660873e-01	1.660873e-01
+9.100000e+01	5.000000e+00	5.000000e+00	6.011000e+01	2.999083e+00	2.999083e+00
+1.030000e+02	7.000000e+00	7.000000e+00	8.380000e+00	8.286133e-01	8.286133e-01
+1.225000e+02	1.250000e+01	1.250000e+01	1.248000e+01	1.167262e+00	1.167262e+00
+1.525000e+02	1.750000e+01	1.750000e+01	6.200000e+00	4.947727e-01	4.947727e-01
+1.900000e+02	2.000000e+01	2.000000e+01	2.687000e+00	1.946407e-01	1.946407e-01
+2.400000e+02	3.000000e+01	3.000000e+01	1.088000e+00	8.417244e-02	8.417244e-02
+3.100000e+02	4.000000e+01	4.000000e+01	3.710000e-01	3.361547e-02	3.361547e-02
+4.100000e+02	6.000000e+01	6.000000e+01	1.296000e-01	1.374118e-02	1.374118e-02
+5.550000e+02	8.500000e+01	8.500000e+01	3.180000e-02	3.858756e-03	3.858756e-03
+1.320000e+03	6.800000e+02	6.800000e+02	1.670000e-03	3.088689e-04	3.088689e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301/d10-x01-y01
+Path=/REF/ATLAS_2016_I1448301/d10-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+6.800000e+01	1.800000e+01	1.800000e+01	6.300000e-01	1.362975e-01	1.362975e-01
+9.100000e+01	5.000000e+00	5.000000e+00	4.975000e+01	2.789767e+00	2.789767e+00
+1.030000e+02	7.000000e+00	7.000000e+00	7.060000e+00	7.558439e-01	7.558439e-01
+1.225000e+02	1.250000e+01	1.250000e+01	1.031000e+01	9.884331e-01	9.884331e-01
+1.525000e+02	1.750000e+01	1.750000e+01	4.640000e+00	3.929377e-01	3.929377e-01
+1.900000e+02	2.000000e+01	2.000000e+01	1.847000e+00	1.502332e-01	1.502332e-01
+2.400000e+02	3.000000e+01	3.000000e+01	7.570000e-01	6.260990e-02	6.260990e-02
+3.100000e+02	4.000000e+01	4.000000e+01	2.060000e-01	2.729469e-02	2.729469e-02
+4.100000e+02	6.000000e+01	6.000000e+01	6.260000e-02	9.822932e-03	9.822932e-03
+5.550000e+02	8.500000e+01	8.500000e+01	1.550000e-02	2.459675e-03	2.459675e-03
+1.320000e+03	6.800000e+02	6.800000e+02	7.730000e-04	1.929171e-04	1.929171e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301/d11-x01-y01
+Path=/REF/ATLAS_2016_I1448301/d11-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+0.000000e+00	5.000000e-01	5.000000e-01	1.193300e+03	7.649634e+01	7.649634e+01
+1.000000e+00	5.000000e-01	5.000000e-01	2.337000e+02	2.410498e+01	2.410498e+01
+2.000000e+00	5.000000e-01	5.000000e-01	6.220000e+01	8.860023e+00	8.860023e+00
+3.000000e+00	5.000000e-01	5.000000e-01	1.970000e+01	4.401136e+00	4.401136e+00
+END YODA_SCATTER2D
+
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1448301_EL.info b/analyses/pluginATLAS/ATLAS_2016_I1448301_EL.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1448301_EL.info
@@ -0,0 +1,59 @@
+Name: ATLAS_2016_I1448301_EL
+Year: 2016
+Summary: Zg(g) cross sections at 8 TeV
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1448301
+Status: VALIDATED
+Authors:
+ - Hulin Wang <Hulin.Wang@cern.ch>
+ - Evgeny Soldatov <Evgeny.Soldatov@cern.ch>
+ - Christian Gutschow <chris.g@cern.ch>
+References:
+  - Phys.Rev. D93 (2016) no.11, 112002
+  - doi:10.1103/PhysRevD.93.112002
+  - arXiv:1604.05232 [hep-ex]
+Keywords:
+ - multiboson
+ - triboson
+ - diphoton
+ - photon
+ - Z
+RunInfo: p + p -> e+ e- gamma (gamma) at 8 TeV
+Luminosity_fb: 20.3
+Beams: [p+, p+]
+Energies: [8000]
+PtCuts: [25,25,15] 
+Description:
+  'The production of $Z$ bosons with one or two isolated high-energy photons is studied using pp collisions at $\sqrt{s}=8$ TeV.
+  The analyses use a data sample with an integrated luminosity of 20.3 fb${}^{-1}$ collected by the ATLAS detector during the 
+  2012 LHC data taking. The $Z\gamma$ and $Z\gamma\gamma$ production cross sections are measured with leptonic ($e^+e^-$, 
+  $\mu^+\mu^-$, $\nu\bar{\nu}$) decays of the Z boson, in extended fiducial regions defined in terms of the lepton and photon 
+  acceptance. They are then compared to cross-section predictions from the Standard Model, where the sources of the photons are 
+  radiation off initial-state quarks and radiative Z-boson decay to charged leptons, and from fragmentation of final-state quarks 
+  and gluons into photons. The yields of events with photon transverse energy $E_\text{T}>250$ GeV from $\ell^+\ell^-\gamma$ events 
+  and with $E_\text{T}>400$ GeV from $\nu\bar{\nu}\gamma$ events are used to search for anomalous triple gauge-boson couplings
+  $ZZ\gamma$ and $Z\gamma\gamma$. The yields of events with diphoton invariant mass $m_{\gamma\gamma}>200$ GeV from 
+  $\ell^+\ell^-\gamma\gamma$ events and with $m_{\gamma\gamma}>300$ GeV from $\nu\bar{\nu}\gamma\gamma$ events are used to search 
+  for anomalous quartic gauge-boson couplings $ZZ\gamma\gamma$ and $Z\gamma\gamma\gamma$. No deviations from Standard Model predictions
+  are observed and limits are placed on parameters used to describe anomalous triple and quartic gauge-boson couplings.
+  The lepton channel can be specified by using the relevant plugins (_EL, _MU, _NU). The default plugin uses the electron channel.'
+BibKey: Aad:2016sau
+BibTeX: '@article{Aad:2016sau,
+      author         = "Aad, Georges and others",
+      title          = "{Measurements of $Z\gamma$ and $Z\gamma\gamma$ production
+                        in $pp$ collisions at $\sqrt{s}=$ 8 TeV with the ATLAS
+                        detector}",
+      collaboration  = "ATLAS",
+      journal        = "Phys. Rev.",
+      volume         = "D93",
+      year           = "2016",
+      number         = "11",
+      pages          = "112002",
+      doi            = "10.1103/PhysRevD.93.112002",
+      eprint         = "1604.05232",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2016-049",
+      SLACcitation   = "%%CITATION = ARXIV:1604.05232;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1448301_EL.plot b/analyses/pluginATLAS/ATLAS_2016_I1448301_EL.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1448301_EL.plot
@@ -0,0 +1,67 @@
+# BEGIN PLOT /ATLAS_2016_I1448301_EL/*
+LogY=1
+LogX=1
+XTwosidedTicks=1
+YTwosidedTicks=1
+LegendAlign=r
+LegendXPos=0.95
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_EL/d0[1-3]
+LogY=0
+LogX=0
+YLabel=Fiducial Cross section [fb]
+XLabel=$N_\text{jets}$
+XCustomMajorTicks=0.5 $\geq0$ 1.5 $=0$
+LegendYPos=0.3
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_EL/d01-x01-y01
+Title=$Z(\to ee)+\gamma$ data
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_EL/d01-x01-y03
+Title=$Z(\to \ell\ell)+\gamma$ data
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_EL/d03-x01-y01
+Title=$Z(\to ee)+\gamma +\gamma$ data
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_EL/d03-x01-y03
+Title=$Z(\to \ell\ell)+\gamma +\gamma$ data
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_EL/d05-x01-y01
+Title=$N_\text{jets} \ge 0$
+XLabel=$E_\text{T}^\gamma$ [GeV]
+YLabel=$\text{d}\sigma / \text{d} E_\text{T}^\gamma$ [fb/GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_EL/d06-x01-y01
+Title=$N_\text{jets} = 0$
+XLabel=$E_\text{T}^\gamma$ [GeV]
+YLabel=$\text{d}\sigma / \text{d} E_\text{T}^\gamma$ [fb/GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_EL/d09-x01-y01
+Title=$N_\text{jets} \ge 0$
+XLabel=$m_{\ell\ell\gamma}$ [GeV]
+YLabel=$\text{d}\sigma / \text{d} m_{\ell\ell\gamma}$ [fb/GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_EL/d10-x01-y01
+Title=$N_\text{jets} = 0$
+XLabel=$m_{\ell\ell\gamma}$ [GeV]
+YLabel=$\text{d}\sigma / \text{d} m_{\ell\ell\gamma}$ [fb/GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_EL/d11-x01-y01
+LogX=0
+Title=extended phase space
+XLabel=$N_\text{jets}$
+YLabel=$\text{d}\sigma / \text{d} N_\text{jets}$ [fb]
+XCustomMajorTicks=0.0 $=0$ 1.0 $=1$ 2.0 $=2$ 3.0 $\geq3$
+# END PLOT
+
+
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1448301_EL.yoda b/analyses/pluginATLAS/ATLAS_2016_I1448301_EL.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1448301_EL.yoda
@@ -0,0 +1,117 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_EL/d01-x01-y01
+Path=/REF/ATLAS_2016_I1448301_EL/d01-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	1.510000e+03	8.980535e+01	9.698453e+01
+1.500000e+00	5.000000e-01	5.000000e-01	1.205000e+03	7.968689e+01	8.820998e+01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_EL/d01-x01-y03
+Path=/REF/ATLAS_2016_I1448301_EL/d01-x01-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	1.507000e+03	7.882259e+01	8.381527e+01
+1.500000e+00	5.000000e-01	5.000000e-01	1.189000e+03	6.733498e+01	7.328711e+01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_EL/d03-x01-y01
+Path=/REF/ATLAS_2016_I1448301_EL/d03-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	6.200000e+00	1.174734e+00	1.268858e+00
+1.500000e+00	5.000000e-01	5.000000e-01	4.600000e+00	9.539392e-01	1.081665e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_EL/d03-x01-y03
+Path=/REF/ATLAS_2016_I1448301_EL/d03-x01-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	5.070000e+00	7.853662e-01	8.432082e-01
+1.500000e+00	5.000000e-01	5.000000e-01	3.480000e+00	6.172520e-01	6.790434e-01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_EL/d05-x01-y01
+Path=/REF/ATLAS_2016_I1448301_EL/d05-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.750000e+01	2.500000e+00	2.500000e+00	1.317000e+02	1.052236e+01	1.052236e+01
+2.500000e+01	5.000000e+00	5.000000e+00	4.788000e+01	3.108456e+00	3.108456e+00
+3.500000e+01	5.000000e+00	5.000000e+00	1.523000e+01	8.672946e-01	8.672946e-01
+4.500000e+01	5.000000e+00	5.000000e+00	6.980000e+00	4.167733e-01	4.167733e-01
+5.500000e+01	5.000000e+00	5.000000e+00	3.880000e+00	2.662705e-01	2.662705e-01
+7.000000e+01	1.000000e+01	1.000000e+01	2.142000e+00	1.258769e-01	1.258769e-01
+9.000000e+01	1.000000e+01	1.000000e+01	9.330000e-01	7.723341e-02	7.723341e-02
+1.250000e+02	2.500000e+01	2.500000e+01	3.060000e-01	2.475884e-02	2.475884e-02
+1.750000e+02	2.500000e+01	2.500000e+01	9.520000e-02	1.229675e-02	1.229675e-02
+6.000000e+02	4.000000e+02	4.000000e+02	4.090000e-03	6.276942e-04	6.276942e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_EL/d06-x01-y01
+Path=/REF/ATLAS_2016_I1448301_EL/d06-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.750000e+01	2.500000e+00	2.500000e+00	1.140000e+02	8.910668e+00	8.910668e+00
+2.500000e+01	5.000000e+00	5.000000e+00	3.819000e+01	2.645695e+00	2.645695e+00
+3.500000e+01	5.000000e+00	5.000000e+00	1.106000e+01	7.502666e-01	7.502666e-01
+4.500000e+01	5.000000e+00	5.000000e+00	4.570000e+00	3.224903e-01	3.224903e-01
+5.500000e+01	5.000000e+00	5.000000e+00	2.390000e+00	2.000000e-01	2.000000e-01
+7.000000e+01	1.000000e+01	1.000000e+01	1.298000e+00	9.449339e-02	9.449339e-02
+9.000000e+01	1.000000e+01	1.000000e+01	4.850000e-01	5.162364e-02	5.162364e-02
+1.250000e+02	2.500000e+01	2.500000e+01	1.490000e-01	1.702939e-02	1.702939e-02
+1.750000e+02	2.500000e+01	2.500000e+01	3.690000e-02	7.571658e-03	7.571658e-03
+6.000000e+02	4.000000e+02	4.000000e+02	1.670000e-03	3.584690e-04	3.584690e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_EL/d09-x01-y01
+Path=/REF/ATLAS_2016_I1448301_EL/d09-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+6.800000e+01	1.800000e+01	1.800000e+01	7.730000e-01	1.660873e-01	1.660873e-01
+9.100000e+01	5.000000e+00	5.000000e+00	6.011000e+01	2.999083e+00	2.999083e+00
+1.030000e+02	7.000000e+00	7.000000e+00	8.380000e+00	8.286133e-01	8.286133e-01
+1.225000e+02	1.250000e+01	1.250000e+01	1.248000e+01	1.167262e+00	1.167262e+00
+1.525000e+02	1.750000e+01	1.750000e+01	6.200000e+00	4.947727e-01	4.947727e-01
+1.900000e+02	2.000000e+01	2.000000e+01	2.687000e+00	1.946407e-01	1.946407e-01
+2.400000e+02	3.000000e+01	3.000000e+01	1.088000e+00	8.417244e-02	8.417244e-02
+3.100000e+02	4.000000e+01	4.000000e+01	3.710000e-01	3.361547e-02	3.361547e-02
+4.100000e+02	6.000000e+01	6.000000e+01	1.296000e-01	1.374118e-02	1.374118e-02
+5.550000e+02	8.500000e+01	8.500000e+01	3.180000e-02	3.858756e-03	3.858756e-03
+1.320000e+03	6.800000e+02	6.800000e+02	1.670000e-03	3.088689e-04	3.088689e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_EL/d10-x01-y01
+Path=/REF/ATLAS_2016_I1448301_EL/d10-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+6.800000e+01	1.800000e+01	1.800000e+01	6.300000e-01	1.362975e-01	1.362975e-01
+9.100000e+01	5.000000e+00	5.000000e+00	4.975000e+01	2.789767e+00	2.789767e+00
+1.030000e+02	7.000000e+00	7.000000e+00	7.060000e+00	7.558439e-01	7.558439e-01
+1.225000e+02	1.250000e+01	1.250000e+01	1.031000e+01	9.884331e-01	9.884331e-01
+1.525000e+02	1.750000e+01	1.750000e+01	4.640000e+00	3.929377e-01	3.929377e-01
+1.900000e+02	2.000000e+01	2.000000e+01	1.847000e+00	1.502332e-01	1.502332e-01
+2.400000e+02	3.000000e+01	3.000000e+01	7.570000e-01	6.260990e-02	6.260990e-02
+3.100000e+02	4.000000e+01	4.000000e+01	2.060000e-01	2.729469e-02	2.729469e-02
+4.100000e+02	6.000000e+01	6.000000e+01	6.260000e-02	9.822932e-03	9.822932e-03
+5.550000e+02	8.500000e+01	8.500000e+01	1.550000e-02	2.459675e-03	2.459675e-03
+1.320000e+03	6.800000e+02	6.800000e+02	7.730000e-04	1.929171e-04	1.929171e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_EL/d11-x01-y01
+Path=/REF/ATLAS_2016_I1448301_EL/d11-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+0.000000e+00	5.000000e-01	5.000000e-01	1.193300e+03	7.649634e+01	7.649634e+01
+1.000000e+00	5.000000e-01	5.000000e-01	2.337000e+02	2.410498e+01	2.410498e+01
+2.000000e+00	5.000000e-01	5.000000e-01	6.220000e+01	8.860023e+00	8.860023e+00
+3.000000e+00	5.000000e-01	5.000000e-01	1.970000e+01	4.401136e+00	4.401136e+00
+END YODA_SCATTER2D
+
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1448301_MU.info b/analyses/pluginATLAS/ATLAS_2016_I1448301_MU.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1448301_MU.info
@@ -0,0 +1,59 @@
+Name: ATLAS_2016_I1448301_MU
+Year: 2016
+Summary: Zg(g) cross sections at 8 TeV
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1448301
+Status: VALIDATED
+Authors:
+ - Hulin Wang <Hulin.Wang@cern.ch>
+ - Evgeny Soldatov <Evgeny.Soldatov@cern.ch>
+ - Christian Gutschow <chris.g@cern.ch>
+References:
+  - Phys.Rev. D93 (2016) no.11, 112002
+  - doi:10.1103/PhysRevD.93.112002
+  - arXiv:1604.05232 [hep-ex]
+Keywords:
+ - multiboson
+ - triboson
+ - diphoton
+ - photon
+ - Z
+RunInfo: p + p -> mu+ mu- gamma (gamma) at 8 TeV
+Luminosity_fb: 20.3
+Beams: [p+, p+]
+Energies: [8000]
+PtCuts: [25,25,15] 
+Description:
+  'The production of $Z$ bosons with one or two isolated high-energy photons is studied using pp collisions at $\sqrt{s}=8$ TeV.
+  The analyses use a data sample with an integrated luminosity of 20.3 fb${}^{-1}$ collected by the ATLAS detector during the 
+  2012 LHC data taking. The $Z\gamma$ and $Z\gamma\gamma$ production cross sections are measured with leptonic ($e^+e^-$, 
+  $\mu^+\mu^-$, $\nu\bar{\nu}$) decays of the Z boson, in extended fiducial regions defined in terms of the lepton and photon 
+  acceptance. They are then compared to cross-section predictions from the Standard Model, where the sources of the photons are 
+  radiation off initial-state quarks and radiative Z-boson decay to charged leptons, and from fragmentation of final-state quarks 
+  and gluons into photons. The yields of events with photon transverse energy $E_\text{T}>250$ GeV from $\ell^+\ell^-\gamma$ events 
+  and with $E_\text{T}>400$ GeV from $\nu\bar{\nu}\gamma$ events are used to search for anomalous triple gauge-boson couplings
+  $ZZ\gamma$ and $Z\gamma\gamma$. The yields of events with diphoton invariant mass $m_{\gamma\gamma}>200$ GeV from 
+  $\ell^+\ell^-\gamma\gamma$ events and with $m_{\gamma\gamma}>300$ GeV from $\nu\bar{\nu}\gamma\gamma$ events are used to search 
+  for anomalous quartic gauge-boson couplings $ZZ\gamma\gamma$ and $Z\gamma\gamma\gamma$. No deviations from Standard Model predictions
+  are observed and limits are placed on parameters used to describe anomalous triple and quartic gauge-boson couplings.
+  The lepton channel can be specified by using the relevant plugins (_EL, _MU, _NU). The default plugin uses the electron channel.'
+BibKey: Aad:2016sau
+BibTeX: '@article{Aad:2016sau,
+      author         = "Aad, Georges and others",
+      title          = "{Measurements of $Z\gamma$ and $Z\gamma\gamma$ production
+                        in $pp$ collisions at $\sqrt{s}=$ 8 TeV with the ATLAS
+                        detector}",
+      collaboration  = "ATLAS",
+      journal        = "Phys. Rev.",
+      volume         = "D93",
+      year           = "2016",
+      number         = "11",
+      pages          = "112002",
+      doi            = "10.1103/PhysRevD.93.112002",
+      eprint         = "1604.05232",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2016-049",
+      SLACcitation   = "%%CITATION = ARXIV:1604.05232;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1448301_MU.plot b/analyses/pluginATLAS/ATLAS_2016_I1448301_MU.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1448301_MU.plot
@@ -0,0 +1,67 @@
+# BEGIN PLOT /ATLAS_2016_I1448301_MU/*
+LogY=1
+LogX=1
+XTwosidedTicks=1
+YTwosidedTicks=1
+LegendAlign=r
+LegendXPos=0.95
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_MU/d0[1-3]
+LogY=0
+LogX=0
+YLabel=Fiducial Cross section [fb]
+XLabel=$N_\text{jets}$
+XCustomMajorTicks=0.5 $\geq0$ 1.5 $=0$
+LegendYPos=0.3
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_MU/d01-x01-y02
+Title=$Z(\to \mu\mu)+\gamma$ data
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_MU/d01-x01-y03
+Title=$Z(\to \ell\ell)+\gamma$ data
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_MU/d03-x01-y01
+Title=$Z(\to \mu\mu)+\gamma +\gamma$ data
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_MU/d03-x01-y03
+Title=$Z(\to \ell\ell)+\gamma +\gamma$ data
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_MU/d05-x01-y01
+Title=$N_\text{jets} \ge 0$
+XLabel=$E_\text{T}^\gamma$ [GeV]
+YLabel=$\text{d}\sigma / \text{d} E_\text{T}^\gamma$ [fb/GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_MU/d06-x01-y01
+Title=$N_\text{jets} = 0$
+XLabel=$E_\text{T}^\gamma$ [GeV]
+YLabel=$\text{d}\sigma / \text{d} E_\text{T}^\gamma$ [fb/GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_MU/d09-x01-y01
+Title=$N_\text{jets} \ge 0$
+XLabel=$m_{\ell\ell\gamma}$ [GeV]
+YLabel=$\text{d}\sigma / \text{d} m_{\ell\ell\gamma}$ [fb/GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_MU/d10-x01-y01
+Title=$N_\text{jets} = 0$
+XLabel=$m_{\ell\ell\gamma}$ [GeV]
+YLabel=$\text{d}\sigma / \text{d} m_{\ell\ell\gamma}$ [fb/GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_MU/d11-x01-y01
+LogX=0
+Title=extended phase space
+XLabel=$N_\text{jets}$
+YLabel=$\text{d}\sigma / \text{d} N_\text{jets}$ [fb]
+XCustomMajorTicks=0.0 $=0$ 1.0 $=1$ 2.0 $=2$ 3.0 $\geq3$
+# END PLOT
+
+
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1448301_MU.yoda b/analyses/pluginATLAS/ATLAS_2016_I1448301_MU.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1448301_MU.yoda
@@ -0,0 +1,117 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_MU/d01-x01-y02
+Path=/REF/ATLAS_2016_I1448301_MU/d01-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	1.507000e+03	7.925907e+01	8.422589e+01
+1.500000e+00	5.000000e-01	5.000000e-01	1.188000e+03	6.780118e+01	7.278049e+01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_MU/d01-x01-y03
+Path=/REF/ATLAS_2016_I1448301_MU/d01-x01-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	1.507000e+03	7.882259e+01	8.381527e+01
+1.500000e+00	5.000000e-01	5.000000e-01	1.189000e+03	6.733498e+01	7.328711e+01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_MU/d03-x01-y02
+Path=/REF/ATLAS_2016_I1448301_MU/d03-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	3.830000e+00	9.738070e-01	1.066677e+00
+1.500000e+00	5.000000e-01	5.000000e-01	2.380000e+00	7.435725e-01	8.392258e-01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_MU/d03-x01-y03
+Path=/REF/ATLAS_2016_I1448301_MU/d03-x01-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	5.070000e+00	7.853662e-01	8.432082e-01
+1.500000e+00	5.000000e-01	5.000000e-01	3.480000e+00	6.172520e-01	6.790434e-01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_MU/d05-x01-y01
+Path=/REF/ATLAS_2016_I1448301_MU/d05-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.750000e+01	2.500000e+00	2.500000e+00	1.317000e+02	1.052236e+01	1.052236e+01
+2.500000e+01	5.000000e+00	5.000000e+00	4.788000e+01	3.108456e+00	3.108456e+00
+3.500000e+01	5.000000e+00	5.000000e+00	1.523000e+01	8.672946e-01	8.672946e-01
+4.500000e+01	5.000000e+00	5.000000e+00	6.980000e+00	4.167733e-01	4.167733e-01
+5.500000e+01	5.000000e+00	5.000000e+00	3.880000e+00	2.662705e-01	2.662705e-01
+7.000000e+01	1.000000e+01	1.000000e+01	2.142000e+00	1.258769e-01	1.258769e-01
+9.000000e+01	1.000000e+01	1.000000e+01	9.330000e-01	7.723341e-02	7.723341e-02
+1.250000e+02	2.500000e+01	2.500000e+01	3.060000e-01	2.475884e-02	2.475884e-02
+1.750000e+02	2.500000e+01	2.500000e+01	9.520000e-02	1.229675e-02	1.229675e-02
+6.000000e+02	4.000000e+02	4.000000e+02	4.090000e-03	6.276942e-04	6.276942e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_MU/d06-x01-y01
+Path=/REF/ATLAS_2016_I1448301_MU/d06-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.750000e+01	2.500000e+00	2.500000e+00	1.140000e+02	8.910668e+00	8.910668e+00
+2.500000e+01	5.000000e+00	5.000000e+00	3.819000e+01	2.645695e+00	2.645695e+00
+3.500000e+01	5.000000e+00	5.000000e+00	1.106000e+01	7.502666e-01	7.502666e-01
+4.500000e+01	5.000000e+00	5.000000e+00	4.570000e+00	3.224903e-01	3.224903e-01
+5.500000e+01	5.000000e+00	5.000000e+00	2.390000e+00	2.000000e-01	2.000000e-01
+7.000000e+01	1.000000e+01	1.000000e+01	1.298000e+00	9.449339e-02	9.449339e-02
+9.000000e+01	1.000000e+01	1.000000e+01	4.850000e-01	5.162364e-02	5.162364e-02
+1.250000e+02	2.500000e+01	2.500000e+01	1.490000e-01	1.702939e-02	1.702939e-02
+1.750000e+02	2.500000e+01	2.500000e+01	3.690000e-02	7.571658e-03	7.571658e-03
+6.000000e+02	4.000000e+02	4.000000e+02	1.670000e-03	3.584690e-04	3.584690e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_MU/d09-x01-y01
+Path=/REF/ATLAS_2016_I1448301_MU/d09-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+6.800000e+01	1.800000e+01	1.800000e+01	7.730000e-01	1.660873e-01	1.660873e-01
+9.100000e+01	5.000000e+00	5.000000e+00	6.011000e+01	2.999083e+00	2.999083e+00
+1.030000e+02	7.000000e+00	7.000000e+00	8.380000e+00	8.286133e-01	8.286133e-01
+1.225000e+02	1.250000e+01	1.250000e+01	1.248000e+01	1.167262e+00	1.167262e+00
+1.525000e+02	1.750000e+01	1.750000e+01	6.200000e+00	4.947727e-01	4.947727e-01
+1.900000e+02	2.000000e+01	2.000000e+01	2.687000e+00	1.946407e-01	1.946407e-01
+2.400000e+02	3.000000e+01	3.000000e+01	1.088000e+00	8.417244e-02	8.417244e-02
+3.100000e+02	4.000000e+01	4.000000e+01	3.710000e-01	3.361547e-02	3.361547e-02
+4.100000e+02	6.000000e+01	6.000000e+01	1.296000e-01	1.374118e-02	1.374118e-02
+5.550000e+02	8.500000e+01	8.500000e+01	3.180000e-02	3.858756e-03	3.858756e-03
+1.320000e+03	6.800000e+02	6.800000e+02	1.670000e-03	3.088689e-04	3.088689e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_MU/d10-x01-y01
+Path=/REF/ATLAS_2016_I1448301_MU/d10-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+6.800000e+01	1.800000e+01	1.800000e+01	6.300000e-01	1.362975e-01	1.362975e-01
+9.100000e+01	5.000000e+00	5.000000e+00	4.975000e+01	2.789767e+00	2.789767e+00
+1.030000e+02	7.000000e+00	7.000000e+00	7.060000e+00	7.558439e-01	7.558439e-01
+1.225000e+02	1.250000e+01	1.250000e+01	1.031000e+01	9.884331e-01	9.884331e-01
+1.525000e+02	1.750000e+01	1.750000e+01	4.640000e+00	3.929377e-01	3.929377e-01
+1.900000e+02	2.000000e+01	2.000000e+01	1.847000e+00	1.502332e-01	1.502332e-01
+2.400000e+02	3.000000e+01	3.000000e+01	7.570000e-01	6.260990e-02	6.260990e-02
+3.100000e+02	4.000000e+01	4.000000e+01	2.060000e-01	2.729469e-02	2.729469e-02
+4.100000e+02	6.000000e+01	6.000000e+01	6.260000e-02	9.822932e-03	9.822932e-03
+5.550000e+02	8.500000e+01	8.500000e+01	1.550000e-02	2.459675e-03	2.459675e-03
+1.320000e+03	6.800000e+02	6.800000e+02	7.730000e-04	1.929171e-04	1.929171e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_MU/d11-x01-y01
+Path=/REF/ATLAS_2016_I1448301_MU/d11-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+0.000000e+00	5.000000e-01	5.000000e-01	1.193300e+03	7.649634e+01	7.649634e+01
+1.000000e+00	5.000000e-01	5.000000e-01	2.337000e+02	2.410498e+01	2.410498e+01
+2.000000e+00	5.000000e-01	5.000000e-01	6.220000e+01	8.860023e+00	8.860023e+00
+3.000000e+00	5.000000e-01	5.000000e-01	1.970000e+01	4.401136e+00	4.401136e+00
+END YODA_SCATTER2D
+
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1448301_NU.info b/analyses/pluginATLAS/ATLAS_2016_I1448301_NU.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1448301_NU.info
@@ -0,0 +1,59 @@
+Name: ATLAS_2016_I1448301_NU
+Year: 2016
+Summary: Zg(g) cross sections at 8 TeV
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1448301
+Status: VALIDATED
+Authors:
+ - Hulin Wang <Hulin.Wang@cern.ch>
+ - Evgeny Soldatov <Evgeny.Soldatov@cern.ch>
+ - Christian Gutschow <chris.g@cern.ch>
+References:
+  - Phys.Rev. D93 (2016) no.11, 112002
+  - doi:10.1103/PhysRevD.93.112002
+  - arXiv:1604.05232 [hep-ex]
+Keywords:
+ - multiboson
+ - triboson
+ - diphoton
+ - photon
+ - Z
+RunInfo: p + p -> MET gamma (gamma) at 8 TeV
+Luminosity_fb: 20.3
+Beams: [p+, p+]
+Energies: [8000]
+PtCuts: [25,25,15] 
+Description:
+  'The production of $Z$ bosons with one or two isolated high-energy photons is studied using pp collisions at $\sqrt{s}=8$ TeV.
+  The analyses use a data sample with an integrated luminosity of 20.3 fb${}^{-1}$ collected by the ATLAS detector during the 
+  2012 LHC data taking. The $Z\gamma$ and $Z\gamma\gamma$ production cross sections are measured with leptonic ($e^+e^-$, 
+  $\mu^+\mu^-$, $\nu\bar{\nu}$) decays of the Z boson, in extended fiducial regions defined in terms of the lepton and photon 
+  acceptance. They are then compared to cross-section predictions from the Standard Model, where the sources of the photons are 
+  radiation off initial-state quarks and radiative Z-boson decay to charged leptons, and from fragmentation of final-state quarks 
+  and gluons into photons. The yields of events with photon transverse energy $E_\text{T}>250$ GeV from $\ell^+\ell^-\gamma$ events 
+  and with $E_\text{T}>400$ GeV from $\nu\bar{\nu}\gamma$ events are used to search for anomalous triple gauge-boson couplings
+  $ZZ\gamma$ and $Z\gamma\gamma$. The yields of events with diphoton invariant mass $m_{\gamma\gamma}>200$ GeV from 
+  $\ell^+\ell^-\gamma\gamma$ events and with $m_{\gamma\gamma}>300$ GeV from $\nu\bar{\nu}\gamma\gamma$ events are used to search 
+  for anomalous quartic gauge-boson couplings $ZZ\gamma\gamma$ and $Z\gamma\gamma\gamma$. No deviations from Standard Model predictions
+  are observed and limits are placed on parameters used to describe anomalous triple and quartic gauge-boson couplings.
+  The lepton channel can be specified by using the relevant plugins (_EL, _MU, _NU). The default plugin uses the electron channel.'
+BibKey: Aad:2016sau
+BibTeX: '@article{Aad:2016sau,
+      author         = "Aad, Georges and others",
+      title          = "{Measurements of $Z\gamma$ and $Z\gamma\gamma$ production
+                        in $pp$ collisions at $\sqrt{s}=$ 8 TeV with the ATLAS
+                        detector}",
+      collaboration  = "ATLAS",
+      journal        = "Phys. Rev.",
+      volume         = "D93",
+      year           = "2016",
+      number         = "11",
+      pages          = "112002",
+      doi            = "10.1103/PhysRevD.93.112002",
+      eprint         = "1604.05232",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2016-049",
+      SLACcitation   = "%%CITATION = ARXIV:1604.05232;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1448301_NU.plot b/analyses/pluginATLAS/ATLAS_2016_I1448301_NU.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1448301_NU.plot
@@ -0,0 +1,34 @@
+# BEGIN PLOT /ATLAS_2016_I1448301_NU/*
+LogY=0
+LogX=0
+XTwosidedTicks=1
+YTwosidedTicks=1
+LegendAlign=r
+LegendXPos=0.95
+YLabel=Fiducial Cross section [fb]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_NU/d02
+Title=$Z(\to \nu\nu)+\gamma$ data
+XCustomMajorTicks=0.5 $\geq0$ 1.5 $=0$
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_NU/d04
+Title=$Z(\to \nu\nu)+\gamma +\gamma$ data
+XCustomMajorTicks=0.5 $\geq0$ 1.5 $=0$
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_NU/d07-x01-y01
+LogY=1
+Title=$N_\text{jets} \ge 0$
+XLabel=$E_\text{T}^\gamma$ [GeV]
+YLabel=$\text{d}\sigma / \text{d} E_\text{T}^\gamma$ [fb/GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1448301_NU/d08-x01-y01
+LogY=1
+Title=$N_\text{jets} = 0$
+XLabel=$E_\text{T}^\gamma$ [GeV]
+YLabel=$\text{d}\sigma / \text{d} E_\text{T}^\gamma$ [fb/GeV]
+# END PLOT
+
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1448301_NU.yoda b/analyses/pluginATLAS/ATLAS_2016_I1448301_NU.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1448301_NU.yoda
@@ -0,0 +1,40 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_NU/d02-x01-y01
+Path=/REF/ATLAS_2016_I1448301_NU/d02-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	6.800000e+01	3.226454e+01	3.325658e+01
+1.500000e+00	5.000000e-01	5.000000e-01	4.300000e+01	1.024695e+01	1.024695e+01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_NU/d04-x01-y01
+Path=/REF/ATLAS_2016_I1448301_NU/d04-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	2.500000e+00	1.424781e+00	1.489966e+00
+1.500000e+00	5.000000e-01	5.000000e-01	1.180000e+00	6.588627e-01	7.079548e-01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_NU/d07-x01-y01
+Path=/REF/ATLAS_2016_I1448301_NU/d07-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.400000e+02	1.000000e+01	1.000000e+01	1.270000e+00	4.272002e-01	4.272002e-01
+1.750000e+02	2.500000e+01	2.500000e+01	3.920000e-01	2.369135e-01	2.369135e-01
+2.750000e+02	7.500000e+01	7.500000e+01	9.500000e-02	5.651548e-02	5.651548e-02
+6.750000e+02	3.250000e+02	3.250000e+02	3.400000e-03	2.109502e-03	2.109502e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1448301_NU/d08-x01-y01
+Path=/REF/ATLAS_2016_I1448301_NU/d08-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.400000e+02	1.000000e+01	1.000000e+01	8.250000e-01	1.632483e-01	1.632483e-01
+1.750000e+02	2.500000e+01	2.500000e+01	2.980000e-01	6.082763e-02	6.082763e-02
+2.750000e+02	7.500000e+01	7.500000e+01	4.670000e-02	8.485281e-03	8.485281e-03
+6.750000e+02	3.250000e+02	3.250000e+02	3.380000e-04	2.776833e-04	2.776833e-04
+END YODA_SCATTER2D
+
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1449082.cc b/analyses/pluginATLAS/ATLAS_2016_I1449082.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1449082.cc
@@ -0,0 +1,319 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/IdentifiedFinalState.hh"
+#include "Rivet/Projections/PromptFinalState.hh"
+#include "Rivet/Projections/VetoedFinalState.hh"
+#include "Rivet/Projections/DressedLeptons.hh"
+#include "Rivet/Projections/FastJets.hh"
+
+namespace Rivet {
+
+
+  /// Charge asymmetry in top quark pair production in dilepton channel
+  class ATLAS_2016_I1449082 : public Analysis {
+  public:
+
+    const double MW = 80.300*GeV;
+    const double MTOP = 172.5*GeV;
+
+    enum MeasureType { kInclMeas, kmttMeas, kbetaMeas, kptMeas, kNmeas };
+    const size_t kNbins = 2;
+    const double bins[kNmeas][3];
+    const string measStr[kNmeas] = {"incl","mtt","beta","ptt"};
+    const string rangeStr[kNmeas][2];
+
+
+    /// Constructor
+    //DEFAULT_RIVET_ANALYSIS_CTOR(ATLAS_2016_I1449082);
+    ATLAS_2016_I1449082() : Analysis("ATLAS_2016_I1449082"),
+                            // inclusive (dummy), mtt [GeV], beta, pTtt
+                            bins{ { 0., 1., 2. }, { 0., 500., 2000.}, { 0., 0.6 , 1.0}, { 0., 30. , 1000.} },
+                            rangeStr{ { "0_1", "1_2"}, { "0_500", "500_2000"}, { "0_0.6", "0.6_1.0"}, { "0_30" , "30_1000"} }
+    {  }
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      // Cuts
+      const Cut eta_full = Cuts::abseta < 5.0;
+      const Cut lep_cuts = Cuts::abseta < 2.5 && Cuts::pT > 25*GeV;
+      // All final state particles
+      FinalState fs(eta_full);
+      // Get photons to dress leptons
+      IdentifiedFinalState photons(fs, PID::PHOTON);
+
+
+
+      // Electron projections
+      // ---------------------
+      // Electron/muons are defined from electron/muon and photons within a cone of DR = 0.1.
+      // No isolation condition is imposed. The parent of the electron/muon is required not to be a hadron or quark.
+      IdentifiedFinalState el_id(fs, {PID::ELECTRON,-PID::ELECTRON});
+      PromptFinalState electrons(el_id);
+      electrons.acceptTauDecays(true);
+      // Electron dressing
+      DressedLeptons dressedelectrons(photons, electrons, 0.1, lep_cuts, true, true);
+      declare(dressedelectrons, "dressedelectrons");
+      DressedLeptons dressedelectrons_full(photons, electrons, 0.1, eta_full, true, true);
+
+      // Muon projections
+      // ---------------------
+      IdentifiedFinalState mu_id(fs, {PID::MUON,-PID::MUON});
+      PromptFinalState muons(mu_id);
+      muons.acceptTauDecays(true);
+      // Muon dressing
+      DressedLeptons dressedmuons(photons, muons, 0.1, lep_cuts, true, true);
+      declare(dressedmuons, "dressedmuons");
+      DressedLeptons dressedmuons_full(photons, muons, 0.1, eta_full, true, true);
+
+      // Neutrino projections
+      // ---------------------
+      // Missing ET is calculated as the 4–vector sum of neutrinos from W/Z-boson decays. Tau decays are
+      // included. A neutrino is treated as a detectable particle and is selected for consideration in the same
+      // way as electrons or muons, i.e. the parent is required not to be a hadron or quark (u − b).
+      IdentifiedFinalState nu_id;
+      nu_id.acceptNeutrinos();
+      PromptFinalState neutrinos(nu_id);
+      neutrinos.acceptTauDecays(true);
+      declare(neutrinos, "neutrinos");
+
+      // Jets projections
+      // ---------------------
+      // Jets are defined with the anti-kt algorithm, clustering all stable particles excluding the electrons,
+      // muons, neutrinos, and photons used in the definition of the selected leptons.
+      VetoedFinalState vfs(fs);
+      vfs.addVetoOnThisFinalState(dressedelectrons_full);
+      vfs.addVetoOnThisFinalState(dressedmuons_full);
+      vfs.addVetoOnThisFinalState(neutrinos);
+      declare(FastJets(vfs, FastJets::ANTIKT, 0.4), "Jets");
+
+      // Book histograms
+      _h_dEta      = bookHisto1D(1, 1, 1);
+      _h_dY        = bookHisto1D(2, 1, 1);
+      for (size_t iM = 0; iM < kNmeas; ++iM) {
+        _h_Acll[iM] = bookScatter2D(3+iM, 1, 1);
+        _h_Actt[iM] = bookScatter2D(7+iM, 1, 1);
+      }
+      for (size_t iM = 0; iM < kNmeas; ++iM) {
+        for (size_t iB = 0; iB < kNbins; ++iB) {
+          _h_dEta_asym[iM][iB] = bookHisto1D( "dEta_asym_" + measStr[iM] + "_bin" + rangeStr[iM][iB],  2,  -10., 10.);
+          _h_dY_asym  [iM][iB] = bookHisto1D( "dY_asym_"   + measStr[iM] + "_bin" + rangeStr[iM][iB],  2,  -10., 10.);
+        }
+      }
+
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      // Get the electrons and muons
+      const vector<DressedLepton> dressedelectrons = apply<DressedLeptons>(event, "dressedelectrons").dressedLeptons();
+      const vector<DressedLepton> dressedmuons     = apply<DressedLeptons>(event, "dressedmuons").dressedLeptons();
+      const vector<DressedLepton> leptons = dressedelectrons + dressedmuons;
+      // Require at least 2 leptons in the event
+      if (leptons.size() < 2) vetoEvent;
+
+      // Get the neutrinos
+      const Particles neutrinos = apply<PromptFinalState>(event, "neutrinos").particlesByPt();
+      // Require at least 2 neutrinos in the event (ick)
+      if (neutrinos.size() < 2)  vetoEvent;
+
+      // Get jets and apply selection
+      const Jets jets = apply<FastJets>(event, "Jets").jetsByPt(Cuts::pT > 25*GeV && Cuts::abseta < 2.5);
+      // Require at least 2 jets in the event
+      if (jets.size() < 2)  vetoEvent;
+
+      // Remaining selections
+      // Events where leptons and jets overlap, within dR = 0.4, are rejected.
+      for (const DressedLepton& lepton : leptons) {
+        if (any(jets, deltaRLess(lepton, 0.4))) vetoEvent;
+      }
+
+      // Construct pseudo-tops
+      // Exactly 2 opposite-sign leptons are required (e/mu)
+      if (leptons.size() != 2) vetoEvent;
+      if ( (leptons[0].charge() * leptons[1].charge()) > 0.) vetoEvent;
+      const FourMomentum lep_p = (leptons[0].charge3() > 0) ? leptons[0] : leptons[1];
+      const FourMomentum lep_n = (leptons[0].charge3() > 0) ? leptons[1] : leptons[0];
+
+      // Only the 2 leading pT selected neutrinos are considered
+      const FourMomentum nu1 = neutrinos[0].momentum();
+      const FourMomentum nu2 = neutrinos[1].momentum();
+
+      // Two jets correspond to the two leading jets in the event.
+      // If there is any b-tagged jet in the event, then the b-tagged jets
+      // are preferentially selected over the non-tagged jets without taking into account its pT.
+      // A jet is a b–jet if any B–hadron is included in the jet.
+      // Only B-hadrons with an initial pT > 5 GeV are considered.
+      Jets bjets, lightjets;
+      for (const Jet& jet : jets) {
+        (jet.bTagged(Cuts::pT > 5*GeV) ? bjets : lightjets) += jet;
+      }
+      // Already sorted by construction, since jets is sorted by decreasing pT
+      // std::sort(bjets.begin()    , bjets.end()    , cmpMomByPt);
+      // std::sort(lightjets.begin(), lightjets.end(), cmpMomByPt);
+
+      // Initially take 2 highest pT jets
+      FourMomentum bjet1 = jets[0];
+      FourMomentum bjet2 = jets[1];
+      if (!bjets.empty()) {
+        bjet1 = bjets[0];
+        bjet2 = (bjets.size() > 1) ? bjets[1] : lightjets[0]; //< We should have a light jet because >=2 jets requirement
+      } else {
+        // No btagged jets --> should have >= 2 light jets
+        bjet1 = lightjets[0];
+        bjet2 = lightjets[1];
+      }
+
+      // Construct pseudo-W bosons from lepton-neutrino combinations
+      // Minimize the difference between the mass computed from each lepton-neutrino combination and the W boson mass
+      const double massDiffW1 = fabs( (nu1 + lep_p).mass() - MW ) + fabs( (nu2 + lep_n).mass() - MW );
+      const double massDiffW2 = fabs( (nu1 + lep_n).mass() - MW ) + fabs( (nu2 + lep_p).mass() - MW );
+      const FourMomentum Wp = (massDiffW1 < massDiffW2) ? nu1+lep_p : nu2+lep_p;
+      const FourMomentum Wn = (massDiffW1 < massDiffW2) ? nu2+lep_n : nu1+lep_n;
+
+      // Construct pseudo-tops from jets and pseudo-W bosons
+      // Minimize the difference between the mass computed from each W-boson and b-jet combination and the top mass
+      const double massDiffT1 = fabs( (Wp+bjet1).mass()*GeV - MTOP ) + fabs( (Wn+bjet2).mass()*GeV - MTOP );
+      const double massDiffT2 = fabs( (Wp+bjet2).mass()*GeV - MTOP ) + fabs( (Wn+bjet1).mass()*GeV - MTOP );
+      const FourMomentum top_p = (massDiffT1 < massDiffT2) ? Wp+bjet1 : Wp+bjet2;
+      const FourMomentum top_n = (massDiffT1 < massDiffT2) ? Wn+bjet2 : Wn+bjet1;
+
+      // Calculate d|eta|, d|y|, etc.
+      double dEta = lep_p.abseta() - lep_n.abseta();
+      double dY   = top_p.absrapidity() - top_n.absrapidity();
+      double mtt  = (top_p + top_n).mass()*GeV;
+      double beta = fabs( (top_p + top_n).pz() ) / (top_p + top_n).E();
+      double pttt = (top_p + top_n).pt()*GeV;
+
+      // Fill histos, counters
+      const double weight = event.weight();
+      _h_dEta->fill(dEta, weight);
+      _h_dY  ->fill(dY  , weight);
+      // Histos for inclusive and differential asymmetries
+      int mttBinID  = getBinID(kmttMeas , mtt);
+      int betaBinID = getBinID(kbetaMeas, beta);
+      int ptttBinID = getBinID(kptMeas  , pttt);
+      for (int iM = 0; iM < kNmeas; ++iM) {
+        int binID = -1;
+        switch (iM) {
+          case kInclMeas : binID = 0;         break;
+          case kmttMeas  : binID = mttBinID ; break;
+          case kbetaMeas : binID = betaBinID; break;
+          case kptMeas   : binID = ptttBinID; break;
+          default: binID = -1; break;
+        }
+        if (binID >= 0) {
+          _h_dY_asym  [iM][binID] ->fill(dY  , weight);
+          _h_dEta_asym[iM][binID] ->fill(dEta, weight);
+        }
+      }
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+
+      // Calculate charge asymmetries and fill them to hists
+      // Just for cross-check, calculate asymmetries from original dEta/dY histos
+      double asym = 0, err = 0;
+      calcAsymAndError(_h_dEta, asym, err);
+      MSG_INFO("Lepton inclusive asymmetry from histo:  = " << asym << " +- " << err );
+      calcAsymAndError(_h_dY, asym, err);
+      MSG_INFO("ttbar inclusive asymmetry from histo:  = "  << asym << " +- " << err );
+
+      // dEta/dY distributions: normalize to unity
+      normalize(_h_dEta);
+      normalize(_h_dY);
+
+      // Build asymm scatters
+      for (size_t iM = 0; iM < kNmeas; ++iM) {
+        for (size_t iB = 0; iB < kNbins; ++iB) {
+          removeAnalysisObject(_h_dEta_asym[iM][iB]);
+          removeAnalysisObject(_h_dY_asym[iM][iB]);
+
+          // Only one bin for inclusive measurement
+          if ( (iM == kInclMeas) && (iB != 0)) continue;
+
+          calcAsymAndError(_h_dEta_asym[iM][iB], asym, err);
+          _h_Acll[iM]->addPoint( (bins[iM][iB+1] + bins[iM][iB])/2., asym, (bins[iM][iB+1] - bins[iM][iB])/2., err);
+
+          calcAsymAndError(_h_dY_asym[iM][iB], asym, err);
+          _h_Actt[iM]->addPoint( (bins[iM][iB+1] + bins[iM][iB])/2., asym, (bins[iM][iB+1] - bins[iM][iB])/2., err);
+        }
+      }
+    }
+
+    //@}
+
+
+  private:
+
+    void calcAsymAndError(Histo1DPtr hist, double& asym, double& err)  {
+
+      int nBins = hist->numBins();
+      if (nBins % 2 != 0) {
+      	asym = -999; err = -999.;
+        return;
+      }
+
+      double Nneg  = 0.;
+      double Npos  = 0.;
+      double dNneg = 0.;
+      double dNpos = 0.;
+      for (int iB = 0; iB < nBins; ++iB) {
+        if (iB < nBins/2) {
+          Nneg  += hist->bin(iB).sumW();
+          dNneg += hist->bin(iB).sumW2();
+        } else {
+          Npos  += hist->bin(iB).sumW();
+          dNpos += hist->bin(iB).sumW2();
+        }
+      }
+      dNneg = sqrt(dNneg);
+      dNpos = sqrt(dNpos);
+      asym = (Npos + Nneg) != 0.0 ? (Npos - Nneg) / (Npos + Nneg) : -999.;
+
+      const double Ntot = Npos + Nneg;
+      const double Ntot2 = Ntot * Ntot;
+      const double dNpos2 = dNpos * dNpos;
+      const double dNneg2 = dNneg * dNneg;
+      err = Ntot2 != 0. ? 2. * sqrt( (dNneg2 * Npos * Npos + dNpos2 * Nneg * Nneg) / (Ntot2 * Ntot2)) : -999.;
+    }
+
+
+    int getBinID(MeasureType type, double value)  {
+      /// @todo Use Rivet binIndex() function
+      for (size_t iBin = 0; iBin < kNbins; ++iBin) {
+        if (value <= bins[type][iBin+1]) return iBin;
+      }
+      return -1;
+    }
+
+
+    /// @name Histograms
+    //@{
+    Histo1DPtr _h_dEta;
+    Histo1DPtr _h_dY;
+    Scatter2DPtr _h_Actt[kNmeas];
+    Scatter2DPtr _h_Acll[kNmeas];
+    // Histograms to calculate the asymmetries from
+    /// @todo Use /TMP histos?
+    Histo1DPtr _h_dEta_asym[kNmeas][2];
+    Histo1DPtr _h_dY_asym  [kNmeas][2];
+    //@}
+
+    // Not-scaled histos
+    Histo1DPtr _h_dEta_notscaled, _h_dY_notscaled;
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(ATLAS_2016_I1449082);
+}
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1449082.info b/analyses/pluginATLAS/ATLAS_2016_I1449082.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1449082.info
@@ -0,0 +1,52 @@
+Name: ATLAS_2016_I1449082
+Year: 2016
+Summary: Charge asymmetry in top quark pair production in dilepton channel
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1449082
+Status: VALIDATED
+Authors:
+ - Roman Lysak <roman.lysak@cern.ch>
+References:
+ - Phys.Rev. D94 (2016) no.3, 032006
+ - doi:10.1103/PhysRevD.94.032006
+ -  arXiv:1604.05538 [hep-ex]
+Keywords:
+ - ttbar
+ - asymmetry
+RunInfo:
+  pp --> top + antitop events at 8 TeV
+Luminosity_fb: 20.3
+Beams: [p+, p+]
+Energies: [8000]
+PtCuts: [25]
+Description:
+  'Measurements of the top-antitop quark pair production charge asymmetry in the dilepton channel are presented using data
+  corresponding to an integrated luminosity of $20.3\;\text{fb}^{-1}$ from $pp$ collisions at a center-of-mass energy of
+  $\sqrt{s} = 8$ TeV collected with the ATLAS detector at the Large Hadron Collider at CERN. Inclusive and differential
+  measurements as a function of the invariant mass, transverse momentum, and longitudinal boost of the $t\bar{t}$ system are
+  performed both in the full phase space and in a fiducial phase space closely matching the detector acceptance (at least
+  2 leptons and 2 jets with $p_\text{T} > 25$ GeV and $|\eta| < 2.5$). Two observables are studied: $A_C^{\ell\ell}$ based
+  on the selected leptons and $A_C^{t\bar{t}}$ based on the reconstructed $t\bar{t}$ final state. The unfolded distributions
+  of $\Delta|\eta| = |\eta|_{\ell^+} - |\eta|_{\ell^-}$ and $\Delta|y| = |y|_\text{top} - |y|_\text{antitop}$ are provided.
+  USERS SHOULD NOTE THAT EXPLICIT RECONSTRUCTION OF INDIVIDUAL STANDARD MODEL NEUTRINOS IS USED IN THIS ANALYSIS ROUTINE
+  TO MATCH THE MONTE-CARLO-BASED CORRECTION TO THE FIDUCIAL REGION APPLIED IN THE PAPER.'
+BibKey: Aad:2016ove
+BibTeX: '@article{Aad:2016ove,
+      author         = "Aad, Georges and others",
+      title          = "{Measurements of the charge asymmetry in top-quark pair
+                        production in the dilepton final state at $\sqrt{s}=8$
+                         TeV with the ATLAS detector}",
+      collaboration  = "ATLAS",
+      journal        = "Phys. Rev.",
+      volume         = "D94",
+      year           = "2016",
+      number         = "3",
+      pages          = "032006",
+      doi            = "10.1103/PhysRevD.94.032006",
+      eprint         = "1604.05538",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2016-051",
+      SLACcitation   = "%%CITATION = ARXIV:1604.05538;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1449082.plot b/analyses/pluginATLAS/ATLAS_2016_I1449082.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1449082.plot
@@ -0,0 +1,67 @@
+# BEGIN PLOT /ATLAS_2016_I1449082/d.*
+LogY=0
+XTwosidedTicks=1
+YTwosidedTicks=1
+RatioPlotYMax=1.9
+RatioPlotYMin=0.1
+LeftMargin=1.6
+LegendAlign=r
+# END PLOT 
+
+# BEGIN PLOT /ATLAS_2016_I1449082/d01-x01-y01
+Title=$\Delta |\eta|  = |\eta|_{\ell^+} - |\eta|_{\ell^-} $
+XLabel=$\Delta |\eta|$ 
+YLabel=$1/\sigma  \text{d}\sigma / \text{d}\Delta |\eta|$
+RatioPlotYMax=1.15
+RatioPlotYMin=0.9
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1449082/d02-x01-y01
+Title=$\Delta |y| = |y|_{\rm top} - |y|_{\rm antitop}$
+XLabel=$\Delta |y|$
+YLabel=$1/\sigma  \text{d}\sigma / \text{d}\Delta |y|$
+RatioPlotYMax=1.15
+RatioPlotYMin=0.9
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1449082/d03-x01-y01
+XCustomMajorTicks=0.5	8~TeV
+YLabel=$A_C^{\ell\ell}$
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1449082/d04-x01-y01
+XLabel=$m_{t\bar{t}}$ [GeV] 
+YLabel=$A_C^{\ell\ell}$
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1449082/d05-x01-y01
+XLabel=$\beta_z^{t\bar{t}}$ 
+YLabel=$A_C^{\ell\ell}$
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1449082/d06-x01-y01
+XLabel=$p_\text{T}^{t\bar{t}}$ [GeV] 
+YLabel=$A_C^{\ell\ell}$
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1449082/d07-x01-y01
+XCustomMajorTicks=0.5	8~TeV
+YLabel=$A_C^{t\bar{t}}$
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1449082/d08-x01-y01
+XLabel=$m_{t\bar{t}}$ [GeV] 
+YLabel=$A_C^{t\bar{t}}$
+# + any additional plot settings you might like, see make-plots documentation
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1449082/d09-x01-y01
+XLabel=$\beta_z^{t\bar{t}}$ 
+YLabel=$A_C^{t\bar{t}}$
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1449082/d10-x01-y01
+XLabel=$p_\text{T}^{t\bar{t}}$ [GeV] 
+YLabel=$A_C^{t\bar{t}}$
+# END PLOT
+
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1449082.yoda b/analyses/pluginATLAS/ATLAS_2016_I1449082.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1449082.yoda
@@ -0,0 +1,104 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1449082/d01-x01-y01
+Path=/REF/ATLAS_2016_I1449082/d01-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-3.450000e+00	1.550000e+00	1.550000e+00	4.097000e-03	2.722223e-04	2.722223e-04
+-1.800000e+00	1.000000e-01	1.000000e-01	6.387000e-02	4.248684e-03	4.248684e-03
+-1.600000e+00	1.000000e-01	1.000000e-01	9.507000e-02	5.305450e-03	5.305450e-03
+-1.350000e+00	1.500000e-01	1.500000e-01	1.459000e-01	7.544177e-03	7.544177e-03
+-1.050000e+00	1.500000e-01	1.500000e-01	2.155000e-01	1.065715e-02	1.065715e-02
+-7.500000e-01	1.500000e-01	1.500000e-01	2.919000e-01	1.511484e-02	1.511484e-02
+-4.500000e-01	1.500000e-01	1.500000e-01	3.932000e-01	1.967536e-02	1.967536e-02
+-1.500000e-01	1.500000e-01	1.500000e-01	4.622000e-01	2.383911e-02	2.383911e-02
+1.500000e-01	1.500000e-01	1.500000e-01	4.691000e-01	2.473190e-02	2.473190e-02
+4.500000e-01	1.500000e-01	1.500000e-01	3.912000e-01	2.061354e-02	2.061354e-02
+7.500000e-01	1.500000e-01	1.500000e-01	3.046000e-01	1.554969e-02	1.554969e-02
+1.050000e+00	1.500000e-01	1.500000e-01	2.171000e-01	1.111686e-02	1.111686e-02
+1.350000e+00	1.500000e-01	1.500000e-01	1.442000e-01	7.632603e-03	7.632603e-03
+1.600000e+00	1.000000e-01	1.000000e-01	9.330000e-02	5.365372e-03	5.365372e-03
+1.800000e+00	1.000000e-01	1.000000e-01	6.507000e-02	4.075014e-03	4.075014e-03
+3.450000e+00	1.550000e+00	1.550000e+00	4.308000e-03	2.628109e-04	2.628109e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1449082/d02-x01-y01
+Path=/REF/ATLAS_2016_I1449082/d02-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-2.875000e+00	2.125000e+00	2.125000e+00	3.779000e-02	3.089599e-03	3.089599e-03
+-3.750000e-01	3.750000e-01	3.750000e-01	4.409000e-01	3.951443e-02	3.951443e-02
+3.750000e-01	3.750000e-01	3.750000e-01	4.582000e-01	4.224714e-02	4.224714e-02
+2.875000e+00	2.125000e+00	2.125000e+00	3.884000e-02	3.097981e-03	3.097981e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1449082/d03-x01-y01
+Path=/REF/ATLAS_2016_I1449082/d03-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	6.000000e-03	5.475248e-03	5.475248e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1449082/d04-x01-y01
+Path=/REF/ATLAS_2016_I1449082/d04-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.500000e+02	2.500000e+02	2.500000e+02	1.000000e-02	1.099266e-02	1.099266e-02
+1.250000e+03	7.500000e+02	7.500000e+02	3.000000e-03	1.856822e-02	1.856822e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1449082/d05-x01-y01
+Path=/REF/ATLAS_2016_I1449082/d05-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+3.000000e-01	3.000000e-01	3.000000e-01	8.000000e-03	9.302171e-03	9.302171e-03
+8.000000e-01	2.000000e-01	2.000000e-01	7.000000e-03	1.286249e-02	1.286249e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1449082/d06-x01-y01
+Path=/REF/ATLAS_2016_I1449082/d06-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+01	1.500000e+01	1.500000e+01	-4.000000e-03	2.387430e-02	2.387430e-02
+5.150000e+02	4.850000e+02	4.850000e+02	1.500000e-02	1.763214e-02	1.763214e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1449082/d07-x01-y01
+Path=/REF/ATLAS_2016_I1449082/d07-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	1.700000e-02	1.833106e-02	1.833106e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1449082/d08-x01-y01
+Path=/REF/ATLAS_2016_I1449082/d08-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.500000e+02	2.500000e+02	2.500000e+02	7.000000e-03	4.626914e-02	4.626914e-02
+1.250000e+03	7.500000e+02	7.500000e+02	1.900000e-02	2.627000e-02	2.627000e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1449082/d09-x01-y01
+Path=/REF/ATLAS_2016_I1449082/d09-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+3.000000e-01	3.000000e-01	3.000000e-01	3.600000e-02	3.866374e-02	3.866374e-02
+8.000000e-01	2.000000e-01	2.000000e-01	-2.900000e-02	2.852405e-02	2.852405e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1449082/d10-x01-y01
+Path=/REF/ATLAS_2016_I1449082/d10-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+01	1.500000e+01	1.500000e+01	-3.500000e-02	4.834598e-02	4.834598e-02
+5.150000e+02	4.850000e+02	4.850000e+02	4.800000e-02	3.943389e-02	3.943389e-02
+END YODA_SCATTER2D
+
diff --git a/src/Analyses/ATLAS_2016_I1452559.cc b/analyses/pluginATLAS/ATLAS_2016_I1452559.cc
rename from src/Analyses/ATLAS_2016_I1452559.cc
rename to analyses/pluginATLAS/ATLAS_2016_I1452559.cc
diff --git a/data/anainfo/ATLAS_2016_I1452559.info b/analyses/pluginATLAS/ATLAS_2016_I1452559.info
rename from data/anainfo/ATLAS_2016_I1452559.info
rename to analyses/pluginATLAS/ATLAS_2016_I1452559.info
diff --git a/src/Analyses/ATLAS_2016_I1457605.cc b/analyses/pluginATLAS/ATLAS_2016_I1457605.cc
rename from src/Analyses/ATLAS_2016_I1457605.cc
rename to analyses/pluginATLAS/ATLAS_2016_I1457605.cc
diff --git a/data/anainfo/ATLAS_2016_I1457605.info b/analyses/pluginATLAS/ATLAS_2016_I1457605.info
rename from data/anainfo/ATLAS_2016_I1457605.info
rename to analyses/pluginATLAS/ATLAS_2016_I1457605.info
--- a/data/anainfo/ATLAS_2016_I1457605.info
+++ b/analyses/pluginATLAS/ATLAS_2016_I1457605.info
@@ -1,38 +1,38 @@
 Name: ATLAS_2016_I1457605
 Year: 2016
 Summary: Inclusive prompt photons at 8 TeV
 Experiment: ATLAS
 Collider: LHC
 InspireID: 1457605
 Status: VALIDATED
 Authors:
  - Mark Stockton <chris.g@cern.ch>
 References:
  - arXiv:1605.03495 [hep-ex]
 RunInfo:
   Inclusive prompt photon production
 Beams: [p+, p+]
 Energies: [8000]
 PtCuts: [25]
 NeedCrossSection: True
 Description:
   A measurement of the cross section for the inclusive production of isolated prompt photons in proton-proton collisions at a
   centre-of-mass energy of $\sqrt{s} = 8$~TeV is presented. The measurement covers the pseudorapidity ranges $|\eta^\gamma| < 1.37$
   $1.56 < |\eta^\gamma| < 2.37$ in the transverse energy range $25 < E^\gamma_\text{T} < 1500$~GeV. The results are based on an
   integrated luminosity of 20.2~fb${}^{-1}$, recorded by the ATLAS detector at the LHC. Photon candidates are identified by combining
   information from the calorimeters and the inner tracker. The background is subtracted using a data-driven technique, based on the
   observed calorimeter shower-shape variables and the deposition of hadronic energy in a narrow cone around the photon candidate.
 BibKey: Aad:2016xcr
 BibTeX: '@article{Aad:2016xcr,
       author         = "Aad, Georges and others",
       title          = "{Measurement of the inclusive isolated prompt photon
                         cross section in $pp$ collisions at $\sqrt{s} = 8$~TeV
                         with the ATLAS detector}",
       collaboration  = "ATLAS",
       year           = "2016",
       eprint         = "1605.03495",
       archivePrefix  = "arXiv",
       primaryClass   = "hep-ex",
       reportNumber   = "CERN-EP-2016-035",
       SLACcitation   = "%%CITATION = ARXIV:1605.03495;%%"
-}
+}'
diff --git a/data/plotinfo/ATLAS_2016_I1457605.plot b/analyses/pluginATLAS/ATLAS_2016_I1457605.plot
rename from data/plotinfo/ATLAS_2016_I1457605.plot
rename to analyses/pluginATLAS/ATLAS_2016_I1457605.plot
diff --git a/data/refdata/ATLAS_2016_I1457605.yoda b/analyses/pluginATLAS/ATLAS_2016_I1457605.yoda
rename from data/refdata/ATLAS_2016_I1457605.yoda
rename to analyses/pluginATLAS/ATLAS_2016_I1457605.yoda
diff --git a/src/Analyses/ATLAS_2016_I1458270.cc b/analyses/pluginATLAS/ATLAS_2016_I1458270.cc
rename from src/Analyses/ATLAS_2016_I1458270.cc
rename to analyses/pluginATLAS/ATLAS_2016_I1458270.cc
--- a/src/Analyses/ATLAS_2016_I1458270.cc
+++ b/analyses/pluginATLAS/ATLAS_2016_I1458270.cc
@@ -1,210 +1,209 @@
 // -*- C++ -*-
 #include "Rivet/Analysis.hh"
 #include "Rivet/Projections/FinalState.hh"
 #include "Rivet/Projections/PromptFinalState.hh"
 #include "Rivet/Projections/FastJets.hh"
 #include "Rivet/Projections/Sphericity.hh"
 #include "Rivet/Projections/SmearedParticles.hh"
 #include "Rivet/Projections/SmearedJets.hh"
 #include "Rivet/Projections/SmearedMET.hh"
 #include "Rivet/Tools/Cutflow.hh"
 
 namespace Rivet {
 
 
   /// @brief ATLAS 0-lepton SUSY search with 3.2/fb of 13 TeV pp data
   class ATLAS_2016_I1458270 : public Analysis {
   public:
 
     /// Constructor
     DEFAULT_RIVET_ANALYSIS_CTOR(ATLAS_2016_I1458270);
 
 
     /// @name Analysis methods
     //@{
 
     /// Book histograms and initialise projections before the run
     void init() {
 
       // Initialise and register projections
       FinalState calofs(Cuts::abseta < 4.8);
       FastJets fj(calofs, FastJets::ANTIKT, 0.4);
       declare(fj, "TruthJets");
       declare(SmearedJets(fj, JET_SMEAR_ATLAS_RUN2, JET_BTAG_ATLAS_RUN2_MV2C20), "RecoJets");
 
       MissingMomentum mm(calofs);
       declare(mm, "TruthMET");
       declare(SmearedMET(mm, MET_SMEAR_ATLAS_RUN2), "RecoMET");
 
       PromptFinalState es(Cuts::abseta < 2.47 && Cuts::abspid == PID::ELECTRON, true, true);
       declare(es, "TruthElectrons");
       declare(SmearedParticles(es, ELECTRON_EFF_ATLAS_RUN2, ELECTRON_SMEAR_ATLAS_RUN2), "RecoElectrons");
 
       PromptFinalState mus(Cuts::abseta < 2.7 && Cuts::abspid == PID::MUON, true);
       declare(mus, "TruthMuons");
       declare(SmearedParticles(mus, MUON_EFF_ATLAS_RUN2, MUON_SMEAR_ATLAS_RUN2), "RecoMuons");
 
 
       // Book histograms/counters
       _h_2jl = bookCounter("2jl");
       _h_2jm = bookCounter("2jm");
       _h_2jt = bookCounter("2jt");
       _h_4jt = bookCounter("4jt");
       _h_5j  = bookCounter("5j");
       _h_6jm = bookCounter("6jm");
       _h_6jt = bookCounter("6jt");
 
 
       // Book cut-flows
       const vector<string> cuts2j = {"Pre-sel+MET+pT1", "Njet", "Dphi_min(j,MET)", "pT2", "MET/sqrtHT", "m_eff(incl)"};
       _flows.addCutflow("2jl", cuts2j);
       _flows.addCutflow("2jm", cuts2j);
       _flows.addCutflow("2jt", cuts2j);
       const vector<string> cutsXj = {"Pre-sel+MET+pT1", "Njet", "Dphi_min(j,MET)", "pT2", "pT4", "Aplanarity", "MET/m_eff(Nj)", "m_eff(incl)"};
       _flows.addCutflow("4jt", cutsXj);
       _flows.addCutflow("5j",  cutsXj);
       _flows.addCutflow("6jm", cutsXj);
       _flows.addCutflow("6jt", cutsXj);
 
     }
 
 
     /// Perform the per-event analysis
     void analyze(const Event& event) {
 
       _flows.fillinit();
 
       // Same MET cut for all signal regions
       //const Vector3 vmet = -apply<MissingMomentum>(event, "TruthMET").vectorEt();
       const Vector3 vmet = -apply<SmearedMET>(event, "RecoMET").vectorEt();
       const double met = vmet.mod();
       if (met < 200*GeV) vetoEvent;
 
       // Get baseline electrons, muons, and jets
       Particles elecs = apply<ParticleFinder>(event, "RecoElectrons").particles(Cuts::pT > 10*GeV);
       Particles muons = apply<ParticleFinder>(event, "RecoMuons").particles(Cuts::pT > 10*GeV);
       Jets jets = apply<JetAlg>(event, "RecoJets").jetsByPt(Cuts::pT > 20*GeV && Cuts::abseta < 2.8); ///< @todo Pile-up subtraction
 
       // Jet/electron/muons overlap removal and selection
       // Remove any |eta| < 2.8 jet within dR = 0.2 of a baseline electron
       for (const Particle& e : elecs)
         ifilter_discard(jets, deltaRLess(e, 0.2, RAPIDITY));
       // Remove any electron or muon with dR < 0.4 of a remaining (Nch > 3) jet
       for (const Jet& j : jets) {
         /// @todo Add track efficiency random filtering
         ifilter_discard(elecs, deltaRLess(j, 0.4, RAPIDITY));
         if (j.particles(Cuts::abscharge > 0 && Cuts::pT > 500*MeV).size() >= 3)
           ifilter_discard(muons, deltaRLess(j, 0.4, RAPIDITY));
       }
       // Discard the softer of any electrons within dR < 0.05
       for (size_t i = 0; i < elecs.size(); ++i) {
         const Particle& e1 = elecs[i];
         /// @todo Would be nice to pass a "tail view" for the filtering, but awkward without range API / iterator guts
         ifilter_discard(elecs, [&](const Particle& e2){ return e2.pT() < e1.pT() && deltaR(e1,e2) < 0.05; });
       }
 
       // Loose electron selection
       ifilter_select(elecs, ParticleEffFilter(ELECTRON_IDEFF_ATLAS_RUN2_LOOSE));
 
       // Veto the event if there are any remaining baseline leptons
       if (!elecs.empty()) vetoEvent;
       if (!muons.empty()) vetoEvent;
 
       // Signal jets have pT > 50 GeV
       const Jets jets50 = filter_select(jets, Cuts::pT > 50*GeV);
       if (jets50.size() < 2) vetoEvent;
       vector<double> jetpts; transform(jets, jetpts, pT);
       vector<double> jetpts50; transform(jets50, jetpts50, pT);
       const double j1pt = jetpts50[0];
       const double j2pt = jetpts50[1];
       if (j1pt < 200*GeV) vetoEvent;
 
       // Construct multi-jet observables
       const double ht = sum(jetpts, 0.0);
       const double met_sqrt_ht = met / sqrt(ht);
       const double meff_incl = sum(jetpts50, met);
 
       // Get dphis between MET and jets
       vector<double> dphimets50; transform(jets50, dphimets50, deltaPhiWRT(vmet));
-      const double min_dphi_met_2 = min(head(dphimets50, 2));
       const double min_dphi_met_3 = min(head(dphimets50, 3));
-      MSG_DEBUG(dphimets50 << ", " << min_dphi_met_2 << ", " << min_dphi_met_3);
+      MSG_DEBUG(dphimets50 << ", " << min_dphi_met_3);
 
       // Jet aplanarity
       Sphericity sph; sph.calc(jets);
       const double aplanarity = sph.aplanarity();
 
 
       // Fill SR counters
       // 2-jet SRs
-      if (_flows["2jl"].filltail({true, true, min_dphi_met_2 > 0.8, j2pt > 200*GeV,
+      if (_flows["2jl"].filltail({true, true, min_dphi_met_3 > 0.8, j2pt > 200*GeV,
               met_sqrt_ht > 15*sqrt(GeV), meff_incl > 1200*GeV})) _h_2jl->fill(event.weight());
-      if (_flows["2jm"].filltail({j1pt > 300*GeV, true, min_dphi_met_2 > 0.4, j2pt > 50*GeV,
+      if (_flows["2jm"].filltail({j1pt > 300*GeV, true, min_dphi_met_3 > 0.4, j2pt > 50*GeV,
               met_sqrt_ht > 15*sqrt(GeV), meff_incl > 1600*GeV})) _h_2jm->fill(event.weight());
-      if (_flows["2jt"].filltail({true, true, min_dphi_met_2 > 0.8, j2pt > 200*GeV,
+      if (_flows["2jt"].filltail({true, true, min_dphi_met_3 > 0.8, j2pt > 200*GeV,
               met_sqrt_ht > 20*sqrt(GeV), meff_incl > 2000*GeV})) _h_2jt->fill(event.weight());
 
       // Upper multiplicity SRs
       const double j4pt = jets50.size() > 3 ? jetpts50[3] : -1;
       const double j5pt = jets50.size() > 4 ? jetpts50[4] : -1;
       const double j6pt = jets50.size() > 5 ? jetpts50[5] : -1;
-      const double meff_4 = jets50.size() > 3 ? sum(head(jetpts50, 4), 0.0) : -1;
+      const double meff_4 = jets50.size() > 3 ? sum(head(jetpts50, 4), met) : -1;
       const double meff_5 = jets50.size() > 4 ? meff_4 + jetpts50[4] : -1;
       const double meff_6 = jets50.size() > 5 ? meff_5 + jetpts50[5] : -1;
       const double met_meff_4 = met / meff_4;
       const double met_meff_5 = met / meff_5;
       const double met_meff_6 = met / meff_6;
       const double min_dphi_met_more = jets50.size() > 3 ? min(tail(dphimets50, -3)) : -1;
 
       if (_flows["4jt"].filltail({true, jets50.size() >= 4, min_dphi_met_3 > 0.4 && min_dphi_met_more > 0.2,
-              jetpts[1] > 200*GeV, j4pt > 100*GeV, aplanarity > 0.04, met_meff_4 > 0.20, meff_incl > 2200*GeV}))
+              jetpts[1] > 100*GeV, j4pt > 100*GeV, aplanarity > 0.04, met_meff_4 > 0.20, meff_incl > 2200*GeV}))
         _h_4jt->fill(event.weight());
       if (_flows["5j"].filltail({true, jets50.size() >= 5, min_dphi_met_3 > 0.4 && min_dphi_met_more > 0.2,
-              jetpts[1] > 200*GeV, j4pt > 100*GeV && j5pt > 50*GeV, aplanarity > 0.04, met_meff_5 > 0.25, meff_incl > 1600*GeV}))
+              jetpts[1] > 100*GeV, j4pt > 100*GeV && j5pt > 50*GeV, aplanarity > 0.04, met_meff_5 > 0.25, meff_incl > 1600*GeV}))
         _h_5j->fill(event.weight());
       if (_flows["6jm"].filltail({true, jets50.size() >= 6, min_dphi_met_3 > 0.4 && min_dphi_met_more > 0.2,
-              jetpts[1] > 200*GeV, j4pt > 100*GeV && j6pt > 50*GeV, aplanarity > 0.04, met_meff_6 > 0.25, meff_incl > 1600*GeV}))
+              jetpts[1] > 100*GeV, j4pt > 100*GeV && j6pt > 50*GeV, aplanarity > 0.04, met_meff_6 > 0.25, meff_incl > 1600*GeV}))
         _h_6jm->fill(event.weight());
       if (_flows["6jt"].filltail({true, jets50.size() >= 6, min_dphi_met_3 > 0.4 && min_dphi_met_more > 0.2,
-              jetpts[1] > 200*GeV, j4pt > 100*GeV && j6pt > 50*GeV, aplanarity > 0.04, met_meff_6 > 0.20, meff_incl > 2000*GeV}))
+              jetpts[1] > 100*GeV, j4pt > 100*GeV && j6pt > 50*GeV, aplanarity > 0.04, met_meff_6 > 0.20, meff_incl > 2000*GeV}))
         _h_6jt->fill(event.weight());
 
     }
 
 
     /// Normalise histograms etc., after the run
     void finalize() {
 
       const double sf = 3.2*crossSection()/femtobarn/sumOfWeights();
       scale({_h_2jl, _h_2jl, _h_2jl}, sf);
       scale({_h_4jt, _h_5j}, sf);
       scale({_h_6jm, _h_6jt}, sf);
 
       MSG_INFO("CUTFLOWS:\n\n" << _flows);
 
     }
 
     //@}
 
 
   private:
 
     /// @name Histograms
     //@{
     CounterPtr _h_2jl, _h_2jm, _h_2jt;
     CounterPtr _h_4jt, _h_5j;
     CounterPtr _h_6jm, _h_6jt;
     //@}
 
     /// Cut-flows
     Cutflows _flows;
 
   };
 
 
 
   // The hook for the plugin system
   DECLARE_RIVET_PLUGIN(ATLAS_2016_I1458270);
 
 
 }
diff --git a/data/anainfo/ATLAS_2016_I1458270.info b/analyses/pluginATLAS/ATLAS_2016_I1458270.info
rename from data/anainfo/ATLAS_2016_I1458270.info
rename to analyses/pluginATLAS/ATLAS_2016_I1458270.info
--- a/data/anainfo/ATLAS_2016_I1458270.info
+++ b/analyses/pluginATLAS/ATLAS_2016_I1458270.info
@@ -1,45 +1,47 @@
 Name: ATLAS_2016_I1458270
 Year: 2016
 Summary: 0-lepton SUSY search with 3.2/fb of 13 TeV $pp$ data
 Experiment: ATLAS
 Collider: LHC
 InspireID: 1458270
 Status: VALIDATED
 Authors:
  - Andy Buckley <andy.buckley@cern.ch>
 References:
 - 'Eur.Phys.J. C76 (2016) no.7, 392'
 - 'DOI:10.1140/epjc/s10052-016-4184-8'
 - 'arXiv:1605.03814'
 Keywords:
  - susy
  - 0lepton
  - met
 RunInfo: 'BSM signal events'
 NumEvents: 10000
 Luminosity_fb: 3.2
 NeedCrossSection: no
 Beams: [p+, p+]
 Energies: [13000]
 Description:
   'ATLAS 0-lepton SUSY search using 3.2/fb of LHC $pp$ data at 13\;\TeV, recorded in
    2015. The event selection is via signal regions requiring from 2-6 high-energy jets,
-   and significant missing transverse energy.'
+   and significant missing transverse energy.
+   Detailed info:
+   http://atlas.web.cern.ch/Atlas/GROUPS/PHYSICS/PAPERS/SUSY-2015-06/ '
 BibKey: Aaboud:2016zdn
 BibTeX: '@article{Aaboud:2016zdn,
       author         = "Aaboud, Morad and others",
       title          = "{Search for squarks and gluinos in final states with jets
                         and missing transverse momentum at $\sqrt{s} = 13\;\TeV$ with the ATLAS detector}",
       collaboration  = "ATLAS",
       journal        = "Eur. Phys. J.",
       volume         = "C76",
       year           = "2016",
       number         = "7",
       pages          = "392",
       doi            = "10.1140/epjc/s10052-016-4184-8",
       eprint         = "1605.03814",
       archivePrefix  = "arXiv",
       primaryClass   = "hep-ex",
       reportNumber   = "CERN-EP-2016-080",
       SLACcitation   = "%%CITATION = ARXIV:1605.03814;%%"
 }'
diff --git a/src/Analyses/ATLAS_2016_I1467230.cc b/analyses/pluginATLAS/ATLAS_2016_I1467230.cc
rename from src/Analyses/ATLAS_2016_I1467230.cc
rename to analyses/pluginATLAS/ATLAS_2016_I1467230.cc
diff --git a/data/anainfo/ATLAS_2016_I1467230.info b/analyses/pluginATLAS/ATLAS_2016_I1467230.info
rename from data/anainfo/ATLAS_2016_I1467230.info
rename to analyses/pluginATLAS/ATLAS_2016_I1467230.info
diff --git a/data/plotinfo/ATLAS_2016_I1467230.plot b/analyses/pluginATLAS/ATLAS_2016_I1467230.plot
rename from data/plotinfo/ATLAS_2016_I1467230.plot
rename to analyses/pluginATLAS/ATLAS_2016_I1467230.plot
diff --git a/data/refdata/ATLAS_2016_I1467230.yoda b/analyses/pluginATLAS/ATLAS_2016_I1467230.yoda
rename from data/refdata/ATLAS_2016_I1467230.yoda
rename to analyses/pluginATLAS/ATLAS_2016_I1467230.yoda
diff --git a/src/Analyses/ATLAS_2016_I1467454.cc b/analyses/pluginATLAS/ATLAS_2016_I1467454.cc
rename from src/Analyses/ATLAS_2016_I1467454.cc
rename to analyses/pluginATLAS/ATLAS_2016_I1467454.cc
diff --git a/data/anainfo/ATLAS_2016_I1467454.info b/analyses/pluginATLAS/ATLAS_2016_I1467454.info
rename from data/anainfo/ATLAS_2016_I1467454.info
rename to analyses/pluginATLAS/ATLAS_2016_I1467454.info
diff --git a/data/plotinfo/ATLAS_2016_I1467454.plot b/analyses/pluginATLAS/ATLAS_2016_I1467454.plot
rename from data/plotinfo/ATLAS_2016_I1467454.plot
rename to analyses/pluginATLAS/ATLAS_2016_I1467454.plot
diff --git a/data/refdata/ATLAS_2016_I1467454.yoda b/analyses/pluginATLAS/ATLAS_2016_I1467454.yoda
rename from data/refdata/ATLAS_2016_I1467454.yoda
rename to analyses/pluginATLAS/ATLAS_2016_I1467454.yoda
diff --git a/data/anainfo/ATLAS_2016_I1467454_EL.info b/analyses/pluginATLAS/ATLAS_2016_I1467454_EL.info
rename from data/anainfo/ATLAS_2016_I1467454_EL.info
rename to analyses/pluginATLAS/ATLAS_2016_I1467454_EL.info
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1467454_EL.plot b/analyses/pluginATLAS/ATLAS_2016_I1467454_EL.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1467454_EL.plot
@@ -0,0 +1,59 @@
+# BEGIN PLOT /ATLAS_2016_I1467454_EL/*
+LogY=1
+XTwosidedTicks=1
+YTwosidedTicks=1
+LeftMargin=1.6
+LegendAlign=r
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_EL/d18
+XLabel=$m_{ee}$ [GeV]
+YLabel=$\frac{\text{d}\sigma}{\text{d} m_{ee}}$ [pb/GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_EL/d19
+XLabel=$|y_{ee}|$
+YLabel=$\frac{\text{d}^2\sigma}{\text{d} m_{ee} \text{d}y_{ee}}$ [pb/GeV]
+Title=116 GeV $< m_{ee} <$ 150 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_EL/d2[0-3]
+XLabel=$|y_{ee}|$
+YLabel=$\frac{\text{d}^2\sigma}{\text{d} m_{ee} \text{d}y_{ee}}$ [pb/GeV]
+Title=150 GeV $< m_{ee} <$ 200 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_EL/d21
+Title=200 GeV $< m_{ee} <$ 300 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_EL/d22
+Title=300 GeV $< m_{ee} <$ 500 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_EL/d23
+Title=500 GeV $< m_{ee} <$ 1500 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_EL/d2[4-8]
+XLabel=$|\Delta\eta_{ee}|$
+YLabel=$\frac{\text{d}^2\sigma}{\text{d} m_{ee} \text{d}\Delta\eta_{ee}}$ [pb/GeV]
+Title=116 GeV $< m_{ee} <$ 150 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_EL/d25
+Title=150 GeV $< m_{ee} <$ 200 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_EL/d26
+Title=200 GeV $< m_{ee} <$ 300 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_EL/d27
+Title=300 GeV $< m_{ee} <$ 500 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_EL/d28
+Title=500 GeV $< m_{ee} <$ 1500 GeV
+# END PLOT
+
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1467454_EL.yoda b/analyses/pluginATLAS/ATLAS_2016_I1467454_EL.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1467454_EL.yoda
@@ -0,0 +1,183 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_EL/d18-x01-y01
+Path=/REF/ATLAS_2016_I1467454_EL/d18-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.230000e+02	7.000000e+00	7.000000e+00	2.206304e-01	4.721696e-03	4.721696e-03
+1.400000e+02	1.000000e+01	1.000000e+01	1.003824e-01	2.308795e-03	2.308795e-03
+1.625000e+02	1.250000e+01	1.250000e+01	4.832856e-02	1.180840e-03	1.180840e-03
+1.875000e+02	1.250000e+01	1.250000e+01	2.471483e-02	6.786460e-04	6.786460e-04
+2.150000e+02	1.500000e+01	1.500000e+01	1.320038e-02	4.159691e-04	4.159691e-04
+2.450000e+02	1.500000e+01	1.500000e+01	7.528409e-03	2.664887e-04	2.664887e-04
+2.800000e+02	2.000000e+01	2.000000e+01	4.187146e-03	1.618428e-04	1.618428e-04
+3.400000e+02	4.000000e+01	4.000000e+01	1.730950e-03	7.084219e-05	7.084219e-05
+4.400000e+02	6.000000e+01	6.000000e+01	5.613871e-04	2.761089e-05	2.761089e-05
+6.000000e+02	1.000000e+02	1.000000e+02	1.413953e-04	8.808601e-06	8.808601e-06
+8.500000e+02	1.500000e+02	1.500000e+02	2.433180e-05	2.641877e-06	2.641877e-06
+1.250000e+03	2.500000e+02	2.500000e+02	2.936364e-06	6.842735e-07	6.842735e-07
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_EL/d19-x01-y01
+Path=/REF/ATLAS_2016_I1467454_EL/d19-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e-01	1.000000e-01	1.000000e-01	3.959924e-02	9.193507e-04	9.193507e-04
+3.000000e-01	1.000000e-01	1.000000e-01	3.921756e-02	9.338391e-04	9.338391e-04
+5.000000e-01	1.000000e-01	1.000000e-01	3.906399e-02	9.464456e-04	9.464456e-04
+7.000000e-01	1.000000e-01	1.000000e-01	3.902672e-02	9.341989e-04	9.341989e-04
+9.000000e-01	1.000000e-01	1.000000e-01	3.791786e-02	9.365021e-04	9.365021e-04
+1.100000e+00	1.000000e-01	1.000000e-01	3.791786e-02	9.494620e-04	9.494620e-04
+1.300000e+00	1.000000e-01	1.000000e-01	3.690249e-02	9.473235e-04	9.473235e-04
+1.500000e+00	1.000000e-01	1.000000e-01	3.288719e-02	8.769232e-04	8.769232e-04
+1.700000e+00	1.000000e-01	1.000000e-01	2.739464e-02	8.033684e-04	8.033684e-04
+1.900000e+00	1.000000e-01	1.000000e-01	2.195590e-02	6.813407e-04	6.813407e-04
+2.100000e+00	1.000000e-01	1.000000e-01	1.427203e-02	4.923333e-04	4.923333e-04
+2.300000e+00	1.000000e-01	1.000000e-01	6.746411e-03	3.301609e-04	3.301609e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_EL/d20-x01-y01
+Path=/REF/ATLAS_2016_I1467454_EL/d20-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e-01	1.000000e-01	1.000000e-01	1.007605e-02	3.187918e-04	3.187918e-04
+3.000000e-01	1.000000e-01	1.000000e-01	1.009524e-02	3.173182e-04	3.173182e-04
+5.000000e-01	1.000000e-01	1.000000e-01	9.980989e-03	3.212576e-04	3.212576e-04
+7.000000e-01	1.000000e-01	1.000000e-01	1.006648e-02	3.254136e-04	3.254136e-04
+9.000000e-01	1.000000e-01	1.000000e-01	9.714286e-03	3.100973e-04	3.100973e-04
+1.100000e+00	1.000000e-01	1.000000e-01	9.247619e-03	3.104502e-04	3.104502e-04
+1.300000e+00	1.000000e-01	1.000000e-01	8.826336e-03	2.934010e-04	2.934010e-04
+1.500000e+00	1.000000e-01	1.000000e-01	7.265774e-03	2.613660e-04	2.613660e-04
+1.700000e+00	1.000000e-01	1.000000e-01	6.385427e-03	2.491953e-04	2.491953e-04
+1.900000e+00	1.000000e-01	1.000000e-01	4.736337e-03	1.908103e-04	1.908103e-04
+2.100000e+00	1.000000e-01	1.000000e-01	3.179191e-03	1.402092e-04	1.402092e-04
+2.300000e+00	1.000000e-01	1.000000e-01	1.464355e-03	9.706804e-05	9.706804e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_EL/d21-x01-y01
+Path=/REF/ATLAS_2016_I1467454_EL/d21-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e-01	1.000000e-01	1.000000e-01	2.191910e-03	9.822104e-05	9.822104e-05
+3.000000e-01	1.000000e-01	1.000000e-01	2.201317e-03	9.758069e-05	9.758069e-05
+5.000000e-01	1.000000e-01	1.000000e-01	2.342427e-03	1.050964e-04	1.050964e-04
+7.000000e-01	1.000000e-01	1.000000e-01	2.396226e-03	1.038703e-04	1.038703e-04
+9.000000e-01	1.000000e-01	1.000000e-01	2.168561e-03	9.688395e-05	9.688395e-05
+1.100000e+00	1.000000e-01	1.000000e-01	2.032289e-03	9.335265e-05	9.335265e-05
+1.300000e+00	1.000000e-01	1.000000e-01	1.744519e-03	8.286004e-05	8.286004e-05
+1.500000e+00	1.000000e-01	1.000000e-01	1.561303e-03	7.316498e-05	7.316498e-05
+1.700000e+00	1.000000e-01	1.000000e-01	1.268012e-03	6.556981e-05	6.556981e-05
+1.900000e+00	1.000000e-01	1.000000e-01	9.454023e-04	5.382155e-05	5.382155e-05
+2.100000e+00	1.000000e-01	1.000000e-01	5.871648e-04	3.728843e-05	3.728843e-05
+2.300000e+00	1.000000e-01	1.000000e-01	2.408829e-04	2.371443e-05	2.371443e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_EL/d22-x01-y01
+Path=/REF/ATLAS_2016_I1467454_EL/d22-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.000000e-01	2.000000e-01	2.000000e-01	2.990741e-04	1.801906e-05	1.801906e-05
+6.000000e-01	2.000000e-01	2.000000e-01	3.115672e-04	1.711352e-05	1.711352e-05
+1.000000e+00	2.000000e-01	2.000000e-01	2.986767e-04	1.642722e-05	1.642722e-05
+1.400000e+00	2.000000e-01	2.000000e-01	2.184236e-04	1.317440e-05	1.317440e-05
+1.800000e+00	2.000000e-01	2.000000e-01	1.251194e-04	9.354714e-06	9.354714e-06
+2.200000e+00	2.000000e-01	2.000000e-01	3.460803e-05	4.210675e-06	4.210675e-06
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_EL/d23-x01-y01
+Path=/REF/ATLAS_2016_I1467454_EL/d23-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.000000e-01	2.000000e-01	2.000000e-01	1.322993e-05	1.259556e-06	1.259556e-06
+6.000000e-01	2.000000e-01	2.000000e-01	1.338873e-05	1.227390e-06	1.227390e-06
+1.000000e+00	2.000000e-01	2.000000e-01	9.840675e-06	1.059645e-06	1.059645e-06
+1.400000e+00	2.000000e-01	2.000000e-01	7.450237e-06	8.802637e-07	8.802637e-07
+1.800000e+00	2.000000e-01	2.000000e-01	2.168561e-06	4.754146e-07	4.754146e-07
+2.200000e+00	2.000000e-01	2.000000e-01	2.352390e-07	1.433465e-07	1.433465e-07
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_EL/d24-x01-y01
+Path=/REF/ATLAS_2016_I1467454_EL/d24-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e-01	1.250000e-01	1.250000e-01	4.784276e-02	1.133177e-03	1.133177e-03
+3.750000e-01	1.250000e-01	1.250000e-01	4.521073e-02	1.083172e-03	1.083172e-03
+6.250000e-01	1.250000e-01	1.250000e-01	4.214559e-02	1.025447e-03	1.025447e-03
+8.750000e-01	1.250000e-01	1.250000e-01	3.875598e-02	9.138526e-04	9.138526e-04
+1.125000e+00	1.250000e-01	1.250000e-01	3.425573e-02	8.397894e-04	8.397894e-04
+1.375000e+00	1.250000e-01	1.250000e-01	3.095238e-02	7.663449e-04	7.663449e-04
+1.625000e+00	1.250000e-01	1.250000e-01	2.476190e-02	6.322777e-04	6.322777e-04
+1.875000e+00	1.250000e-01	1.250000e-01	1.924171e-02	5.387678e-04	5.387678e-04
+2.125000e+00	1.250000e-01	1.250000e-01	1.137441e-02	3.683974e-04	3.683974e-04
+2.375000e+00	1.250000e-01	1.250000e-01	4.059217e-03	1.997696e-04	1.997696e-04
+2.625000e+00	1.250000e-01	1.250000e-01	6.417625e-04	8.158464e-05	8.158464e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_EL/d25-x01-y01
+Path=/REF/ATLAS_2016_I1467454_EL/d25-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e-01	1.250000e-01	1.250000e-01	1.036468e-02	3.023575e-04	3.023575e-04
+3.750000e-01	1.250000e-01	1.250000e-01	9.980806e-03	2.932048e-04	2.932048e-04
+6.250000e-01	1.250000e-01	1.250000e-01	9.232982e-03	2.788299e-04	2.788299e-04
+8.750000e-01	1.250000e-01	1.250000e-01	8.984674e-03	2.759041e-04	2.759041e-04
+1.125000e+00	1.250000e-01	1.250000e-01	7.877629e-03	2.433155e-04	2.433155e-04
+1.375000e+00	1.250000e-01	1.250000e-01	6.806482e-03	2.227499e-04	2.227499e-04
+1.625000e+00	1.250000e-01	1.250000e-01	5.891841e-03	2.068028e-04	2.068028e-04
+1.875000e+00	1.250000e-01	1.250000e-01	4.678639e-03	1.859134e-04	1.859134e-04
+2.125000e+00	1.250000e-01	1.250000e-01	3.515038e-03	1.604644e-04	1.604644e-04
+2.375000e+00	1.250000e-01	1.250000e-01	2.745098e-03	1.402689e-04	1.402689e-04
+2.625000e+00	1.250000e-01	1.250000e-01	1.873253e-03	1.166090e-04	1.166090e-04
+2.875000e+00	1.250000e-01	1.250000e-01	8.635514e-04	8.306269e-05	8.306269e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_EL/d26-x01-y01
+Path=/REF/ATLAS_2016_I1467454_EL/d26-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e-01	1.250000e-01	1.250000e-01	2.023011e-03	7.753701e-05	7.753701e-05
+3.750000e-01	1.250000e-01	1.250000e-01	1.992337e-03	7.896796e-05	7.896796e-05
+6.250000e-01	1.250000e-01	1.250000e-01	1.896552e-03	7.671077e-05	7.671077e-05
+8.750000e-01	1.250000e-01	1.250000e-01	1.805158e-03	7.438476e-05	7.438476e-05
+1.125000e+00	1.250000e-01	1.250000e-01	1.660305e-03	6.772743e-05	6.772743e-05
+1.375000e+00	1.250000e-01	1.250000e-01	1.334604e-03	6.188306e-05	6.188306e-05
+1.625000e+00	1.250000e-01	1.250000e-01	1.182592e-03	5.760815e-05	5.760815e-05
+1.875000e+00	1.250000e-01	1.250000e-01	9.622642e-04	5.401551e-05	5.401551e-05
+2.125000e+00	1.250000e-01	1.250000e-01	8.838951e-04	5.273825e-05	5.273825e-05
+2.375000e+00	1.250000e-01	1.250000e-01	6.113173e-04	4.678874e-05	4.678874e-05
+2.625000e+00	1.250000e-01	1.250000e-01	5.289788e-04	4.325676e-05	4.325676e-05
+2.875000e+00	1.250000e-01	1.250000e-01	3.882883e-04	3.985775e-05	3.985775e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_EL/d27-x01-y01
+Path=/REF/ATLAS_2016_I1467454_EL/d27-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.500000e-01	2.500000e-01	2.500000e-01	2.480916e-04	1.224477e-05	1.224477e-05
+7.500000e-01	2.500000e-01	2.500000e-01	2.175573e-04	1.143573e-05	1.143573e-05
+1.250000e+00	2.500000e-01	2.500000e-01	2.062441e-04	1.100656e-05	1.100656e-05
+1.750000e+00	2.500000e-01	2.500000e-01	1.541353e-04	9.826052e-06	9.826052e-06
+2.250000e+00	2.500000e-01	2.500000e-01	9.611830e-05	8.132085e-06	8.132085e-06
+2.750000e+00	2.500000e-01	2.500000e-01	4.706414e-05	6.864430e-06	6.864430e-06
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_EL/d28-x01-y01
+Path=/REF/ATLAS_2016_I1467454_EL/d28-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.500000e-01	2.500000e-01	2.500000e-01	7.296015e-06	7.632622e-07	7.632622e-07
+7.500000e-01	2.500000e-01	2.500000e-01	8.260870e-06	8.215309e-07	8.215309e-07
+1.250000e+00	2.500000e-01	2.500000e-01	8.165569e-06	8.071119e-07	8.071119e-07
+1.750000e+00	2.500000e-01	2.500000e-01	6.484230e-06	7.331769e-07	7.331769e-07
+2.250000e+00	2.500000e-01	2.500000e-01	2.666667e-06	5.268607e-07	5.268607e-07
+2.750000e+00	2.500000e-01	2.500000e-01	1.696429e-06	4.601201e-07	4.601201e-07
+END YODA_SCATTER2D
diff --git a/data/anainfo/ATLAS_2016_I1467454_MU.info b/analyses/pluginATLAS/ATLAS_2016_I1467454_MU.info
rename from data/anainfo/ATLAS_2016_I1467454_MU.info
rename to analyses/pluginATLAS/ATLAS_2016_I1467454_MU.info
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1467454_MU.plot b/analyses/pluginATLAS/ATLAS_2016_I1467454_MU.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1467454_MU.plot
@@ -0,0 +1,59 @@
+# BEGIN PLOT /ATLAS_2016_I1467454_MU/*
+LogY=1
+XTwosidedTicks=1
+YTwosidedTicks=1
+LeftMargin=1.6
+LegendAlign=r
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_MU/d29
+XLabel=$m_{\mu\mu}$ [GeV]
+YLabel=$\frac{\text{d}\sigma}{\text{d} m_{\mu\mu}}$ [pb/GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_MU/d30
+XLabel=$|y_{\mu\mu}|$
+YLabel=$\frac{\text{d}^2\sigma}{\text{d} m_{\mu\mu} \text{d}y_{\mu\mu}}$ [pb/GeV]
+Title=116 GeV $< m_{\mu\mu} <$ 150 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_MU/d3[1-4]
+XLabel=$|y_{\mu\mu}|$
+YLabel=$\frac{\text{d}^2\sigma}{\text{d} m_{\mu\mu} \text{d}y_{\mu\mu}}$ [pb/GeV]
+Title=150 GeV $< m_{\mu\mu} <$ 200 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_MU/d35
+Title=200 GeV $< m_{\mu\mu} <$ 300 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_MU/d36
+Title=300 GeV $< m_{\mu\mu} <$ 500 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_MU/d34
+Title=500 GeV $< m_{\mu\mu} <$ 1500 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_MU/d3[5-9]
+XLabel=$|\Delta\eta_{\mu\mu}|$
+YLabel=$\frac{\text{d}^2\sigma}{\text{d} m_{\mu\mu} \text{d}\Delta\eta_{\mu\mu}}$ [pb/GeV]
+Title=116 GeV $< m_{\mu\mu} <$ 150 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_MU/d36
+Title=150 GeV $< m_{\mu\mu} <$ 200 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_MU/d37
+Title=200 GeV $< m_{\mu\mu} <$ 300 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_MU/d38
+Title=300 GeV $< m_{\mu\mu} <$ 500 GeV
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2016_I1467454_MU/d39
+Title=500 GeV $< m_{\mu\mu} <$ 1500 GeV
+# END PLOT
+
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1467454_MU.yoda b/analyses/pluginATLAS/ATLAS_2016_I1467454_MU.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1467454_MU.yoda
@@ -0,0 +1,184 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_MU/d29-x01-y01
+Path=/REF/ATLAS_2016_I1467454_MU/d29-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.230000e+02	7.000000e+00	7.000000e+00	2.132701e-01	4.442986e-03	4.442986e-03
+1.400000e+02	1.000000e+01	1.000000e+01	9.933142e-02	2.116482e-03	2.116482e-03
+1.625000e+02	1.250000e+01	1.250000e+01	4.736337e-02	1.063305e-03	1.063305e-03
+1.875000e+02	1.250000e+01	1.250000e+01	2.413462e-02	6.052931e-04	6.052931e-04
+2.150000e+02	1.500000e+01	1.500000e+01	1.321119e-02	3.658807e-04	3.658807e-04
+2.450000e+02	1.500000e+01	1.500000e+01	7.596525e-03	2.336472e-04	2.336472e-04
+2.800000e+02	2.000000e+01	2.000000e+01	4.291225e-03	1.428404e-04	1.428404e-04
+3.400000e+02	4.000000e+01	4.000000e+01	1.835749e-03	6.479959e-05	6.479959e-05
+4.400000e+02	6.000000e+01	6.000000e+01	6.171649e-04	2.554347e-05	2.554347e-05
+6.000000e+02	1.000000e+02	1.000000e+02	1.486486e-04	8.489907e-06	8.489907e-06
+8.500000e+02	1.500000e+02	1.500000e+02	2.557692e-05	2.558715e-06	2.558715e-06
+1.250000e+03	2.500000e+02	2.500000e+02	2.080537e-06	5.453944e-07	5.453944e-07
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_MU/d30-x01-y01
+Path=/REF/ATLAS_2016_I1467454_MU/d30-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e-01	1.000000e-01	1.000000e-01	3.814042e-02	8.854822e-04	8.854822e-04
+3.000000e-01	1.000000e-01	1.000000e-01	3.745247e-02	8.727310e-04	8.727310e-04
+5.000000e-01	1.000000e-01	1.000000e-01	3.700190e-02	8.614372e-04	8.614372e-04
+7.000000e-01	1.000000e-01	1.000000e-01	3.766603e-02	8.752795e-04	8.752795e-04
+9.000000e-01	1.000000e-01	1.000000e-01	3.738140e-02	8.638259e-04	8.638259e-04
+1.100000e+00	1.000000e-01	1.000000e-01	3.690702e-02	8.407999e-04	8.407999e-04
+1.300000e+00	1.000000e-01	1.000000e-01	3.599240e-02	8.262589e-04	8.262589e-04
+1.500000e+00	1.000000e-01	1.000000e-01	3.304762e-02	7.629635e-04	7.629635e-04
+1.700000e+00	1.000000e-01	1.000000e-01	2.790476e-02	6.702954e-04	6.702954e-04
+1.900000e+00	1.000000e-01	1.000000e-01	2.163966e-02	5.555115e-04	5.555115e-04
+2.100000e+00	1.000000e-01	1.000000e-01	1.489971e-02	4.292566e-04	4.292566e-04
+2.300000e+00	1.000000e-01	1.000000e-01	7.100478e-03	2.961844e-04	2.961844e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_MU/d31-x01-y01
+Path=/REF/ATLAS_2016_I1467454_MU/d31-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e-01	1.000000e-01	1.000000e-01	9.665072e-03	3.025646e-04	3.025646e-04
+3.000000e-01	1.000000e-01	1.000000e-01	9.683605e-03	2.992532e-04	2.992532e-04
+5.000000e-01	1.000000e-01	1.000000e-01	9.587728e-03	2.964453e-04	2.964453e-04
+7.000000e-01	1.000000e-01	1.000000e-01	9.865900e-03	2.910023e-04	2.910023e-04
+9.000000e-01	1.000000e-01	1.000000e-01	9.530651e-03	2.773731e-04	2.773731e-04
+1.100000e+00	1.000000e-01	1.000000e-01	9.145053e-03	2.597903e-04	2.597903e-04
+1.300000e+00	1.000000e-01	1.000000e-01	8.542665e-03	2.416231e-04	2.416231e-04
+1.500000e+00	1.000000e-01	1.000000e-01	7.519231e-03	2.222947e-04	2.222947e-04
+1.700000e+00	1.000000e-01	1.000000e-01	6.306654e-03	1.898292e-04	1.898292e-04
+1.900000e+00	1.000000e-01	1.000000e-01	4.537572e-03	1.547439e-04	1.547439e-04
+2.100000e+00	1.000000e-01	1.000000e-01	3.227666e-03	1.262508e-04	1.262508e-04
+2.300000e+00	1.000000e-01	1.000000e-01	1.676301e-03	1.023642e-04	1.023642e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_MU/d32-x01-y01
+Path=/REF/ATLAS_2016_I1467454_MU/d32-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e-01	1.000000e-01	1.000000e-01	2.341040e-03	9.989963e-05	9.989963e-05
+3.000000e-01	1.000000e-01	1.000000e-01	2.278846e-03	9.775161e-05	9.775161e-05
+5.000000e-01	1.000000e-01	1.000000e-01	2.237223e-03	9.372335e-05	9.372335e-05
+7.000000e-01	1.000000e-01	1.000000e-01	2.295082e-03	9.061942e-05	9.061942e-05
+9.000000e-01	1.000000e-01	1.000000e-01	2.164251e-03	8.443354e-05	8.443354e-05
+1.100000e+00	1.000000e-01	1.000000e-01	2.054002e-03	7.783556e-05	7.783556e-05
+1.300000e+00	1.000000e-01	1.000000e-01	1.819942e-03	6.802299e-05	6.802299e-05
+1.500000e+00	1.000000e-01	1.000000e-01	1.605416e-03	6.159443e-05	6.159443e-05
+1.700000e+00	1.000000e-01	1.000000e-01	1.285024e-03	5.257618e-05	5.257618e-05
+1.900000e+00	1.000000e-01	1.000000e-01	9.623552e-04	4.465370e-05	4.465370e-05
+2.100000e+00	1.000000e-01	1.000000e-01	5.660559e-04	3.470066e-05	3.470066e-05
+2.300000e+00	1.000000e-01	1.000000e-01	2.201923e-04	2.480464e-05	2.480464e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_MU/d33-x01-y01
+Path=/REF/ATLAS_2016_I1467454_MU/d33-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.000000e-01	2.000000e-01	2.000000e-01	3.590734e-04	1.893580e-05	1.893580e-05
+6.000000e-01	2.000000e-01	2.000000e-01	3.166023e-04	1.626732e-05	1.626732e-05
+1.000000e+00	2.000000e-01	2.000000e-01	2.988395e-04	1.402955e-05	1.402955e-05
+1.400000e+00	2.000000e-01	2.000000e-01	2.425121e-04	1.127616e-05	1.127616e-05
+1.800000e+00	2.000000e-01	2.000000e-01	1.240385e-04	7.603871e-06	7.603871e-06
+2.200000e+00	2.000000e-01	2.000000e-01	3.789778e-05	4.364831e-06	4.364831e-06
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_MU/d34-x01-y01
+Path=/REF/ATLAS_2016_I1467454_MU/d34-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.000000e-01	2.000000e-01	2.000000e-01	1.409266e-05	1.281425e-06	1.281425e-06
+6.000000e-01	2.000000e-01	2.000000e-01	1.245174e-05	1.132287e-06	1.132287e-06
+1.000000e+00	2.000000e-01	2.000000e-01	1.156069e-05	1.019834e-06	1.019834e-06
+1.400000e+00	2.000000e-01	2.000000e-01	7.764933e-06	7.960476e-07	7.960476e-07
+1.800000e+00	2.000000e-01	2.000000e-01	2.005758e-06	3.952412e-07	3.952412e-07
+2.200000e+00	2.000000e-01	2.000000e-01	2.811016e-07	1.318888e-07	1.318888e-07
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_MU/d35-x01-y01
+Path=/REF/ATLAS_2016_I1467454_MU/d35-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e-01	1.250000e-01	1.250000e-01	4.674952e-02	1.030612e-03	1.030612e-03
+3.750000e-01	1.250000e-01	1.250000e-01	4.422159e-02	9.748829e-04	9.748829e-04
+6.250000e-01	1.250000e-01	1.250000e-01	4.231137e-02	9.318112e-04	9.318112e-04
+8.750000e-01	1.250000e-01	1.250000e-01	3.816794e-02	8.636419e-04	8.636419e-04
+1.125000e+00	1.250000e-01	1.250000e-01	3.469582e-02	7.789192e-04	7.789192e-04
+1.375000e+00	1.250000e-01	1.250000e-01	2.934473e-02	6.806459e-04	6.806459e-04
+1.625000e+00	1.250000e-01	1.250000e-01	2.365184e-02	5.764455e-04	5.764455e-04
+1.875000e+00	1.250000e-01	1.250000e-01	1.893158e-02	4.721523e-04	4.721523e-04
+2.125000e+00	1.250000e-01	1.250000e-01	1.037998e-02	2.983229e-04	2.983229e-04
+2.375000e+00	1.250000e-01	1.250000e-01	3.446691e-03	1.451708e-04	1.451708e-04
+2.625000e+00	1.250000e-01	1.250000e-01	5.395814e-04	5.184476e-05	5.184476e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_MU/d36-x01-y01
+Path=/REF/ATLAS_2016_I1467454_MU/d36-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e-01	1.250000e-01	1.250000e-01	1.051109e-02	2.749007e-04	2.749007e-04
+3.750000e-01	1.250000e-01	1.250000e-01	9.932498e-03	2.614719e-04	2.614719e-04
+6.250000e-01	1.250000e-01	1.250000e-01	9.045323e-03	2.427115e-04	2.427115e-04
+8.750000e-01	1.250000e-01	1.250000e-01	8.554913e-03	2.375433e-04	2.375433e-04
+1.125000e+00	1.250000e-01	1.250000e-01	7.490385e-03	2.147534e-04	2.147534e-04
+1.375000e+00	1.250000e-01	1.250000e-01	6.589817e-03	2.024694e-04	2.024694e-04
+1.625000e+00	1.250000e-01	1.250000e-01	5.656759e-03	1.833000e-04	1.833000e-04
+1.875000e+00	1.250000e-01	1.250000e-01	4.674952e-03	1.658785e-04	1.658785e-04
+2.125000e+00	1.250000e-01	1.250000e-01	3.590476e-03	1.407632e-04	1.407632e-04
+2.375000e+00	1.250000e-01	1.250000e-01	2.753075e-03	1.178367e-04	1.178367e-04
+2.625000e+00	1.250000e-01	1.250000e-01	1.832707e-03	8.783619e-05	8.783619e-05
+2.875000e+00	1.250000e-01	1.250000e-01	7.265193e-04	5.449864e-05	5.449864e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_MU/d37-x01-y01
+Path=/REF/ATLAS_2016_I1467454_MU/d37-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e-01	1.250000e-01	1.250000e-01	2.151163e-03	7.033348e-05	7.033348e-05
+3.750000e-01	1.250000e-01	1.250000e-01	2.042594e-03	6.869315e-05	6.869315e-05
+6.250000e-01	1.250000e-01	1.250000e-01	1.907067e-03	6.620022e-05	6.620022e-05
+8.750000e-01	1.250000e-01	1.250000e-01	1.843629e-03	6.621684e-05	6.621684e-05
+1.125000e+00	1.250000e-01	1.250000e-01	1.565217e-03	6.098325e-05	6.098325e-05
+1.375000e+00	1.250000e-01	1.250000e-01	1.420290e-03	5.850836e-05	5.850836e-05
+1.625000e+00	1.250000e-01	1.250000e-01	1.225869e-03	5.524576e-05	5.524576e-05
+1.875000e+00	1.250000e-01	1.250000e-01	1.030829e-03	5.232914e-05	5.232914e-05
+2.125000e+00	1.250000e-01	1.250000e-01	8.448940e-04	4.712510e-05	4.712510e-05
+2.375000e+00	1.250000e-01	1.250000e-01	6.051873e-04	4.085351e-05	4.085351e-05
+2.625000e+00	1.250000e-01	1.250000e-01	4.694073e-04	3.645998e-05	3.645998e-05
+2.875000e+00	1.250000e-01	1.250000e-01	3.519924e-04	3.108912e-05	3.108912e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_MU/d38-x01-y01
+Path=/REF/ATLAS_2016_I1467454_MU/d38-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.500000e-01	2.500000e-01	2.500000e-01	2.582205e-04	1.086062e-05	1.086062e-05
+7.500000e-01	2.500000e-01	2.500000e-01	2.575024e-04	1.081204e-05	1.081204e-05
+1.250000e+00	2.500000e-01	2.500000e-01	2.067633e-04	9.971908e-06	9.971908e-06
+1.750000e+00	2.500000e-01	2.500000e-01	1.650579e-04	9.464600e-06	9.464600e-06
+2.250000e+00	2.500000e-01	2.500000e-01	9.238921e-05	7.731492e-06	7.731492e-06
+2.750000e+00	2.500000e-01	2.500000e-01	6.484150e-05	6.684967e-06	6.684967e-06
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2016_I1467454_MU/d39-x01-y01
+Path=/REF/ATLAS_2016_I1467454_MU/d39-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.500000e-01	2.500000e-01	2.500000e-01	7.922705e-06	7.355753e-07	7.355753e-07
+7.500000e-01	2.500000e-01	2.500000e-01	8.280193e-06	7.524049e-07	7.524049e-07
+1.250000e+00	2.500000e-01	2.500000e-01	6.805019e-06	6.997268e-07	6.997268e-07
+1.750000e+00	2.500000e-01	2.500000e-01	6.605593e-06	7.063971e-07	7.063971e-07
+2.250000e+00	2.500000e-01	2.500000e-01	4.721689e-06	6.156691e-07	6.156691e-07
+2.750000e+00	2.500000e-01	2.500000e-01	2.692308e-06	4.944253e-07	4.944253e-07
+END YODA_SCATTER2D
+
diff --git a/src/Analyses/ATLAS_2016_I1468167.cc b/analyses/pluginATLAS/ATLAS_2016_I1468167.cc
rename from src/Analyses/ATLAS_2016_I1468167.cc
rename to analyses/pluginATLAS/ATLAS_2016_I1468167.cc
diff --git a/data/anainfo/ATLAS_2016_I1468167.info b/analyses/pluginATLAS/ATLAS_2016_I1468167.info
rename from data/anainfo/ATLAS_2016_I1468167.info
rename to analyses/pluginATLAS/ATLAS_2016_I1468167.info
diff --git a/data/plotinfo/ATLAS_2016_I1468167.plot b/analyses/pluginATLAS/ATLAS_2016_I1468167.plot
rename from data/plotinfo/ATLAS_2016_I1468167.plot
rename to analyses/pluginATLAS/ATLAS_2016_I1468167.plot
diff --git a/data/refdata/ATLAS_2016_I1468167.yoda b/analyses/pluginATLAS/ATLAS_2016_I1468167.yoda
rename from data/refdata/ATLAS_2016_I1468167.yoda
rename to analyses/pluginATLAS/ATLAS_2016_I1468167.yoda
diff --git a/src/Analyses/ATLAS_2016_I1468168.cc b/analyses/pluginATLAS/ATLAS_2016_I1468168.cc
rename from src/Analyses/ATLAS_2016_I1468168.cc
rename to analyses/pluginATLAS/ATLAS_2016_I1468168.cc
--- a/src/Analyses/ATLAS_2016_I1468168.cc
+++ b/analyses/pluginATLAS/ATLAS_2016_I1468168.cc
@@ -1,81 +1,81 @@
 #include "Rivet/Analysis.hh"
 #include "Rivet/Projections/FinalState.hh"
 #include "Rivet/Projections/IdentifiedFinalState.hh"
 #include "Rivet/Projections/PromptFinalState.hh"
 #include "Rivet/Projections/DressedLeptons.hh"
 
 namespace Rivet {
 
 
   class ATLAS_2016_I1468168 : public Analysis {
   public:
 
-    DEFAULT_RIVET_ANALYSIS_CONSTRUCTOR(ATLAS_2016_I1468168);
+    DEFAULT_RIVET_ANALYSIS_CTOR(ATLAS_2016_I1468168);
 
     void init() {
       // Eta ranges
       Cut eta_full = Cuts::abseta < 5.0 && Cuts::pT >= 1.0*MeV;
       // Lepton cuts
       Cut lep_cuts = Cuts::abseta < 2.5 && Cuts::pT >= 25.0*GeV;
 
       // All final state particles
       FinalState fs(eta_full);
 
       // Get photons to dress leptons
       IdentifiedFinalState photons(fs);
       photons.acceptIdPair(PID::PHOTON);
 
       // Projection to find the electrons
       IdentifiedFinalState el_id(fs);
       el_id.acceptIdPair(PID::ELECTRON);
       PromptFinalState electrons(el_id);
       electrons.acceptTauDecays(true);
       DressedLeptons dressedelectrons(photons, electrons, 0.1, lep_cuts, true, true);
       addProjection(dressedelectrons, "DressedElectrons");
 
       // Projection to find the muons
       IdentifiedFinalState mu_id(fs);
       mu_id.acceptIdPair(PID::MUON);
       PromptFinalState muons(mu_id);
       muons.acceptTauDecays(true);
       DressedLeptons dressedmuons(photons, muons, 0.1, lep_cuts, true, true);
       addProjection(dressedmuons, "DressedMuons");
 
       /// @todo Make this a counter or Scatter1D?
       _hist = bookHisto1D("Passed_events", 1, 0, 1);
     }
 
 
     void analyze(const Event& event) {
 
       // Get the selected objects, using the projections.
       const size_t num_es = applyProjection<DressedLeptons>(event, "DressedElectrons").dressedLeptons().size();
       const size_t num_mus = applyProjection<DressedLeptons>(event, "DressedMuons").dressedLeptons().size();
 
       // Evaluate basic event selection
       const bool pass_emu = num_es == 1 && num_mus == 1;
       if (!pass_emu) vetoEvent;
 
       // Fill histogram to measure the event acceptance
       _hist->fill(0.5, event.weight());
     }
 
 
     void finalize() {
       // Normalize to cross-section
       const double sf(crossSection() / sumOfWeights());
       scale(_hist, sf);
     }
 
 
    private:
 
     Histo1DPtr _hist;
 
   };
 
 
   // The hook for the plugin system
   DECLARE_RIVET_PLUGIN(ATLAS_2016_I1468168);
 
 }
diff --git a/data/anainfo/ATLAS_2016_I1468168.info b/analyses/pluginATLAS/ATLAS_2016_I1468168.info
rename from data/anainfo/ATLAS_2016_I1468168.info
rename to analyses/pluginATLAS/ATLAS_2016_I1468168.info
diff --git a/data/plotinfo/ATLAS_2016_I1468168.plot b/analyses/pluginATLAS/ATLAS_2016_I1468168.plot
rename from data/plotinfo/ATLAS_2016_I1468168.plot
rename to analyses/pluginATLAS/ATLAS_2016_I1468168.plot
diff --git a/data/refdata/ATLAS_2016_I1468168.yoda b/analyses/pluginATLAS/ATLAS_2016_I1468168.yoda
rename from data/refdata/ATLAS_2016_I1468168.yoda
rename to analyses/pluginATLAS/ATLAS_2016_I1468168.yoda
diff --git a/src/Analyses/ATLAS_2016_I1479760.cc b/analyses/pluginATLAS/ATLAS_2016_I1479760.cc
rename from src/Analyses/ATLAS_2016_I1479760.cc
rename to analyses/pluginATLAS/ATLAS_2016_I1479760.cc
diff --git a/data/anainfo/ATLAS_2016_I1479760.info b/analyses/pluginATLAS/ATLAS_2016_I1479760.info
rename from data/anainfo/ATLAS_2016_I1479760.info
rename to analyses/pluginATLAS/ATLAS_2016_I1479760.info
diff --git a/data/plotinfo/ATLAS_2016_I1479760.plot b/analyses/pluginATLAS/ATLAS_2016_I1479760.plot
rename from data/plotinfo/ATLAS_2016_I1479760.plot
rename to analyses/pluginATLAS/ATLAS_2016_I1479760.plot
diff --git a/data/refdata/ATLAS_2016_I1479760.yoda b/analyses/pluginATLAS/ATLAS_2016_I1479760.yoda
rename from data/refdata/ATLAS_2016_I1479760.yoda
rename to analyses/pluginATLAS/ATLAS_2016_I1479760.yoda
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1492320_2l2j.cc b/analyses/pluginATLAS/ATLAS_2016_I1492320_2l2j.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1492320_2l2j.cc
@@ -0,0 +1,141 @@
+// -*- C++ -*
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Projections/HeavyHadrons.hh"
+#include "Rivet/Projections/VetoedFinalState.hh"
+#include "Rivet/Projections/MissingMomentum.hh"
+#include "Rivet/Projections/DressedLeptons.hh"
+#include "Rivet/Projections/PromptFinalState.hh"
+
+namespace Rivet {
+
+
+  /// @brief WWW cross-section at 8 TeV, 2L2J mode
+  class ATLAS_2016_I1492320_2l2j : public Analysis {
+  public:
+
+    // Default constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(ATLAS_2016_I1492320_2l2j);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      // Charged leptons within acceptance
+      const PromptFinalState chLep_fid = PromptFinalState(Cuts::abspid == PID::ELECTRON || Cuts::abspid == PID::MUON);
+      const PromptFinalState photon_fs = PromptFinalState(Cuts::abspid == PID::PHOTON);
+      const DressedLeptons dressed_leps(photon_fs, chLep_fid, 0.1, Cuts::pT > 10*GeV, true, false);
+      declare(dressed_leps, "DressedLeptons");
+
+      // Jets, anti-kt 0.4
+      VetoedFinalState fsJets(FinalState(Cuts::abseta < 7.0)); //final state for jet finding: veto leptons and neutrinos
+      fsJets.vetoNeutrinos();
+      fsJets.addVetoOnThisFinalState(photon_fs);
+      fsJets.addVetoOnThisFinalState(chLep_fid);
+      declare(FastJets(fsJets, FastJets::ANTIKT, 0.4), "Jets");
+
+      // b hadrons for b-tagging
+      declare(HeavyHadrons(Cuts::abseta < 2.5 && Cuts::pT > 5*GeV), "Bhadrons");
+
+      // Missing momentum
+      declare(MissingMomentum(), "MET");
+
+      // Histograms
+      _h_2l2j = bookCounter("d01-x01-y02");
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      // Get leptons
+      vector<DressedLepton> leps = apply<DressedLeptons>(event, "DressedLeptons").dressedLeptons();
+      if (leps.size() < 2) vetoEvent;
+      // Sort the dressed leptons by pt of their constituent lepton (bare lepton pt)
+      std::sort(leps.begin(), leps.end() ,
+                [](const DressedLepton& l1, const DressedLepton& l2) {
+                  return (l1.constituentLepton().pT() > l2.constituentLepton().pT()); });
+      if (leps[0].pT() < 30*GeV || leps[0].abseta() > 2.5)  vetoEvent;
+      if (leps[1].pT() < 30*GeV || leps[1].abseta() > 2.5)  vetoEvent;
+
+      // Get jets
+      const Jets& jets = apply<FastJets>(event, "Jets").jetsByPt(Cuts::pT > 15*GeV);
+
+      // Find min dilepton DR and mass
+      double minDRll = DBL_MAX, mll = DBL_MAX;
+      for (size_t i = 0; i < leps.size(); ++i) {
+        for (size_t j = i + 1; j < leps.size(); ++j) {
+          minDRll = min(minDRll, deltaR(leps[i], leps[j]));
+          mll = min(mll, (leps[i].momentum() + leps[j].momentum()).mass());
+        }
+      }
+      if (minDRll < 0.1) vetoEvent;
+      if (mll < 40*GeV) vetoEvent;
+
+      // Require same-sign leading leptons
+      if (leps[0].charge()*leps[0].charge() < 0) vetoEvent;
+
+      // Veto di-electron combinations within 10 GeV of the Z mass
+      if (fabs(mll - 91.188*GeV) < 10*GeV && leps[0].abspid() == PID::ELECTRON && leps[1].abspid() == PID::ELECTRON) vetoEvent;
+
+      // Now jet cuts
+      if (jets.size() < 2) vetoEvent;
+      if (jets[0].pT() < 30*GeV || jets[0].abseta() > 2.5) vetoEvent;
+      if (jets[1].pT() < 20*GeV || jets[1].abseta() > 2.5) vetoEvent;
+
+      // Find closest jet/lepton pair and veto if too close in phi or too far in eta
+      double minDRLepJets = DBL_MAX;
+      for (const Jet& jet : jets) {
+        for (const Particle& lep : leps) minDRLepJets = min(minDRLepJets, deltaR(lep, jet));
+      }
+      if (minDRLepJets < 0.3) vetoEvent;
+      if (fabs(deltaEta(jets[0], jets[1])) > 1.5) vetoEvent;
+
+      // Dijet mass requirement
+      double mjj = (jets[0].momentum() + jets[1].momentum()).mass();
+      if (mjj < 65 || mjj > 105)  vetoEvent;
+      if (!inRange(mjj, 65*GeV, 105*GeV)) vetoEvent;
+
+      // Veto if any good jets are b-jets
+      const Particles& bhadrons = apply<HeavyHadrons>(event, "Bhadrons").bHadrons();
+      for (const Jet& j : jets) {
+        if (j.abseta() > 2.5) continue; // outside acceptance of b-tagging
+        const bool isbJet = any(bhadrons, deltaRLess(j, 0.3));
+        if (isbJet) vetoEvent;
+      }
+
+      // MET vetoing for non-muon events
+      const MissingMomentum& met = apply<MissingMomentum>(event, "MET");
+      if (met.vectorEt().mod() < 55*GeV && (leps[0].abspid() != PID::MUON || leps[1].abspid() != PID::MUON)) vetoEvent;
+
+      // Fill counter
+      _h_2l2j->fill(event.weight());
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+      scale(_h_2l2j, crossSection()/sumOfWeights()/femtobarn);
+    }
+
+    //@}
+
+
+  private:
+
+    /// @name Histograms
+    //@{
+    CounterPtr _h_2l2j;
+    //@}
+
+  };
+
+
+  // Hook for the plugin system
+  DECLARE_RIVET_PLUGIN(ATLAS_2016_I1492320_2l2j);
+
+}
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1492320_2l2j.info b/analyses/pluginATLAS/ATLAS_2016_I1492320_2l2j.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1492320_2l2j.info
@@ -0,0 +1,48 @@
+Name: ATLAS_2016_I1492320_2l2j
+Year: 2016
+Summary: WWW production at 8 TeV, 2L2J mode
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1492320
+Status: VALIDATED
+Authors:
+ - Alex Long <b.long@cern.ch>
+ - Ismet Siral <ismet.siral@cern.ch>
+ - Louis Helary <louis.helary@cern.ch>
+ - Christian Gutschow <chris.g@cern.ch>
+References:
+ - arXiv:1610.05088 [hep-ex]
+Keywords:
+ - triboson
+ - multiboson
+ - leptons
+ - jets
+RunInfo:
+  pp -> WWW production at 8 TeV
+Luminosity_fb: 20.3
+Beams: [p+, p+]
+Energies: [8000]
+PtCuts: [30,30,30,20]
+Description:
+  'This paper reports a search for triboson $W^\pm W^\pm W^\mp$ production in two decay channels
+  ($W^\pm W^\pm W^\mp \to \ell^\pm\nu \ell^\pm\nu \ell^\mp\nu$) and ($W^\pm W^\pm W^\mp \to \ell^\pm\nu \ell^\pm\nu jj$ with
+  $\ell = e,\mu$) in proton-proton collision data corresponding to an integrated luminosity of 20.3 fb${}^{-1}$ at a
+  centre-of-mass energy of 8 TeV with the ATLAS detector at the Large Hadron Collider. Events with exactly three charged
+  leptons, or two leptons with the same electric charge in association with two jets, are selected. The total number of events
+  observed in data is consistent with the Standard Model (SM) predictions. The observed 95 % confidence level upper limit on the SM
+  $W^\pm W^\pm W^\mp$ production cross section is found to be 730 fb with an expected limit of 560 fb in the absence of
+  SM $W^\pm W^\pm W^\mp$ production. Limits are also set on $WWWW$ anomalous quartic gauge couplings.'
+BibKey: Aaboud:2016ftt
+BibTeX: '@article{Aaboud:2016ftt,
+      author         = "Aaboud, Morad and others",
+      title          = "{Search for triboson $W^{\pm}W^{\pm}W^{\mp}$ production
+                        in $pp$ collisions at $\sqrt{s}=8$ TeV with the ATLAS
+                        detector}",
+      collaboration  = "ATLAS",
+      year           = "2016",
+      eprint         = "1610.05088",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2016-172",
+      SLACcitation   = "%%CITATION = ARXIV:1610.05088;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1492320_2l2j.plot b/analyses/pluginATLAS/ATLAS_2016_I1492320_2l2j.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1492320_2l2j.plot
@@ -0,0 +1,6 @@
+# BEGIN PLOT /ATLAS_2016_I1492320_2l2j/d..
+LogY=0
+YLabel=Fiducial Cross section [fb]
+LegendAlign=r
+# END PLOT
+
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1492320_2l2j.yoda b/analyses/pluginATLAS/ATLAS_2016_I1492320_2l2j.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1492320_2l2j.yoda
@@ -0,0 +1,9 @@
+BEGIN YODA_SCATTER1D /REF/ATLAS_2016_I1492320_2l2j/d01-x01-y02
+IsRef=1
+Path=/REF/ATLAS_2016_I1492320_2l2j/d01-x01-y02
+Title=doi:10.17182/hepdata.76728.v1/t1
+Type=Scatter1D
+# xval	 xerr-	 xerr+
+2.400000e-01	3.807887e-01	4.338202e-01
+END YODA_SCATTER1D
+
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1492320_3l.cc b/analyses/pluginATLAS/ATLAS_2016_I1492320_3l.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1492320_3l.cc
@@ -0,0 +1,141 @@
+// -*- C++ -*
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Projections/VetoedFinalState.hh"
+#include "Rivet/Projections/MissingMomentum.hh"
+#include "Rivet/Projections/DressedLeptons.hh"
+#include "Rivet/Projections/PromptFinalState.hh"
+
+namespace Rivet {
+
+
+  /// @brief WWW cross-section at 8 TeV, 3L mode
+  class ATLAS_2016_I1492320_3l : public Analysis {
+  public:
+
+    // Default constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(ATLAS_2016_I1492320_3l);
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      // Charged leptons within acceptance
+      const PromptFinalState chLep_fid = PromptFinalState(Cuts::abspid == PID::ELECTRON || Cuts::abspid == PID::MUON);
+      const PromptFinalState photon_fs = PromptFinalState(Cuts::abspid == PID::PHOTON);
+      const DressedLeptons dressed_leps(photon_fs, chLep_fid, 0.1, Cuts::pT > 20*GeV && Cuts::abseta < 2.5, true, false);
+      declare(dressed_leps, "DressedLeptons");
+
+      // Jets, anti-kt 0.4
+      VetoedFinalState fsJets(FinalState(Cuts::abseta < 7.0)); //final state for jet finding: veto leptons and neutrinos
+      fsJets.vetoNeutrinos();
+      fsJets.addVetoOnThisFinalState(photon_fs);
+      fsJets.addVetoOnThisFinalState(chLep_fid);
+      declare(FastJets(fsJets, FastJets::ANTIKT, 0.4), "Jets");
+
+      // Missing momentum
+      declare(MissingMomentum(), "MET");
+
+      // Histograms
+      _h_fiducial_3l = bookCounter("d01-x01-y01");
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      // Get the dressed leptons, sorted by pT of their constituent bare lepton (!!)
+      vector<DressedLepton> _vbs_lep = apply<DressedLeptons>(event, "DressedLeptons").dressedLeptons();
+      if (_vbs_lep.size() != 3)  vetoEvent;
+      std::sort(_vbs_lep.begin(), _vbs_lep.end(), [](const DressedLepton& l1, const DressedLepton& l2) {
+        return (l1.constituentLepton().pT() > l2.constituentLepton().pT());
+      });
+
+      // Get the jets
+      const Jets& _vbs_jets = apply<FastJets>(event, "Jets").jetsByPt(Cuts::pT > 25*GeV && Cuts::abseta < 4.5);
+      if (_vbs_jets.size() > 1) vetoEvent;
+
+      // Determine nsfos pairs for channel classification
+      int nSFOS = 0;
+      for (size_t i = 0; i < _vbs_lep.size(); ++i) {
+        const double ch_l0 = _vbs_lep[i].charge();
+        for (size_t j = i + 1; j < _vbs_lep.size(); ++j) {
+          const double ch_l1 = _vbs_lep[j].charge();
+          if (_vbs_lep[i].abspid() == _vbs_lep[j].abspid() && ch_l0*ch_l1 < 0) ++nSFOS;
+        }
+      }
+
+      double minDRll = DBL_MAX, mSFOS_MinDiff = DBL_MAX, meeSS_MinDiff = DBL_MAX, mSF_min = DBL_MAX;
+      for (size_t i = 0; i < _vbs_lep.size(); ++i) {
+        const double ch_l0 = _vbs_lep[i].charge();
+        for (size_t j = i + 1; j < _vbs_lep.size(); ++j) {
+          const double ch_l1 = _vbs_lep[j].charge();
+          const bool samesign = ch_l0*ch_l1 > 0;
+
+          // Update min dR between leptons
+          minDRll = min(minDRll, deltaR(_vbs_lep[i], _vbs_lep[j]));
+
+          // Require same flavour
+          if (_vbs_lep[i].abspid() != _vbs_lep[j].abspid()) continue;
+
+          // SF dilepton mass (used several times)
+          const double mSF = (_vbs_lep[i].momentum() + _vbs_lep[j].momentum()).mass();
+
+          // Determine min for all same-flavor pairs
+          mSF_min = min(mSF, mSF_min);
+
+          // Determine min for all m_ee same-sign pairs
+          if (_vbs_lep[i].abspid() == PID::ELECTRON && samesign) {
+            if (fabs(mSF-ZMASS) < fabs(meeSS_MinDiff-ZMASS)) meeSS_MinDiff = mSF;
+          }
+
+          // Determine min for all mSFOS pairs
+          if (!samesign && fabs(mSF-ZMASS) < abs(mSFOS_MinDiff-ZMASS)) mSFOS_MinDiff = mSF;
+        }
+      }
+
+      if (minDRll < 0.1) vetoEvent;
+      if (nSFOS == 0 && mSF_min < 20*GeV) vetoEvent;
+      if (nSFOS == 0 && fabs(meeSS_MinDiff - ZMASS) < 15*GeV) vetoEvent;
+      if (nSFOS == 1 && ((ZMASS - mSFOS_MinDiff) < 35*GeV && (mSFOS_MinDiff - ZMASS) < 20*GeV)) vetoEvent;
+      if (nSFOS == 2 && fabs(mSFOS_MinDiff - ZMASS) < 20*GeV) vetoEvent;
+
+      const Vector3& met = -1.0 * apply<MissingMomentum>(event, "MET").vectorEt();
+      if (nSFOS == 1 && met.mod() < 45*GeV) vetoEvent;
+      if (nSFOS == 2 && met.mod() < 55*GeV) vetoEvent;
+
+      const double dPhi = deltaPhi((_vbs_lep[0].momentum() + _vbs_lep[1].momentum() + _vbs_lep[2].momentum()), met);
+      if (dPhi < 2.5) vetoEvent;
+
+      // Fill histo
+      _h_fiducial_3l->fill(event.weight());
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+      scale(_h_fiducial_3l, crossSection()/sumOfWeights()/femtobarn);
+    }
+
+    //@}
+
+
+  private:
+
+    /// @name Histograms
+    //@{
+    const double ZMASS = 91.1876*GeV;
+    CounterPtr _h_fiducial_3l;
+
+    //@}
+
+  };
+
+
+  // Hook for the plugin system
+  DECLARE_RIVET_PLUGIN(ATLAS_2016_I1492320_3l);
+
+}
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1492320_3l.info b/analyses/pluginATLAS/ATLAS_2016_I1492320_3l.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1492320_3l.info
@@ -0,0 +1,47 @@
+Name: ATLAS_2016_I1492320_3l
+Year: 2016
+Summary: WWW production at 8 TeV, 3L mode
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1492320
+Status: VALIDATED
+Authors:
+ - Alex Long <b.long@cern.ch>
+ - Ismet Siral <ismet.siral@cern.ch>
+ - Louis Helary <louis.helary@cern.ch>
+ - Christian Gutschow <chris.g@cern.ch>
+References:
+ - arXiv:1610.05088 [hep-ex]
+Keywords:
+ - triboson
+ - multiboson
+ - leptons
+RunInfo:
+  pp -> WWW production at 8 TeV
+Luminosity_fb: 20.3
+Beams: [p+, p+]
+Energies: [8000]
+PtCuts: [20,20,20]
+Description:
+  'This paper reports a search for triboson $W^\pm W^\pm W^\mp$ production in two decay channels
+  ($W^\pm W^\pm W^\mp \to \ell^\pm\nu \ell^\pm\nu \ell^\mp\nu$) and ($W^\pm W^\pm W^\mp \to \ell^\pm\nu \ell^\pm\nu jj$ with
+  $\ell = e,\mu$) in proton-proton collision data corresponding to an integrated luminosity of 20.3 fb${}^{-1}$ at a
+  centre-of-mass energy of 8 TeV with the ATLAS detector at the Large Hadron Collider. Events with exactly three charged
+  leptons, or two leptons with the same electric charge in association with two jets, are selected. The total number of events
+  observed in data is consistent with the Standard Model (SM) predictions. The observed 95 % confidence level upper limit on the SM
+  $W^\pm W^\pm W^\mp$ production cross section is found to be 730 fb with an expected limit of 560 fb in the absence of
+  SM $W^\pm W^\pm W^\mp$ production. Limits are also set on $WWWW$ anomalous quartic gauge couplings.'
+BibKey: Aaboud:2016ftt
+BibTeX: '@article{Aaboud:2016ftt,
+      author         = "Aaboud, Morad and others",
+      title          = "{Search for triboson $W^{\pm}W^{\pm}W^{\mp}$ production
+                        in $pp$ collisions at $\sqrt{s}=8$ TeV with the ATLAS
+                        detector}",
+      collaboration  = "ATLAS",
+      year           = "2016",
+      eprint         = "1610.05088",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2016-172",
+      SLACcitation   = "%%CITATION = ARXIV:1610.05088;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1492320_3l.plot b/analyses/pluginATLAS/ATLAS_2016_I1492320_3l.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1492320_3l.plot
@@ -0,0 +1,6 @@
+# BEGIN PLOT /ATLAS_2016_I1492320_3l/d..
+LogY=0
+YLabel=Fiducial Cross section [fb]
+LegendAlign=r
+# END PLOT
+
diff --git a/analyses/pluginATLAS/ATLAS_2016_I1492320_3l.yoda b/analyses/pluginATLAS/ATLAS_2016_I1492320_3l.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2016_I1492320_3l.yoda
@@ -0,0 +1,9 @@
+BEGIN YODA_SCATTER1D /REF/ATLAS_2016_I1492320_3l/d01-x01-y01
+IsRef=1
+Path=/REF/ATLAS_2016_I1492320_3l/d01-x01-y01
+Title=doi:10.17182/hepdata.76728.v1/t1
+Type=Scatter1D
+# xval	 xerr-	 xerr+
+3.100000e-01	4.810405e-01	4.742362e-01
+END YODA_SCATTER1D
+
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1509919.cc b/analyses/pluginATLAS/ATLAS_2017_I1509919.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1509919.cc
@@ -0,0 +1,276 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+
+namespace Rivet {
+
+
+  /// Track-based underlying event at 13 TeV in ATLAS
+  class ATLAS_2017_I1509919 : public Analysis {
+  public:
+
+    // Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(ATLAS_2017_I1509919);
+
+
+    // Pre-run histogram and projection booking
+    void init() {
+
+      declare(ChargedFinalState(Cuts::abseta < 2.5 && Cuts::pT > 500*MeV), "CFS500");
+
+      for (size_t iR = 0; iR < NREGIONS; ++iR) {
+        // Nch profiles vs. pT_lead
+        _hist_nch[iR] = bookProfile1D(1, 1 + iR, 1);
+        // pTsum profiles vs. pT_lead
+        _hist_ptsum[iR] = bookProfile1D(2, 1 + iR, 1);
+        // <pT> profiles vs pT_lead (not measured for trans diff)
+        if (iR != kTransDiff)  _hist_ptavg[iR] = bookProfile1D(3, 1 + iR, 1);
+        // <pT> profiles vs. Nch (not measured for trans diff)
+        if (iR != kTransDiff)  _hist_dn_dpt[iR] = bookProfile1D(4, 1 + iR, 1);
+        // Only measured for trans max/min
+        if ( (iR == kTransMax) || (iR == kTransMin) )  _hist_dn_dpt2[iR] = bookProfile1D(5, 1 + iR, 1);
+      }
+
+      for (size_t iC = 0; iC < NCUTS; ++iC) {
+        // Nch vs. Delta(phi) profiles
+        _hist_N_vs_dPhi[iC] = bookProfile1D(6, 1 + iC, 1);
+        // pT vs. Delta(phi) profiles
+        _hist_pT_vs_dPhi[iC] = bookProfile1D(7, 1 + iC, 1);
+        //ptLead histos only for 1 and 5 GeV cuts
+        if ( (iC == 0) || (iC == 1) )  _hist_ptLead[iC] = bookHisto1D(8, 1 + iC, 1);
+        // 
+        _counters[iC] = bookCounter("Ctr_cut_" + toString(iC));
+      }
+
+    }
+
+
+    void analyze(const Event& event) {
+
+      // Get charged particles (tracks) with pT > 500 MeV
+      const ChargedFinalState& charged500 = apply<ChargedFinalState>(event, "CFS500");
+      const Particles& particlesAll = charged500.particlesByPt();
+      MSG_DEBUG("Num tracks: " << particlesAll.size());
+
+      const Cut& pcut = ( (Cuts::abspid != PID::SIGMAMINUS) && (Cuts::abspid != PID::SIGMAPLUS) &&
+                          (Cuts::abspid != PID::XIMINUS)    && (Cuts::abspid != PID::OMEGAMINUS) );
+      const Particles& particles = charged500.particlesByPt(pcut);
+      MSG_DEBUG("Num tracks without strange baryons: " <<  particles.size());
+
+      // Require at least one track in the event for pTlead histograms
+      if (particles.empty()) vetoEvent;
+      const double weight = event.weight();
+      for (size_t iC = 0; iC < 2; ++iC) {
+        if (particles[0].pT() < PTCUTS[iC]*GeV) continue;
+        _counters[iC]->fill(weight);
+        _hist_ptLead[iC]->fill( particles[0].pT()/GeV, weight);
+      }
+
+      // Require at least one track in the event with pT >= 1 GeV for the rest
+      if (particles[0].pT() < 1*GeV) vetoEvent;
+
+      // Identify leading track and its phi and pT
+      const Particle& p_lead = particles[0];
+      const double philead = p_lead.phi();
+      const double etalead = p_lead.eta();
+      const double pTlead  = p_lead.perp();
+      MSG_DEBUG("Leading track: pT = " << pTlead << ", eta = " << etalead << ", phi = " << philead);
+
+      // Iterate over all particles and count particles and scalar pTsum in three basic regions
+      vector<double> num(NREGIONS, 0), ptSum(NREGIONS, 0.0), avgpt(NREGIONS, 0.0);
+
+      // Temporary histos that bin Nch and pT in dPhi.
+      Histo1D hist_num_dphi(*_hist_N_vs_dPhi[0].get(), "/hist_num_dphi");
+      Histo1D hist_pt_dphi(*_hist_pT_vs_dPhi[0].get(), "/hist_pt_dphi");
+      hist_num_dphi.reset();
+      hist_pt_dphi .reset();
+
+      int    tmpnch[2]   = {0,0};
+      double tmpptsum[2] = {0,0};
+      for (const Particle& p : particles) {
+        const double pT   = p.pT()/GeV;
+        const double dPhi = deltaPhi(philead, p.phi()); // in range (0,pi)
+        const int    ir   = region_index(dPhi); // gives just toward/away/trans
+
+        // Toward/away/trans region: just count
+        num  [ir] += 1;
+        ptSum[ir] += pT;
+
+        // Determine which transverse side
+        if (ir == kTrans) {
+          const size_t iside = (mapAngleMPiToPi(p.phi() - philead) > 0) ? 0 : 1;
+          tmpnch  [iside] += 1;
+          tmpptsum[iside] += p.pT();
+        }
+
+        // Fill temp histos to bin Nch and pT in dPhi
+        if (p.genParticle() != p_lead.genParticle()) { // We don't want to fill all those zeros from the leading track...
+          hist_num_dphi.fill(dPhi/M_PI*180, 1);
+          hist_pt_dphi .fill(dPhi/M_PI*180, pT/GeV);
+        }
+      }
+
+      // Construct max/min/diff regions
+      num[kTransMax ]   = std::max(tmpnch[0], tmpnch[1]);
+      num[kTransMin ]   = std::min(tmpnch[0], tmpnch[1]);
+      num[kTransDiff]   = num[kTransMax ] - num[kTransMin ];
+      ptSum[kTransMax ] = std::max(tmpptsum[0], tmpptsum[1]);
+      ptSum[kTransMin ] = std::min(tmpptsum[0], tmpptsum[1]);
+      ptSum[kTransDiff] = ptSum[kTransMax ] - ptSum[kTransMin ];
+      avgpt[kToward]    = (num[kToward] > 0 ) ? ptSum[kToward] / num[kToward] : 0. ;
+      avgpt[kAway]      = (num[kAway  ] > 0 ) ? ptSum[kAway]   / num[kAway]   : 0. ;
+      avgpt[kTrans]     = (num[kTrans ] > 0 ) ? ptSum[kTrans]  / num[kTrans]  : 0. ;
+      // Avg pt max/min regions determined according sumpt max/min
+      int sumptMaxRegID = (tmpptsum[0] >  tmpptsum[1]) ? 0 : 1 ;
+      int sumptMinRegID = (sumptMaxRegID == 0) ? 1 : 0;
+      avgpt[kTransMax ] = (tmpnch[sumptMaxRegID] > 0) ? tmpptsum[sumptMaxRegID] / tmpnch[sumptMaxRegID] : 0.;
+      avgpt[kTransMin ] = (tmpnch[sumptMinRegID] > 0) ? tmpptsum[sumptMinRegID] / tmpnch[sumptMinRegID] : 0.;
+      avgpt[kTransDiff] = ((tmpnch[sumptMaxRegID] > 0) && (tmpnch[sumptMinRegID] > 0)) ? avgpt[kTransMax ] - avgpt[kTransMin ] : 0.;
+
+
+      // Now fill underlying event histograms
+
+      // The densities are calculated by dividing the UE properties by dEta*dPhi
+      // -- each basic region has a dPhi of 2*PI/3 and dEta is two times 2.5
+      // min/max/diff regions are only half of that
+      const double dEtadPhi[NREGIONS] = { 2*2.5 * 2*PI/3.0, 2*2.5 * 2*PI/3.0, 2*2.5 * 2*PI/3.0,
+                                          2*2.5 *   PI/3.0, 2*2.5 *   PI/3.0, 2*2.5 *   PI/3.0 };
+      for (size_t iR = 0; iR < NREGIONS; ++iR) {
+
+        _hist_nch  [iR]->fill(pTlead/GeV, num[iR]   /dEtadPhi[iR]     , weight);
+        _hist_ptsum[iR]->fill(pTlead/GeV, ptSum[iR] /GeV/dEtadPhi[iR] , weight);
+
+        // <pT> profiles vs. pT_lead (first 3 are the same!)
+        switch (iR) {
+        case kToward    :
+        case kAway      :
+        case kTrans     :
+          if (num[iR] > 0) _hist_ptavg[iR]->fill(pTlead/GeV, avgpt[iR]/GeV, weight);
+          break;
+        case kTransMax  :
+          if (tmpnch[sumptMaxRegID] > 0) _hist_ptavg[iR]->fill(pTlead/GeV, avgpt[iR]/GeV, weight);
+          break;
+        case kTransMin  :
+          if (tmpnch[sumptMinRegID] > 0) _hist_ptavg[iR]->fill(pTlead/GeV, avgpt[iR]/GeV, weight);
+          break;
+        case kTransDiff :
+          break;
+        default: //should not get here!!!
+          MSG_WARNING("Unknown region in <pT> profiles vs.pt lead switch!!! : " << iR);
+        }
+
+        // <pT> profiles vs. Nch (first 3 are the same!)
+        switch (iR) {
+        case kToward    :
+        case kAway      :
+        case kTrans     :
+          if (num[iR] > 0) _hist_dn_dpt[iR]->fill(num[iR] , avgpt[iR]/GeV, weight);
+          break;
+        case kTransMax  :
+          if (tmpnch[sumptMaxRegID] > 0) {
+            _hist_dn_dpt [iR]->fill(num[kTrans]          , avgpt[iR]/GeV, weight);
+            _hist_dn_dpt2[iR]->fill(tmpnch[sumptMaxRegID], avgpt[iR]/GeV, weight);
+          }
+          break;
+        case kTransMin  :
+          if (tmpnch[sumptMinRegID] > 0) {
+            _hist_dn_dpt [iR]->fill(num[kTrans]          , avgpt[iR]/GeV, weight);
+            _hist_dn_dpt2[iR]->fill(tmpnch[sumptMinRegID], avgpt[iR]/GeV, weight);
+          }
+          break;
+        case kTransDiff :
+          break;
+        default : //should not get here!!!
+          MSG_INFO("unknown region in <pT> profiles vs. nch switch!!! : " <<  iR);
+        }
+
+      }
+
+
+      // Update the "proper" dphi profile histograms
+      // Note that we fill dN/dEtadPhi: dEta = 2*2.5, dPhi = 2*PI/nBins
+      const double dEtadPhi2 = (2*2.5 * 2) * M_PI/180.;
+      for (size_t i = 0; i < hist_num_dphi.numBins(); ++i) {
+
+        // First Nch
+        double mean = hist_num_dphi.bin(i).xMid() ;
+        double value = 0.;
+        if (hist_num_dphi.bin(i).numEntries() > 0) {
+          mean  = hist_num_dphi.bin(i).xMean() ;
+          value = hist_num_dphi.bin(i).area()/hist_num_dphi.bin(i).xWidth()/dEtadPhi2;
+        }
+        for (size_t iC = 0; iC < NCUTS; ++iC) {
+          if (pTlead >= PTCUTS[iC]*GeV) _hist_N_vs_dPhi[iC] ->fill(mean, value, weight);
+        }
+
+        // Then pT
+        mean = hist_pt_dphi.bin(i).xMid();
+        value = 0.;
+        if (hist_pt_dphi.bin(i).numEntries() > 0) {
+          mean  = hist_pt_dphi.bin(i).xMean() ;
+          value = hist_pt_dphi.bin(i).area()/hist_pt_dphi.bin(i).xWidth()/dEtadPhi2;
+        }
+        for (size_t iC = 0; iC < NCUTS; ++iC) {
+          if (pTlead >= PTCUTS[iC]*GeV) _hist_pT_vs_dPhi[iC] ->fill(mean, value, weight);
+        }
+      }
+
+    }
+
+
+    void finalize() {
+      for (size_t iC = 0; iC < NCUTS; ++iC) {
+        if (iC == 0 || iC == 1) scale(_hist_ptLead[iC], 1.0/_counters[iC]->sumW());
+      }
+    }
+
+
+  private:
+
+    enum regionID {
+      kToward = 0,
+      kAway,
+      kTrans,
+      kTransMax,
+      kTransMin,
+      kTransDiff,
+      NREGIONS
+    };
+
+    // Little helper function to identify basic Delta(phi) regions: toward/away/trans
+    int region_index(double dphi) {
+      assert(inRange(dphi, 0.0, PI, CLOSED, CLOSED));
+      if (dphi < PI/3.0)    return kToward;
+      if (dphi < 2*PI/3.0)  return kTrans;
+      return kAway;
+    }
+
+    const static size_t NCUTS = 3;
+    const vector<double> PTCUTS = { 1., 5., 10. };
+
+
+    /// @name Histograms
+    //@{
+
+    // Nch, sumpT, avgpT profiles vs. pTlead
+    Profile1DPtr _hist_nch   [NREGIONS]; //for regions: all 6 regions
+    Profile1DPtr _hist_ptsum [NREGIONS]; //for regions: all 6 regions
+    Profile1DPtr _hist_ptavg [NREGIONS]; //for regions: trans towards/away/all/min/max
+    // Nch, sumpT, avgpT profiles vs. Nch
+    Profile1DPtr _hist_dn_dpt [NREGIONS]; //regions: towards/away/ vs nch(region) & trans all/min/max vs nch(trans)
+    Profile1DPtr _hist_dn_dpt2[NREGIONS]; //regions: trans min/max vs. nch(region)
+
+    Profile1DPtr _hist_N_vs_dPhi [NCUTS];
+    Profile1DPtr _hist_pT_vs_dPhi[NCUTS];
+    Histo1DPtr   _hist_ptLead[NCUTS]; //for 1,5 GeV cuts only
+    CounterPtr   _counters[NCUTS];
+
+    //@}
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(ATLAS_2017_I1509919);
+
+}
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1509919.info b/analyses/pluginATLAS/ATLAS_2017_I1509919.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1509919.info
@@ -0,0 +1,45 @@
+Name: ATLAS_2017_I1509919
+Year: 2017
+Summary: Track-based underlying event at 13 TeV in ATLAS
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1509919
+Status: VALIDATED
+Authors:
+ - Roman Lysak <roman.lysak@cern.ch>
+References:
+ - arXiv:1701.05390
+Keywords:
+ - tracks
+ - UE
+RunInfo:
+  '$pp$ QCD interactions at 13 TeV. Diffractive events should be included.'
+Luminosity_fb: 1.6*E-06
+Beams: [p+, p+]
+Energies: [13000]
+Description:
+  'We present charged-particle distributions sensitive to the underlying event, measured by the ATLAS detector in proton-proton
+  collisions at a centre-of-mass energy of 13 TeV, in low-luminosity Large Hadron Collider fills corresponding to an integrated
+  luminosity of 1.6 nb${}^{-1}$. The distributions were constructed using charged particles with absolute pseudorapidity less
+  than 2.5 and with transverse momentum greater than 500 MeV, in events with at least one such charged particle with transverse
+  momentum above 1 GeV. These distributions characterise the angular distribution of energy and particle flows with respect to
+  the charged particle with highest transverse momentum, as a function of both that momentum and of charged-particle multiplicity.
+  The results have been corrected for detector effects and are compared to the predictions of various Monte Carlo event generators,
+  experimentally establishing the level of underlying-event activity at LHC Run 2 energies and providing inputs for the development
+  of event generator modelling. The current models in use for UE modelling typically describe this data to 5% accuracy, compared
+  with data uncertainties of less than 1%.'
+BibKey: Aaboud:2017fwp
+BibTeX: '@article{Aaboud:2017fwp,
+      author         = "Aaboud, Morad and others",
+      title          = "{Measurement of charged-particle distributions sensitive
+                        to the underlying event in $\sqrt{s} = 13$ TeV
+                        proton-proton collisions with the ATLAS detector at the
+                        LHC}",
+      collaboration  = "ATLAS",
+      year           = "2017",
+      eprint         = "1701.05390",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2016-28, CERN-EP-2016-285",
+      SLACcitation   = "%%CITATION = ARXIV:1701.05390;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1509919.plot b/analyses/pluginATLAS/ATLAS_2017_I1509919.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1509919.plot
@@ -0,0 +1,191 @@
+# BEGIN PLOT /ATLAS_2017_I1509919/d..
+XTwosidedTicks=1
+YTwosidedTicks=1
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d01.*
+XLabel=$p_\perp^\text{lead} \text{[GeV]}$
+YLabel=$\langle N_\text{ch}/ \delta\eta\ \delta\phi \rangle$
+LogY=0
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d01-x01-y01
+Title=Mean charged-particle multiplicity density, towards region
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d01-x02-y01
+Title=Mean charged-particle multiplicity density, away region
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d01-x03-y01
+Title=Mean charged-particle multiplicity density, transverse region
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d01-x04-y01
+Title=Mean charged-particle multiplicity density, trans-max region
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d01-x05-y01
+Title=Mean charged-particle multiplicity density, trans-min region
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d01-x06-y01
+Title=Mean charged-particle multiplicity density, trans-diff region
+# END PLOT
+
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d02.*
+XLabel=$p_\perp^\text{lead} \text{[GeV]}$
+YLabel=$\langle \sum p_\perp / \delta\eta\ \delta\phi \rangle$
+LogY=0
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d02-x01-y01
+Title=Mean $\sum p_\perp$ density, towards region
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d02-x02-y01
+Title=Mean $\sum p_\perp$ density, away region
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d02-x03-y01
+Title=Mean $\sum p_\perp$ density, transverse region
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d02-x04-y01
+Title=Mean $\sum p_\perp$ density, trans-max region
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d02-x05-y01
+Title=Mean $\sum p_\perp$ density, trans-min region
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d02-x06-y01
+Title=Mean $\sum p_\perp$ density, trans-diff region
+# END PLOT
+
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d03.*
+XLabel=$p_\perp^\text{lead} \text{[GeV]}$
+YLabel=$\langle \text{mean}\ p_\perp \rangle \text{[GeV]}$
+LogY=0
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d03-x01-y01
+Title=Mean average transverse momentum, towards region
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d03-x02-y01
+Title=Mean average transverse momentum, away region
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d03-x03-y01
+Title=Mean average transverse momentum, transverse region
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d03-x04-y01
+Title=Mean average transverse momentum, trans-max region
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d03-x05-y01
+Title=Mean average transverse momentum, trans-min region
+# END PLOT
+
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d04.*
+XLabel=$N_\text{ch} (Transverse)$
+YLabel=$\langle \text{mean}\ p_\perp \rangle \text{[GeV]}$
+LogY=0
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d04-x01-y01
+Title=Mean average transverse momentum, towards region
+XLabel=$N_\text{ch} (Towards)$
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d04-x02-y01
+Title=Mean average transverse momentum, away region
+XLabel=$N_\text{ch} (Away)$
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d04-x03-y01
+Title=Mean average transverse momentum, transverse region
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d04-x04-y01
+Title=Mean average transverse momentum, trans-max region
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d04-x05-y01
+Title=Mean average transverse momentum, trans-min region
+# END PLOT
+
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d05.*
+YLabel=$\langle \text{mean}\ p_\perp \rangle \text{[GeV]}$
+LogY=0
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d05-x04-y01
+Title=Mean average transverse momentum, trans-max region
+XLabel=$N_\text{ch} (\text{Trans-max})$
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d05-x05-y01
+Title=Mean average transverse momentum, trans-min region
+XLabel=$N_\text{ch} (\text{Trans-min})$
+# END PLOT
+
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d06.*
+XLabel=$|\Delta \phi|$ [degrees]
+YLabel=$\langle N_\text{ch}/ \delta\eta\ \delta\phi \rangle$
+LogY=0
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d06-x01-y01
+Title=Mean charged-particle multiplicity density, $p_\perp^\text{lead} > \text{1 GeV}$.
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d06-x02-y01
+Title=Mean charged-particle multiplicity density, $p_\perp^\text{lead} > \text{5 GeV}$.
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d06-x03-y01
+Title=Mean charged-particle multiplicity density, $p_\perp^\text{lead} > \text{10 GeV}$.
+# END PLOT
+
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d07.*
+XLabel=$|\Delta \phi|$ [degrees]
+YLabel=$\langle \sum p_\perp / \delta\eta\ \delta\phi \rangle$
+LogY=0
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d07-x01-y01
+Title=Mean  $\sum p_\perp$ density, $p_\perp^\text{lead} > \text{1 GeV}$.
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d07-x02-y01
+Title=Mean  $\sum p_\perp$ density, $p_\perp^\text{lead} > \text{5 GeV}$.
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d07-x03-y01
+Title=Mean  $\sum p_\perp$ density, $p_\perp^\text{lead} > \text{10 GeV}$.
+# END PLOT
+
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d08.*
+XLabel=$p_\perp^\text{lead} [GeV]$
+YLabel=$1/N_\text{ev}\ \text{d} N_\text{ev}/\text{d}p_\perp^\text{lead} [\text{GeV}^{-1}]$
+LogY=1
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d08-x01-y01
+Title=Unit-normalised distribution of $p_\perp^\text{lead}$, $p_\perp^\text{lead} > \text{1 GeV}$
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1509919/d08-x02-y01
+Title=Unit-normalised distribution of $p_\perp^\text{lead}$, $p_\perp^\text{lead} > \text{5 GeV}$
+# END PLOT
+
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1509919.yoda b/analyses/pluginATLAS/ATLAS_2017_I1509919.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1509919.yoda
@@ -0,0 +1,1264 @@
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d01-x01-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d01-x01-y01
+Title=doi:10.17182/hepdata.76730.v1/t22
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	2.932000e-01	5.022305e-03	5.022338e-03
+1.750000e+00	2.500000e-01	2.500000e-01	4.914000e-01	7.704502e-03	7.704825e-03
+2.250000e+00	2.500000e-01	2.500000e-01	6.972000e-01	8.707926e-03	8.708225e-03
+2.750000e+00	2.500000e-01	2.500000e-01	8.737000e-01	9.535614e-03	9.534542e-03
+3.250000e+00	2.500000e-01	2.500000e-01	1.009000e+00	1.039915e-02	1.039891e-02
+3.750000e+00	2.500000e-01	2.500000e-01	1.105000e+00	1.074319e-02	1.074686e-02
+4.250000e+00	2.500000e-01	2.500000e-01	1.176000e+00	1.149432e-02	1.149350e-02
+4.750000e+00	2.500000e-01	2.500000e-01	1.228000e+00	1.205166e-02	1.205719e-02
+5.250000e+00	2.500000e-01	2.500000e-01	1.267000e+00	1.248554e-02	1.247689e-02
+5.750000e+00	2.500000e-01	2.500000e-01	1.297000e+00	1.282461e-02	1.284658e-02
+6.250000e+00	2.500000e-01	2.500000e-01	1.321000e+00	1.315432e-02	1.313219e-02
+6.750000e+00	2.500000e-01	2.500000e-01	1.346000e+00	1.345714e-02	1.350072e-02
+7.250000e+00	2.500000e-01	2.500000e-01	1.364000e+00	1.376088e-02	1.369397e-02
+7.750000e+00	2.500000e-01	2.500000e-01	1.382000e+00	1.398734e-02	1.407430e-02
+8.500000e+00	5.000000e-01	5.000000e-01	1.398000e+00	1.410138e-02	1.410423e-02
+9.500000e+00	5.000000e-01	5.000000e-01	1.433000e+00	1.472827e-02	1.470612e-02
+1.050000e+01	5.000000e-01	5.000000e-01	1.453000e+00	1.537187e-02	1.542252e-02
+1.150000e+01	5.000000e-01	5.000000e-01	1.482000e+00	1.627945e-02	1.608044e-02
+1.250000e+01	5.000000e-01	5.000000e-01	1.505000e+00	1.732125e-02	1.697123e-02
+1.350000e+01	5.000000e-01	5.000000e-01	1.526000e+00	1.816243e-02	1.788060e-02
+1.500000e+01	1.000000e+00	1.000000e+00	1.557000e+00	1.806536e-02	1.809751e-02
+1.700000e+01	1.000000e+00	1.000000e+00	1.585000e+00	2.022522e-02	1.997853e-02
+1.900000e+01	1.000000e+00	1.000000e+00	1.612000e+00	2.424641e-02	2.267342e-02
+2.250000e+01	2.500000e+00	2.500000e+00	1.651000e+00	2.228825e-02	2.420653e-02
+2.750000e+01	2.500000e+00	2.500000e+00	1.730000e+00	3.095247e-02	3.368920e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d01-x02-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d01-x02-y01
+Title=doi:10.17182/hepdata.76730.v1/t23
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	2.046000e-01	5.097002e-03	5.096742e-03
+1.750000e+00	2.500000e-01	2.500000e-01	4.068000e-01	7.880728e-03	7.880045e-03
+2.250000e+00	2.500000e-01	2.500000e-01	6.179000e-01	8.858835e-03	8.859168e-03
+2.750000e+00	2.500000e-01	2.500000e-01	8.010000e-01	9.677535e-03	9.678129e-03
+3.250000e+00	2.500000e-01	2.500000e-01	9.416000e-01	1.047959e-02	1.048028e-02
+3.750000e+00	2.500000e-01	2.500000e-01	1.044000e+00	1.113291e-02	1.113386e-02
+4.250000e+00	2.500000e-01	2.500000e-01	1.123000e+00	1.197337e-02	1.197364e-02
+4.750000e+00	2.500000e-01	2.500000e-01	1.181000e+00	1.258781e-02	1.259288e-02
+5.250000e+00	2.500000e-01	2.500000e-01	1.227000e+00	1.309318e-02	1.308309e-02
+5.750000e+00	2.500000e-01	2.500000e-01	1.263000e+00	1.352536e-02	1.351349e-02
+6.250000e+00	2.500000e-01	2.500000e-01	1.296000e+00	1.387458e-02	1.390941e-02
+6.750000e+00	2.500000e-01	2.500000e-01	1.325000e+00	1.425587e-02	1.427733e-02
+7.250000e+00	2.500000e-01	2.500000e-01	1.348000e+00	1.459592e-02	1.455145e-02
+7.750000e+00	2.500000e-01	2.500000e-01	1.375000e+00	1.494378e-02	1.505073e-02
+8.500000e+00	5.000000e-01	5.000000e-01	1.401000e+00	1.510077e-02	1.514741e-02
+9.500000e+00	5.000000e-01	5.000000e-01	1.448000e+00	1.585223e-02	1.597070e-02
+1.050000e+01	5.000000e-01	5.000000e-01	1.486000e+00	1.676775e-02	1.669964e-02
+1.150000e+01	5.000000e-01	5.000000e-01	1.533000e+00	1.775036e-02	1.760895e-02
+1.250000e+01	5.000000e-01	5.000000e-01	1.557000e+00	1.855895e-02	1.893489e-02
+1.350000e+01	5.000000e-01	5.000000e-01	1.598000e+00	1.973850e-02	2.032579e-02
+1.500000e+01	1.000000e+00	1.000000e+00	1.648000e+00	2.015464e-02	2.011316e-02
+1.700000e+01	1.000000e+00	1.000000e+00	1.700000e+00	2.305407e-02	2.300304e-02
+1.900000e+01	1.000000e+00	1.000000e+00	1.776000e+00	2.704241e-02	2.557136e-02
+2.250000e+01	2.500000e+00	2.500000e+00	1.828000e+00	2.496032e-02	2.672402e-02
+2.750000e+01	2.500000e+00	2.500000e+00	1.923000e+00	3.510434e-02	3.488255e-02
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d01-x03-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d01-x03-y01
+Title=doi:10.17182/hepdata.76730.v1/t21
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	1.864000e-01	4.742299e-03	4.742318e-03
+1.750000e+00	2.500000e-01	2.500000e-01	3.704000e-01	7.469957e-03	7.469781e-03
+2.250000e+00	2.500000e-01	2.500000e-01	5.632000e-01	8.710913e-03	8.711226e-03
+2.750000e+00	2.500000e-01	2.500000e-01	7.263000e-01	9.271819e-03	9.270612e-03
+3.250000e+00	2.500000e-01	2.500000e-01	8.481000e-01	9.830481e-03	9.830312e-03
+3.750000e+00	2.500000e-01	2.500000e-01	9.310000e-01	9.952811e-03	9.953365e-03
+4.250000e+00	2.500000e-01	2.500000e-01	9.907000e-01	1.058763e-02	1.059291e-02
+4.750000e+00	2.500000e-01	2.500000e-01	1.030000e+00	1.102283e-02	1.102294e-02
+5.250000e+00	2.500000e-01	2.500000e-01	1.060000e+00	1.135026e-02	1.137503e-02
+5.750000e+00	2.500000e-01	2.500000e-01	1.078000e+00	1.159806e-02	1.160494e-02
+6.250000e+00	2.500000e-01	2.500000e-01	1.091000e+00	1.180693e-02	1.181456e-02
+6.750000e+00	2.500000e-01	2.500000e-01	1.104000e+00	1.200199e-02	1.207636e-02
+7.250000e+00	2.500000e-01	2.500000e-01	1.111000e+00	1.215007e-02	1.218419e-02
+7.750000e+00	2.500000e-01	2.500000e-01	1.117000e+00	1.245662e-02	1.242536e-02
+8.500000e+00	5.000000e-01	5.000000e-01	1.123000e+00	1.234205e-02	1.237849e-02
+9.500000e+00	5.000000e-01	5.000000e-01	1.133000e+00	1.278823e-02	1.275952e-02
+1.050000e+01	5.000000e-01	5.000000e-01	1.142000e+00	1.329796e-02	1.326115e-02
+1.150000e+01	5.000000e-01	5.000000e-01	1.150000e+00	1.406436e-02	1.403085e-02
+1.250000e+01	5.000000e-01	5.000000e-01	1.157000e+00	1.517735e-02	1.511055e-02
+1.350000e+01	5.000000e-01	5.000000e-01	1.156000e+00	1.605751e-02	1.599293e-02
+1.500000e+01	1.000000e+00	1.000000e+00	1.186000e+00	1.600002e-02	1.561578e-02
+1.700000e+01	1.000000e+00	1.000000e+00	1.193000e+00	1.780677e-02	1.771531e-02
+1.900000e+01	1.000000e+00	1.000000e+00	1.219000e+00	2.141769e-02	2.016486e-02
+2.250000e+01	2.500000e+00	2.500000e+00	1.202000e+00	1.931166e-02	2.057477e-02
+2.750000e+01	2.500000e+00	2.500000e+00	1.239000e+00	2.944254e-02	2.903988e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d01-x04-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d01-x04-y01
+Title=doi:10.17182/hepdata.76730.v1/t3
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	2.761000e-01	7.326443e-03	7.326464e-03
+1.750000e+00	2.500000e-01	2.500000e-01	5.029000e-01	1.047452e-02	1.047497e-02
+2.250000e+00	2.500000e-01	2.500000e-01	7.279000e-01	1.127338e-02	1.127385e-02
+2.750000e+00	2.500000e-01	2.500000e-01	9.148000e-01	1.211116e-02	1.211248e-02
+3.250000e+00	2.500000e-01	2.500000e-01	1.051000e+00	1.236131e-02	1.236033e-02
+3.750000e+00	2.500000e-01	2.500000e-01	1.143000e+00	1.221120e-02	1.220138e-02
+4.250000e+00	2.500000e-01	2.500000e-01	1.210000e+00	1.291304e-02	1.290741e-02
+4.750000e+00	2.500000e-01	2.500000e-01	1.255000e+00	1.340048e-02	1.340101e-02
+5.250000e+00	2.500000e-01	2.500000e-01	1.288000e+00	1.378197e-02	1.374595e-02
+5.750000e+00	2.500000e-01	2.500000e-01	1.308000e+00	1.400906e-02	1.405333e-02
+6.250000e+00	2.500000e-01	2.500000e-01	1.324000e+00	1.427227e-02	1.424712e-02
+6.750000e+00	2.500000e-01	2.500000e-01	1.340000e+00	1.457926e-02	1.454858e-02
+7.250000e+00	2.500000e-01	2.500000e-01	1.344000e+00	1.475871e-02	1.477350e-02
+7.750000e+00	2.500000e-01	2.500000e-01	1.358000e+00	1.515116e-02	1.501357e-02
+8.500000e+00	5.000000e-01	5.000000e-01	1.362000e+00	1.489921e-02	1.480736e-02
+9.500000e+00	5.000000e-01	5.000000e-01	1.373000e+00	1.530192e-02	1.531248e-02
+1.050000e+01	5.000000e-01	5.000000e-01	1.386000e+00	1.614804e-02	1.603655e-02
+1.150000e+01	5.000000e-01	5.000000e-01	1.400000e+00	1.716267e-02	1.719547e-02
+1.250000e+01	5.000000e-01	5.000000e-01	1.409000e+00	1.763657e-02	1.811563e-02
+1.350000e+01	5.000000e-01	5.000000e-01	1.404000e+00	1.846295e-02	1.932910e-02
+1.500000e+01	1.000000e+00	1.000000e+00	1.449000e+00	1.922478e-02	1.947386e-02
+1.700000e+01	1.000000e+00	1.000000e+00	1.458000e+00	2.245216e-02	2.248113e-02
+1.900000e+01	1.000000e+00	1.000000e+00	1.489000e+00	2.542637e-02	2.600308e-02
+2.250000e+01	2.500000e+00	2.500000e+00	1.485000e+00	2.424667e-02	2.437704e-02
+2.750000e+01	2.500000e+00	2.500000e+00	1.527000e+00	3.842462e-02	3.636526e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d01-x05-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d01-x05-y01
+Title=doi:10.17182/hepdata.76730.v1/t2
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	9.678000e-02	2.124008e-03	2.124002e-03
+1.750000e+00	2.500000e-01	2.500000e-01	2.381000e-01	4.532512e-03	4.532572e-03
+2.250000e+00	2.500000e-01	2.500000e-01	3.986000e-01	6.127931e-03	6.127383e-03
+2.750000e+00	2.500000e-01	2.500000e-01	5.379000e-01	6.424184e-03	6.425535e-03
+3.250000e+00	2.500000e-01	2.500000e-01	6.450000e-01	7.281902e-03	7.282309e-03
+3.750000e+00	2.500000e-01	2.500000e-01	7.188000e-01	7.712805e-03	7.720820e-03
+4.250000e+00	2.500000e-01	2.500000e-01	7.711000e-01	8.295483e-03	8.297889e-03
+4.750000e+00	2.500000e-01	2.500000e-01	8.054000e-01	8.673650e-03	8.666100e-03
+5.250000e+00	2.500000e-01	2.500000e-01	8.316000e-01	8.993502e-03	9.025369e-03
+5.750000e+00	2.500000e-01	2.500000e-01	8.473000e-01	9.226585e-03	9.233151e-03
+6.250000e+00	2.500000e-01	2.500000e-01	8.581000e-01	9.372938e-03	9.423946e-03
+6.750000e+00	2.500000e-01	2.500000e-01	8.683000e-01	9.624077e-03	9.621933e-03
+7.250000e+00	2.500000e-01	2.500000e-01	8.772000e-01	9.820035e-03	9.810128e-03
+7.750000e+00	2.500000e-01	2.500000e-01	8.762000e-01	1.004122e-02	1.007387e-02
+8.500000e+00	5.000000e-01	5.000000e-01	8.844000e-01	9.846974e-03	9.974280e-03
+9.500000e+00	5.000000e-01	5.000000e-01	8.934000e-01	1.041695e-02	1.028330e-02
+1.050000e+01	5.000000e-01	5.000000e-01	8.980000e-01	1.085591e-02	1.101304e-02
+1.150000e+01	5.000000e-01	5.000000e-01	8.996000e-01	1.160477e-02	1.147406e-02
+1.250000e+01	5.000000e-01	5.000000e-01	9.042000e-01	1.289137e-02	1.285406e-02
+1.350000e+01	5.000000e-01	5.000000e-01	9.081000e-01	1.324573e-02	1.354178e-02
+1.500000e+01	1.000000e+00	1.000000e+00	9.217000e-01	1.289770e-02	1.307293e-02
+1.700000e+01	1.000000e+00	1.000000e+00	9.297000e-01	1.595343e-02	1.538971e-02
+1.900000e+01	1.000000e+00	1.000000e+00	9.492000e-01	1.911736e-02	1.835060e-02
+2.250000e+01	2.500000e+00	2.500000e+00	9.194000e-01	1.721485e-02	1.858283e-02
+2.750000e+01	2.500000e+00	2.500000e+00	9.515000e-01	2.598592e-02	2.810159e-02
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d01-x06-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d01-x06-y01
+Title=doi:10.17182/hepdata.76730.v1/t4
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	1.795000e-01	5.512742e-03	5.512839e-03
+1.750000e+00	2.500000e-01	2.500000e-01	2.651000e-01	6.443892e-03	6.444486e-03
+2.250000e+00	2.500000e-01	2.500000e-01	3.296000e-01	5.069577e-03	5.069560e-03
+2.750000e+00	2.500000e-01	2.500000e-01	3.769000e-01	5.626850e-03	5.627424e-03
+3.250000e+00	2.500000e-01	2.500000e-01	4.062000e-01	5.032140e-03	5.032937e-03
+3.750000e+00	2.500000e-01	2.500000e-01	4.249000e-01	4.535489e-03	4.534021e-03
+4.250000e+00	2.500000e-01	2.500000e-01	4.398000e-01	4.674875e-03	4.687764e-03
+4.750000e+00	2.500000e-01	2.500000e-01	4.496000e-01	4.824791e-03	4.828814e-03
+5.250000e+00	2.500000e-01	2.500000e-01	4.565000e-01	4.949929e-03	4.928535e-03
+5.750000e+00	2.500000e-01	2.500000e-01	4.612000e-01	5.063253e-03	5.034157e-03
+6.250000e+00	2.500000e-01	2.500000e-01	4.656000e-01	5.166925e-03	5.224220e-03
+6.750000e+00	2.500000e-01	2.500000e-01	4.718000e-01	5.448772e-03	5.495128e-03
+7.250000e+00	2.500000e-01	2.500000e-01	4.674000e-01	5.572768e-03	5.562759e-03
+7.750000e+00	2.500000e-01	2.500000e-01	4.816000e-01	6.016367e-03	5.972388e-03
+8.500000e+00	5.000000e-01	5.000000e-01	4.784000e-01	5.665740e-03	5.741204e-03
+9.500000e+00	5.000000e-01	5.000000e-01	4.805000e-01	6.071925e-03	6.177579e-03
+1.050000e+01	5.000000e-01	5.000000e-01	4.899000e-01	7.295621e-03	6.912315e-03
+1.150000e+01	5.000000e-01	5.000000e-01	4.996000e-01	8.504886e-03	8.089227e-03
+1.250000e+01	5.000000e-01	5.000000e-01	5.047000e-01	8.959324e-03	8.691246e-03
+1.350000e+01	5.000000e-01	5.000000e-01	4.974000e-01	1.056098e-02	1.035547e-02
+1.500000e+01	1.000000e+00	1.000000e+00	5.263000e-01	1.044035e-02	1.019340e-02
+1.700000e+01	1.000000e+00	1.000000e+00	5.303000e-01	1.227357e-02	1.218484e-02
+1.900000e+01	1.000000e+00	1.000000e+00	5.405000e-01	1.594612e-02	1.563842e-02
+2.250000e+01	2.500000e+00	2.500000e+00	5.659000e-01	1.548183e-02	1.571399e-02
+2.750000e+01	2.500000e+00	2.500000e+00	5.755000e-01	2.575891e-02	2.414577e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d02-x01-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d02-x01-y01
+Title=doi:10.17182/hepdata.76730.v1/t25
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	2.675000e-01	3.929308e-03	3.929334e-03
+1.750000e+00	2.500000e-01	2.500000e-01	5.035000e-01	6.781869e-03	6.781663e-03
+2.250000e+00	2.500000e-01	2.500000e-01	7.706000e-01	8.313353e-03	8.313740e-03
+2.750000e+00	2.500000e-01	2.500000e-01	1.025000e+00	9.567165e-03	9.566142e-03
+3.250000e+00	2.500000e-01	2.500000e-01	1.245000e+00	1.071711e-02	1.071514e-02
+3.750000e+00	2.500000e-01	2.500000e-01	1.426000e+00	1.117614e-02	1.117526e-02
+4.250000e+00	2.500000e-01	2.500000e-01	1.580000e+00	1.226870e-02	1.226810e-02
+4.750000e+00	2.500000e-01	2.500000e-01	1.714000e+00	1.315123e-02	1.315578e-02
+5.250000e+00	2.500000e-01	2.500000e-01	1.833000e+00	1.390192e-02	1.389687e-02
+5.750000e+00	2.500000e-01	2.500000e-01	1.941000e+00	1.456197e-02	1.458825e-02
+6.250000e+00	2.500000e-01	2.500000e-01	2.042000e+00	1.519224e-02	1.514088e-02
+6.750000e+00	2.500000e-01	2.500000e-01	2.144000e+00	1.588040e-02	1.582607e-02
+7.250000e+00	2.500000e-01	2.500000e-01	2.237000e+00	1.638232e-02	1.647378e-02
+7.750000e+00	2.500000e-01	2.500000e-01	2.331000e+00	1.705033e-02	1.714076e-02
+8.500000e+00	5.000000e-01	5.000000e-01	2.455000e+00	1.749267e-02	1.752437e-02
+9.500000e+00	5.000000e-01	5.000000e-01	2.650000e+00	1.884351e-02	1.894827e-02
+1.050000e+01	5.000000e-01	5.000000e-01	2.827000e+00	2.085731e-02	2.041287e-02
+1.150000e+01	5.000000e-01	5.000000e-01	3.007000e+00	2.247902e-02	2.234910e-02
+1.250000e+01	5.000000e-01	5.000000e-01	3.191000e+00	2.553014e-02	2.519430e-02
+1.350000e+01	5.000000e-01	5.000000e-01	3.352000e+00	2.680765e-02	2.736740e-02
+1.500000e+01	1.000000e+00	1.000000e+00	3.630000e+00	2.846620e-02	2.767163e-02
+1.700000e+01	1.000000e+00	1.000000e+00	3.954000e+00	3.445124e-02	3.288829e-02
+1.900000e+01	1.000000e+00	1.000000e+00	4.286000e+00	4.105696e-02	4.144639e-02
+2.250000e+01	2.500000e+00	2.500000e+00	4.847000e+00	4.553926e-02	4.591417e-02
+2.750000e+01	2.500000e+00	2.500000e+00	5.690000e+00	7.544752e-02	7.433965e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d02-x02-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d02-x02-y01
+Title=doi:10.17182/hepdata.76730.v1/t26
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	1.542000e-01	3.861977e-03	3.861917e-03
+1.750000e+00	2.500000e-01	2.500000e-01	3.463000e-01	6.884469e-03	6.884249e-03
+2.250000e+00	2.500000e-01	2.500000e-01	5.710000e-01	8.324515e-03	8.325162e-03
+2.750000e+00	2.500000e-01	2.500000e-01	7.851000e-01	9.705433e-03	9.703781e-03
+3.250000e+00	2.500000e-01	2.500000e-01	9.628000e-01	1.063526e-02	1.063768e-02
+3.750000e+00	2.500000e-01	2.500000e-01	1.103000e+00	1.154800e-02	1.155078e-02
+4.250000e+00	2.500000e-01	2.500000e-01	1.218000e+00	1.274049e-02	1.273252e-02
+4.750000e+00	2.500000e-01	2.500000e-01	1.311000e+00	1.369141e-02	1.368461e-02
+5.250000e+00	2.500000e-01	2.500000e-01	1.389000e+00	1.449875e-02	1.451555e-02
+5.750000e+00	2.500000e-01	2.500000e-01	1.457000e+00	1.523907e-02	1.524689e-02
+6.250000e+00	2.500000e-01	2.500000e-01	1.520000e+00	1.596011e-02	1.602644e-02
+6.750000e+00	2.500000e-01	2.500000e-01	1.582000e+00	1.676141e-02	1.669265e-02
+7.250000e+00	2.500000e-01	2.500000e-01	1.636000e+00	1.723469e-02	1.742459e-02
+7.750000e+00	2.500000e-01	2.500000e-01	1.696000e+00	1.819689e-02	1.825496e-02
+8.500000e+00	5.000000e-01	5.000000e-01	1.767000e+00	1.876183e-02	1.873992e-02
+9.500000e+00	5.000000e-01	5.000000e-01	1.884000e+00	2.040144e-02	2.039777e-02
+1.050000e+01	5.000000e-01	5.000000e-01	1.996000e+00	2.201179e-02	2.236859e-02
+1.150000e+01	5.000000e-01	5.000000e-01	2.116000e+00	2.468130e-02	2.508319e-02
+1.250000e+01	5.000000e-01	5.000000e-01	2.202000e+00	2.703879e-02	2.716300e-02
+1.350000e+01	5.000000e-01	5.000000e-01	2.308000e+00	3.047518e-02	3.003116e-02
+1.500000e+01	1.000000e+00	1.000000e+00	2.495000e+00	3.178482e-02	3.056811e-02
+1.700000e+01	1.000000e+00	1.000000e+00	2.683000e+00	3.909386e-02	3.823760e-02
+1.900000e+01	1.000000e+00	1.000000e+00	2.967000e+00	4.756752e-02	4.976803e-02
+2.250000e+01	2.500000e+00	2.500000e+00	3.280000e+00	5.247180e-02	5.221543e-02
+2.750000e+01	2.500000e+00	2.500000e+00	3.756000e+00	8.955615e-02	8.209436e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d02-x03-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d02-x03-y01
+Title=doi:10.17182/hepdata.76730.v1/t24
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	1.396000e-01	3.589602e-03	3.589732e-03
+1.750000e+00	2.500000e-01	2.500000e-01	3.124000e-01	6.539660e-03	6.539610e-03
+2.250000e+00	2.500000e-01	2.500000e-01	5.140000e-01	8.146738e-03	8.146520e-03
+2.750000e+00	2.500000e-01	2.500000e-01	7.005000e-01	9.118464e-03	9.118618e-03
+3.250000e+00	2.500000e-01	2.500000e-01	8.494000e-01	9.629835e-03	9.627563e-03
+3.750000e+00	2.500000e-01	2.500000e-01	9.592000e-01	1.008216e-02	1.008043e-02
+4.250000e+00	2.500000e-01	2.500000e-01	1.042000e+00	1.094407e-02	1.094875e-02
+4.750000e+00	2.500000e-01	2.500000e-01	1.101000e+00	1.156927e-02	1.156324e-02
+5.250000e+00	2.500000e-01	2.500000e-01	1.147000e+00	1.208441e-02	1.205921e-02
+5.750000e+00	2.500000e-01	2.500000e-01	1.179000e+00	1.246402e-02	1.245994e-02
+6.250000e+00	2.500000e-01	2.500000e-01	1.203000e+00	1.279780e-02	1.279993e-02
+6.750000e+00	2.500000e-01	2.500000e-01	1.228000e+00	1.311559e-02	1.317985e-02
+7.250000e+00	2.500000e-01	2.500000e-01	1.244000e+00	1.354930e-02	1.361419e-02
+7.750000e+00	2.500000e-01	2.500000e-01	1.257000e+00	1.390355e-02	1.388627e-02
+8.500000e+00	5.000000e-01	5.000000e-01	1.276000e+00	1.386870e-02	1.397636e-02
+9.500000e+00	5.000000e-01	5.000000e-01	1.302000e+00	1.444562e-02	1.447789e-02
+1.050000e+01	5.000000e-01	5.000000e-01	1.322000e+00	1.551854e-02	1.555901e-02
+1.150000e+01	5.000000e-01	5.000000e-01	1.347000e+00	1.678566e-02	1.699989e-02
+1.250000e+01	5.000000e-01	5.000000e-01	1.365000e+00	1.806007e-02	1.830597e-02
+1.350000e+01	5.000000e-01	5.000000e-01	1.366000e+00	2.058757e-02	1.945878e-02
+1.500000e+01	1.000000e+00	1.000000e+00	1.427000e+00	1.994091e-02	1.992069e-02
+1.700000e+01	1.000000e+00	1.000000e+00	1.452000e+00	2.499291e-02	2.324402e-02
+1.900000e+01	1.000000e+00	1.000000e+00	1.508000e+00	2.923081e-02	2.954500e-02
+2.250000e+01	2.500000e+00	2.500000e+00	1.503000e+00	2.962227e-02	2.850454e-02
+2.750000e+01	2.500000e+00	2.500000e+00	1.620000e+00	5.046613e-02	5.272909e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d02-x04-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d02-x04-y01
+Title=doi:10.17182/hepdata.76730.v1/t6
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	2.099000e-01	5.381133e-03	5.381113e-03
+1.750000e+00	2.500000e-01	2.500000e-01	4.339000e-01	9.244856e-03	9.245379e-03
+2.250000e+00	2.500000e-01	2.500000e-01	6.838000e-01	1.114484e-02	1.114448e-02
+2.750000e+00	2.500000e-01	2.500000e-01	9.116000e-01	1.278155e-02	1.278128e-02
+3.250000e+00	2.500000e-01	2.500000e-01	1.091000e+00	1.297491e-02	1.297291e-02
+3.750000e+00	2.500000e-01	2.500000e-01	1.223000e+00	1.276682e-02	1.277131e-02
+4.250000e+00	2.500000e-01	2.500000e-01	1.325000e+00	1.381787e-02	1.382401e-02
+4.750000e+00	2.500000e-01	2.500000e-01	1.398000e+00	1.457740e-02	1.459715e-02
+5.250000e+00	2.500000e-01	2.500000e-01	1.455000e+00	1.521723e-02	1.523207e-02
+5.750000e+00	2.500000e-01	2.500000e-01	1.496000e+00	1.574650e-02	1.570204e-02
+6.250000e+00	2.500000e-01	2.500000e-01	1.529000e+00	1.617638e-02	1.615822e-02
+6.750000e+00	2.500000e-01	2.500000e-01	1.561000e+00	1.664222e-02	1.670747e-02
+7.250000e+00	2.500000e-01	2.500000e-01	1.583000e+00	1.699012e-02	1.712589e-02
+7.750000e+00	2.500000e-01	2.500000e-01	1.604000e+00	1.752508e-02	1.777499e-02
+8.500000e+00	5.000000e-01	5.000000e-01	1.630000e+00	1.757563e-02	1.761655e-02
+9.500000e+00	5.000000e-01	5.000000e-01	1.667000e+00	1.863572e-02	1.869496e-02
+1.050000e+01	5.000000e-01	5.000000e-01	1.698000e+00	1.963437e-02	1.998968e-02
+1.150000e+01	5.000000e-01	5.000000e-01	1.736000e+00	2.128219e-02	2.185816e-02
+1.250000e+01	5.000000e-01	5.000000e-01	1.762000e+00	2.336940e-02	2.370838e-02
+1.350000e+01	5.000000e-01	5.000000e-01	1.759000e+00	2.558816e-02	2.602463e-02
+1.500000e+01	1.000000e+00	1.000000e+00	1.858000e+00	2.567306e-02	2.663934e-02
+1.700000e+01	1.000000e+00	1.000000e+00	1.894000e+00	3.112673e-02	3.176516e-02
+1.900000e+01	1.000000e+00	1.000000e+00	1.978000e+00	3.847615e-02	3.810245e-02
+2.250000e+01	2.500000e+00	2.500000e+00	1.987000e+00	3.735486e-02	3.945192e-02
+2.750000e+01	2.500000e+00	2.500000e+00	2.187000e+00	6.772190e-02	7.559314e-02
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d02-x05-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d02-x05-y01
+Title=doi:10.17182/hepdata.76730.v1/t5
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	6.931000e-02	1.763705e-03	1.763720e-03
+1.750000e+00	2.500000e-01	2.500000e-01	1.909000e-01	3.830151e-03	3.830044e-03
+2.250000e+00	2.500000e-01	2.500000e-01	3.443000e-01	5.062041e-03	5.062861e-03
+2.750000e+00	2.500000e-01	2.500000e-01	4.893000e-01	5.580659e-03	5.582035e-03
+3.250000e+00	2.500000e-01	2.500000e-01	6.066000e-01	6.463471e-03	6.463862e-03
+3.750000e+00	2.500000e-01	2.500000e-01	6.957000e-01	7.395935e-03	7.398697e-03
+4.250000e+00	2.500000e-01	2.500000e-01	7.600000e-01	8.084274e-03	8.081808e-03
+4.750000e+00	2.500000e-01	2.500000e-01	8.043000e-01	8.561872e-03	8.556122e-03
+5.250000e+00	2.500000e-01	2.500000e-01	8.392000e-01	8.953532e-03	8.958556e-03
+5.750000e+00	2.500000e-01	2.500000e-01	8.616000e-01	9.278622e-03	9.266828e-03
+6.250000e+00	2.500000e-01	2.500000e-01	8.770000e-01	9.476682e-03	9.532822e-03
+6.750000e+00	2.500000e-01	2.500000e-01	8.942000e-01	9.825056e-03	9.796080e-03
+7.250000e+00	2.500000e-01	2.500000e-01	9.067000e-01	1.011843e-02	1.009442e-02
+7.750000e+00	2.500000e-01	2.500000e-01	9.105000e-01	1.030437e-02	1.038361e-02
+8.500000e+00	5.000000e-01	5.000000e-01	9.219000e-01	1.024735e-02	1.019041e-02
+9.500000e+00	5.000000e-01	5.000000e-01	9.370000e-01	1.100142e-02	1.075777e-02
+1.050000e+01	5.000000e-01	5.000000e-01	9.470000e-01	1.142351e-02	1.187724e-02
+1.150000e+01	5.000000e-01	5.000000e-01	9.582000e-01	1.311951e-02	1.215425e-02
+1.250000e+01	5.000000e-01	5.000000e-01	9.679000e-01	1.394308e-02	1.414462e-02
+1.350000e+01	5.000000e-01	5.000000e-01	9.733000e-01	1.598726e-02	1.439840e-02
+1.500000e+01	1.000000e+00	1.000000e+00	9.964000e-01	1.508090e-02	1.480806e-02
+1.700000e+01	1.000000e+00	1.000000e+00	1.011000e+00	1.843669e-02	1.952408e-02
+1.900000e+01	1.000000e+00	1.000000e+00	1.039000e+00	2.345525e-02	2.363279e-02
+2.250000e+01	2.500000e+00	2.500000e+00	1.020000e+00	2.183189e-02	2.319741e-02
+2.750000e+01	2.500000e+00	2.500000e+00	1.055000e+00	3.441567e-02	3.946437e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d02-x06-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d02-x06-y01
+Title=doi:10.17182/hepdata.76730.v1/t7
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	1.407000e-01	3.868045e-03	3.868019e-03
+1.750000e+00	2.500000e-01	2.500000e-01	2.432000e-01	5.843754e-03	5.844002e-03
+2.250000e+00	2.500000e-01	2.500000e-01	3.397000e-01	5.923776e-03	5.923558e-03
+2.750000e+00	2.500000e-01	2.500000e-01	4.222000e-01	7.317139e-03	7.316846e-03
+3.250000e+00	2.500000e-01	2.500000e-01	4.838000e-01	6.902623e-03	6.903455e-03
+3.750000e+00	2.500000e-01	2.500000e-01	5.323000e-01	7.060167e-03	7.062739e-03
+4.250000e+00	2.500000e-01	2.500000e-01	5.724000e-01	9.372208e-03	9.371341e-03
+4.750000e+00	2.500000e-01	2.500000e-01	5.997000e-01	8.511520e-03	8.512291e-03
+5.250000e+00	2.500000e-01	2.500000e-01	6.158000e-01	6.364261e-03	6.371265e-03
+5.750000e+00	2.500000e-01	2.500000e-01	6.348000e-01	6.644491e-03	6.668968e-03
+6.250000e+00	2.500000e-01	2.500000e-01	6.522000e-01	6.965933e-03	6.891042e-03
+6.750000e+00	2.500000e-01	2.500000e-01	6.672000e-01	7.188772e-03	7.277384e-03
+7.250000e+00	2.500000e-01	2.500000e-01	6.769000e-01	7.523358e-03	7.498422e-03
+7.750000e+00	2.500000e-01	2.500000e-01	6.934000e-01	7.946816e-03	7.912040e-03
+8.500000e+00	5.000000e-01	5.000000e-01	7.092000e-01	7.956625e-03	7.790974e-03
+9.500000e+00	5.000000e-01	5.000000e-01	7.304000e-01	9.078415e-03	8.600403e-03
+1.050000e+01	5.000000e-01	5.000000e-01	7.522000e-01	9.900182e-03	1.006262e-02
+1.150000e+01	5.000000e-01	5.000000e-01	7.771000e-01	1.102544e-02	1.132098e-02
+1.250000e+01	5.000000e-01	5.000000e-01	7.948000e-01	1.281908e-02	1.307097e-02
+1.350000e+01	5.000000e-01	5.000000e-01	7.868000e-01	1.528760e-02	1.449925e-02
+1.500000e+01	1.000000e+00	1.000000e+00	8.621000e-01	1.509969e-02	1.514071e-02
+1.700000e+01	1.000000e+00	1.000000e+00	8.853000e-01	2.031155e-02	1.988018e-02
+1.900000e+01	1.000000e+00	1.000000e+00	9.429000e-01	2.855242e-02	2.586907e-02
+2.250000e+01	2.500000e+00	2.500000e+00	9.668000e-01	2.690701e-02	2.977452e-02
+2.750000e+01	2.500000e+00	2.500000e+00	1.132000e+00	5.091894e-02	5.037283e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d03-x01-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d03-x01-y01
+Title=doi:10.17182/hepdata.76730.v1/t29
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	9.705000e-01	5.303413e-03	5.303356e-03
+1.750000e+00	2.500000e-01	2.500000e-01	1.109000e+00	6.175871e-03	6.176036e-03
+2.250000e+00	2.500000e-01	2.500000e-01	1.197000e+00	6.752070e-03	6.751896e-03
+2.750000e+00	2.500000e-01	2.500000e-01	1.269000e+00	6.773407e-03	6.773902e-03
+3.250000e+00	2.500000e-01	2.500000e-01	1.336000e+00	7.214540e-03	7.212595e-03
+3.750000e+00	2.500000e-01	2.500000e-01	1.401000e+00	7.650714e-03	7.649477e-03
+4.250000e+00	2.500000e-01	2.500000e-01	1.464000e+00	8.097053e-03	8.093053e-03
+4.750000e+00	2.500000e-01	2.500000e-01	1.526000e+00	8.557304e-03	8.554055e-03
+5.250000e+00	2.500000e-01	2.500000e-01	1.588000e+00	9.032907e-03	9.030844e-03
+5.750000e+00	2.500000e-01	2.500000e-01	1.649000e+00	9.519034e-03	9.531239e-03
+6.250000e+00	2.500000e-01	2.500000e-01	1.711000e+00	1.007465e-02	1.004975e-02
+6.750000e+00	2.500000e-01	2.500000e-01	1.768000e+00	1.063492e-02	1.059106e-02
+7.250000e+00	2.500000e-01	2.500000e-01	1.830000e+00	1.123065e-02	1.116844e-02
+7.750000e+00	2.500000e-01	2.500000e-01	1.888000e+00	1.175450e-02	1.186549e-02
+8.500000e+00	5.000000e-01	5.000000e-01	1.966000e+00	1.238448e-02	1.235257e-02
+9.500000e+00	5.000000e-01	5.000000e-01	2.082000e+00	1.351057e-02	1.372088e-02
+1.050000e+01	5.000000e-01	5.000000e-01	2.193000e+00	1.554155e-02	1.544035e-02
+1.150000e+01	5.000000e-01	5.000000e-01	2.300000e+00	1.718316e-02	1.780800e-02
+1.250000e+01	5.000000e-01	5.000000e-01	2.412000e+00	2.009663e-02	1.965495e-02
+1.350000e+01	5.000000e-01	5.000000e-01	2.486000e+00	2.306386e-02	2.214713e-02
+1.500000e+01	1.000000e+00	1.000000e+00	2.659000e+00	2.399213e-02	2.355768e-02
+1.700000e+01	1.000000e+00	1.000000e+00	2.833000e+00	2.976565e-02	3.131063e-02
+1.900000e+01	1.000000e+00	1.000000e+00	3.052000e+00	3.815707e-02	3.911370e-02
+2.250000e+01	2.500000e+00	2.500000e+00	3.374000e+00	4.345448e-02	4.471935e-02
+2.750000e+01	2.500000e+00	2.500000e+00	3.796000e+00	7.553121e-02	6.925522e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d03-x02-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d03-x02-y01
+Title=doi:10.17182/hepdata.76730.v1/t30
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	7.395000e-01	3.698491e-03	3.698573e-03
+1.750000e+00	2.500000e-01	2.500000e-01	8.336000e-01	4.169896e-03	4.169800e-03
+2.250000e+00	2.500000e-01	2.500000e-01	9.043000e-01	4.523365e-03	4.523130e-03
+2.750000e+00	2.500000e-01	2.500000e-01	9.581000e-01	4.795416e-03	4.795235e-03
+3.250000e+00	2.500000e-01	2.500000e-01	1.000000e+00	5.007400e-03	5.007771e-03
+3.750000e+00	2.500000e-01	2.500000e-01	1.034000e+00	5.181653e-03	5.182689e-03
+4.250000e+00	2.500000e-01	2.500000e-01	1.062000e+00	5.330766e-03	5.326338e-03
+4.750000e+00	2.500000e-01	2.500000e-01	1.088000e+00	5.466954e-03	5.466364e-03
+5.250000e+00	2.500000e-01	2.500000e-01	1.111000e+00	5.594240e-03	5.592088e-03
+5.750000e+00	2.500000e-01	2.500000e-01	1.133000e+00	5.714950e-03	5.723373e-03
+6.250000e+00	2.500000e-01	2.500000e-01	1.153000e+00	5.846235e-03	5.868525e-03
+6.750000e+00	2.500000e-01	2.500000e-01	1.175000e+00	6.013978e-03	6.005368e-03
+7.250000e+00	2.500000e-01	2.500000e-01	1.196000e+00	6.219748e-03	6.165558e-03
+7.750000e+00	2.500000e-01	2.500000e-01	1.216000e+00	6.366540e-03	6.407508e-03
+8.500000e+00	5.000000e-01	5.000000e-01	1.246000e+00	6.466114e-03	6.482100e-03
+9.500000e+00	5.000000e-01	5.000000e-01	1.287000e+00	6.885064e-03	6.980854e-03
+1.050000e+01	5.000000e-01	5.000000e-01	1.330000e+00	7.518317e-03	7.542974e-03
+1.150000e+01	5.000000e-01	5.000000e-01	1.366000e+00	8.363380e-03	8.191442e-03
+1.250000e+01	5.000000e-01	5.000000e-01	1.402000e+00	9.289940e-03	9.016889e-03
+1.350000e+01	5.000000e-01	5.000000e-01	1.430000e+00	1.021802e-02	1.006099e-02
+1.500000e+01	1.000000e+00	1.000000e+00	1.503000e+00	1.068657e-02	1.025328e-02
+1.700000e+01	1.000000e+00	1.000000e+00	1.561000e+00	1.311051e-02	1.397538e-02
+1.900000e+01	1.000000e+00	1.000000e+00	1.658000e+00	1.826935e-02	1.688627e-02
+2.250000e+01	2.500000e+00	2.500000e+00	1.773000e+00	1.859895e-02	1.976869e-02
+2.750000e+01	2.500000e+00	2.500000e+00	1.937000e+00	2.973916e-02	3.079048e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d03-x03-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d03-x03-y01
+Title=doi:10.17182/hepdata.76730.v1/t11
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	7.327000e-01	3.663539e-03	3.663640e-03
+1.750000e+00	2.500000e-01	2.500000e-01	8.208000e-01	4.104996e-03	4.104856e-03
+2.250000e+00	2.500000e-01	2.500000e-01	8.854000e-01	4.429117e-03	4.429447e-03
+2.750000e+00	2.500000e-01	2.500000e-01	9.332000e-01	4.670589e-03	4.670060e-03
+3.250000e+00	2.500000e-01	2.500000e-01	9.682000e-01	4.848327e-03	4.847509e-03
+3.750000e+00	2.500000e-01	2.500000e-01	9.942000e-01	4.981134e-03	4.981982e-03
+4.250000e+00	2.500000e-01	2.500000e-01	1.014000e+00	5.082556e-03	5.082802e-03
+4.750000e+00	2.500000e-01	2.500000e-01	1.029000e+00	5.166193e-03	5.168807e-03
+5.250000e+00	2.500000e-01	2.500000e-01	1.041000e+00	5.245225e-03	5.241731e-03
+5.750000e+00	2.500000e-01	2.500000e-01	1.052000e+00	5.315006e-03	5.312647e-03
+6.250000e+00	2.500000e-01	2.500000e-01	1.062000e+00	5.389913e-03	5.398785e-03
+6.750000e+00	2.500000e-01	2.500000e-01	1.067000e+00	5.444381e-03	5.452391e-03
+7.250000e+00	2.500000e-01	2.500000e-01	1.076000e+00	5.538489e-03	5.572470e-03
+7.750000e+00	2.500000e-01	2.500000e-01	1.079000e+00	5.593479e-03	5.667701e-03
+8.500000e+00	5.000000e-01	5.000000e-01	1.090000e+00	5.668484e-03	5.623431e-03
+9.500000e+00	5.000000e-01	5.000000e-01	1.100000e+00	5.856803e-03	5.840660e-03
+1.050000e+01	5.000000e-01	5.000000e-01	1.110000e+00	6.169960e-03	6.203781e-03
+1.150000e+01	5.000000e-01	5.000000e-01	1.125000e+00	6.663343e-03	6.615159e-03
+1.250000e+01	5.000000e-01	5.000000e-01	1.127000e+00	6.963966e-03	6.991640e-03
+1.350000e+01	5.000000e-01	5.000000e-01	1.129000e+00	7.686836e-03	7.821751e-03
+1.500000e+01	1.000000e+00	1.000000e+00	1.149000e+00	7.758901e-03	7.661723e-03
+1.700000e+01	1.000000e+00	1.000000e+00	1.164000e+00	9.381142e-03	9.330289e-03
+1.900000e+01	1.000000e+00	1.000000e+00	1.181000e+00	1.138788e-02	1.119879e-02
+2.250000e+01	2.500000e+00	2.500000e+00	1.198000e+00	1.141093e-02	1.112395e-02
+2.750000e+01	2.500000e+00	2.500000e+00	1.228000e+00	1.788124e-02	1.912608e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d03-x04-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d03-x04-y01
+Title=doi:10.17182/hepdata.76730.v1/t13
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	7.530000e-01	3.765703e-03	3.765693e-03
+1.750000e+00	2.500000e-01	2.500000e-01	8.541000e-01	4.272192e-03	4.272012e-03
+2.250000e+00	2.500000e-01	2.500000e-01	9.284000e-01	4.645267e-03	4.645024e-03
+2.750000e+00	2.500000e-01	2.500000e-01	9.832000e-01	4.922466e-03	4.922891e-03
+3.250000e+00	2.500000e-01	2.500000e-01	1.024000e+00	5.128999e-03	5.130058e-03
+3.750000e+00	2.500000e-01	2.500000e-01	1.054000e+00	5.289733e-03	5.289553e-03
+4.250000e+00	2.500000e-01	2.500000e-01	1.077000e+00	5.408764e-03	5.412079e-03
+4.750000e+00	2.500000e-01	2.500000e-01	1.095000e+00	5.517634e-03	5.518332e-03
+5.250000e+00	2.500000e-01	2.500000e-01	1.110000e+00	5.614152e-03	5.610806e-03
+5.750000e+00	2.500000e-01	2.500000e-01	1.124000e+00	5.713815e-03	5.704103e-03
+6.250000e+00	2.500000e-01	2.500000e-01	1.138000e+00	5.825049e-03	5.848014e-03
+6.750000e+00	2.500000e-01	2.500000e-01	1.143000e+00	5.917632e-03	5.918653e-03
+7.250000e+00	2.500000e-01	2.500000e-01	1.157000e+00	6.069363e-03	6.092547e-03
+7.750000e+00	2.500000e-01	2.500000e-01	1.159000e+00	6.243324e-03	6.214388e-03
+8.500000e+00	5.000000e-01	5.000000e-01	1.174000e+00	6.233059e-03	6.234387e-03
+9.500000e+00	5.000000e-01	5.000000e-01	1.188000e+00	6.533205e-03	6.648277e-03
+1.050000e+01	5.000000e-01	5.000000e-01	1.202000e+00	7.149132e-03	7.083600e-03
+1.150000e+01	5.000000e-01	5.000000e-01	1.220000e+00	7.748723e-03	7.751798e-03
+1.250000e+01	5.000000e-01	5.000000e-01	1.220000e+00	8.457343e-03	8.863808e-03
+1.350000e+01	5.000000e-01	5.000000e-01	1.218000e+00	9.645275e-03	9.692614e-03
+1.500000e+01	1.000000e+00	1.000000e+00	1.246000e+00	9.009366e-03	9.389224e-03
+1.700000e+01	1.000000e+00	1.000000e+00	1.269000e+00	1.085328e-02	1.165244e-02
+1.900000e+01	1.000000e+00	1.000000e+00	1.297000e+00	1.498593e-02	1.567404e-02
+2.250000e+01	2.500000e+00	2.500000e+00	1.304000e+00	1.540144e-02	1.458230e-02
+2.750000e+01	2.500000e+00	2.500000e+00	1.364000e+00	2.750111e-02	2.824765e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d03-x05-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d03-x05-y01
+Title=doi:10.17182/hepdata.76730.v1/t12
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	7.016000e-01	3.924464e-03	3.924856e-03
+1.750000e+00	2.500000e-01	2.500000e-01	7.841000e-01	4.385313e-03	4.385178e-03
+2.250000e+00	2.500000e-01	2.500000e-01	8.426000e-01	4.713750e-03	4.714499e-03
+2.750000e+00	2.500000e-01	2.500000e-01	8.845000e-01	4.427973e-03	4.428714e-03
+3.250000e+00	2.500000e-01	2.500000e-01	9.141000e-01	4.579416e-03	4.579519e-03
+3.750000e+00	2.500000e-01	2.500000e-01	9.353000e-01	4.690827e-03	4.693009e-03
+4.250000e+00	2.500000e-01	2.500000e-01	9.507000e-01	4.776203e-03	4.782235e-03
+4.750000e+00	2.500000e-01	2.500000e-01	9.611000e-01	4.851666e-03	4.840871e-03
+5.250000e+00	2.500000e-01	2.500000e-01	9.704000e-01	4.923634e-03	4.909396e-03
+5.750000e+00	2.500000e-01	2.500000e-01	9.761000e-01	4.971786e-03	4.968653e-03
+6.250000e+00	2.500000e-01	2.500000e-01	9.815000e-01	5.067131e-03	5.038502e-03
+6.750000e+00	2.500000e-01	2.500000e-01	9.872000e-01	5.153776e-03	5.159261e-03
+7.250000e+00	2.500000e-01	2.500000e-01	9.894000e-01	5.241718e-03	5.256404e-03
+7.750000e+00	2.500000e-01	2.500000e-01	9.937000e-01	5.353785e-03	5.413397e-03
+8.500000e+00	5.000000e-01	5.000000e-01	9.980000e-01	5.312054e-03	5.311371e-03
+9.500000e+00	5.000000e-01	5.000000e-01	1.003000e+00	5.673305e-03	5.538108e-03
+1.050000e+01	5.000000e-01	5.000000e-01	1.007000e+00	6.004766e-03	5.938108e-03
+1.150000e+01	5.000000e-01	5.000000e-01	1.016000e+00	6.421062e-03	6.407025e-03
+1.250000e+01	5.000000e-01	5.000000e-01	1.021000e+00	7.145547e-03	7.239591e-03
+1.350000e+01	5.000000e-01	5.000000e-01	1.029000e+00	8.130281e-03	8.057754e-03
+1.500000e+01	1.000000e+00	1.000000e+00	1.031000e+00	7.660802e-03	7.464767e-03
+1.700000e+01	1.000000e+00	1.000000e+00	1.034000e+00	9.258598e-03	9.560174e-03
+1.900000e+01	1.000000e+00	1.000000e+00	1.039000e+00	1.092733e-02	1.146412e-02
+2.250000e+01	2.500000e+00	2.500000e+00	1.054000e+00	1.059208e-02	1.095314e-02
+2.750000e+01	2.500000e+00	2.500000e+00	1.041000e+00	1.765678e-02	1.687505e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d04-x01-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d04-x01-y01
+Title=doi:10.17182/hepdata.76730.v1/t27
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+00	5.000000e-01	5.000000e-01	1.445000e+00	7.667857e-03	7.668286e-03
+2.000000e+00	5.000000e-01	5.000000e-01	1.181000e+00	6.782634e-03	6.782775e-03
+3.000000e+00	5.000000e-01	5.000000e-01	1.121000e+00	5.916288e-03	5.915675e-03
+4.000000e+00	5.000000e-01	5.000000e-01	1.107000e+00	5.855506e-03	5.855882e-03
+5.000000e+00	5.000000e-01	5.000000e-01	1.111000e+00	5.805005e-03	5.805479e-03
+6.000000e+00	5.000000e-01	5.000000e-01	1.118000e+00	6.003962e-03	6.004896e-03
+7.000000e+00	5.000000e-01	5.000000e-01	1.128000e+00	6.017403e-03	6.017309e-03
+8.000000e+00	5.000000e-01	5.000000e-01	1.137000e+00	6.173151e-03	6.173209e-03
+9.000000e+00	5.000000e-01	5.000000e-01	1.146000e+00	5.957009e-03	5.956504e-03
+1.000000e+01	5.000000e-01	5.000000e-01	1.153000e+00	6.130885e-03	6.131263e-03
+1.100000e+01	5.000000e-01	5.000000e-01	1.160000e+00	6.324771e-03	6.324517e-03
+1.200000e+01	5.000000e-01	5.000000e-01	1.166000e+00	6.023616e-03	6.021408e-03
+1.300000e+01	5.000000e-01	5.000000e-01	1.172000e+00	6.251460e-03	6.248865e-03
+1.400000e+01	5.000000e-01	5.000000e-01	1.178000e+00	6.407611e-03	6.404460e-03
+1.500000e+01	5.000000e-01	5.000000e-01	1.183000e+00	9.099633e-03	9.102735e-03
+1.600000e+01	5.000000e-01	5.000000e-01	1.191000e+00	6.638721e-03	6.582058e-03
+1.700000e+01	5.000000e-01	5.000000e-01	1.195000e+00	6.056598e-03	6.060904e-03
+1.800000e+01	5.000000e-01	5.000000e-01	1.200000e+00	6.117766e-03	6.123249e-03
+1.900000e+01	5.000000e-01	5.000000e-01	1.204000e+00	7.351436e-03	7.386269e-03
+2.000000e+01	5.000000e-01	5.000000e-01	1.209000e+00	6.385245e-03	6.362231e-03
+2.100000e+01	5.000000e-01	5.000000e-01	1.213000e+00	7.485019e-03	7.554085e-03
+2.200000e+01	5.000000e-01	5.000000e-01	1.219000e+00	6.668785e-03	6.620968e-03
+2.300000e+01	5.000000e-01	5.000000e-01	1.220000e+00	7.533013e-03	7.457072e-03
+2.400000e+01	5.000000e-01	5.000000e-01	1.227000e+00	6.843849e-03	6.879497e-03
+2.500000e+01	5.000000e-01	5.000000e-01	1.233000e+00	7.834296e-03	7.925083e-03
+2.600000e+01	5.000000e-01	5.000000e-01	1.230000e+00	1.101621e-02	1.119156e-02
+2.700000e+01	5.000000e-01	5.000000e-01	1.246000e+00	9.102228e-03	9.057266e-03
+2.800000e+01	5.000000e-01	5.000000e-01	1.245000e+00	1.357860e-02	1.403413e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d04-x02-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d04-x02-y01
+Title=doi:10.17182/hepdata.76730.v1/t28
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+00	5.000000e-01	5.000000e-01	7.682000e-01	3.849702e-03	3.849375e-03
+2.000000e+00	5.000000e-01	5.000000e-01	7.954000e-01	3.979985e-03	3.979932e-03
+3.000000e+00	5.000000e-01	5.000000e-01	8.245000e-01	4.126074e-03	4.126403e-03
+4.000000e+00	5.000000e-01	5.000000e-01	8.520000e-01	4.265551e-03	4.265572e-03
+5.000000e+00	5.000000e-01	5.000000e-01	8.776000e-01	4.391621e-03	4.392264e-03
+6.000000e+00	5.000000e-01	5.000000e-01	8.998000e-01	4.508184e-03	4.508394e-03
+7.000000e+00	5.000000e-01	5.000000e-01	9.201000e-01	4.610059e-03	4.609827e-03
+8.000000e+00	5.000000e-01	5.000000e-01	9.386000e-01	4.704049e-03	4.705598e-03
+9.000000e+00	5.000000e-01	5.000000e-01	9.543000e-01	4.782280e-03	4.784003e-03
+1.000000e+01	5.000000e-01	5.000000e-01	9.690000e-01	4.871216e-03	4.871167e-03
+1.100000e+01	5.000000e-01	5.000000e-01	9.825000e-01	4.948524e-03	4.946121e-03
+1.200000e+01	5.000000e-01	5.000000e-01	9.948000e-01	5.023220e-03	5.025141e-03
+1.300000e+01	5.000000e-01	5.000000e-01	1.007000e+00	5.080335e-03	5.077522e-03
+1.400000e+01	5.000000e-01	5.000000e-01	1.016000e+00	5.178302e-03	5.176001e-03
+1.500000e+01	5.000000e-01	5.000000e-01	1.028000e+00	5.213203e-03	5.209620e-03
+1.600000e+01	5.000000e-01	5.000000e-01	1.036000e+00	5.249672e-03	5.247058e-03
+1.700000e+01	5.000000e-01	5.000000e-01	1.046000e+00	5.337758e-03	5.336424e-03
+1.800000e+01	5.000000e-01	5.000000e-01	1.053000e+00	5.810071e-03	5.798526e-03
+1.900000e+01	5.000000e-01	5.000000e-01	1.062000e+00	5.848107e-03	5.845792e-03
+2.000000e+01	5.000000e-01	5.000000e-01	1.068000e+00	5.749435e-03	5.767068e-03
+2.100000e+01	5.000000e-01	5.000000e-01	1.079000e+00	5.698668e-03	5.709250e-03
+2.200000e+01	5.000000e-01	5.000000e-01	1.085000e+00	6.425984e-03	6.428975e-03
+2.300000e+01	5.000000e-01	5.000000e-01	1.088000e+00	5.990823e-03	5.911095e-03
+2.400000e+01	5.000000e-01	5.000000e-01	1.099000e+00	8.427980e-03	8.452815e-03
+2.500000e+01	5.000000e-01	5.000000e-01	1.107000e+00	6.826938e-03	6.812079e-03
+2.600000e+01	5.000000e-01	5.000000e-01	1.120000e+00	1.587504e-02	1.586283e-02
+2.700000e+01	5.000000e-01	5.000000e-01	1.109000e+00	1.480436e-02	1.498678e-02
+2.800000e+01	5.000000e-01	5.000000e-01	1.120000e+00	2.508750e-02	2.511264e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d04-x03-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d04-x03-y01
+Title=doi:10.17182/hepdata.76730.v1/t8
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+00	5.000000e-01	5.000000e-01	7.579000e-01	3.795293e-03	3.795207e-03
+2.000000e+00	5.000000e-01	5.000000e-01	7.866000e-01	3.935760e-03	3.935404e-03
+3.000000e+00	5.000000e-01	5.000000e-01	8.158000e-01	4.080851e-03	4.080998e-03
+4.000000e+00	5.000000e-01	5.000000e-01	8.424000e-01	4.217517e-03	4.217473e-03
+5.000000e+00	5.000000e-01	5.000000e-01	8.659000e-01	4.341537e-03	4.341887e-03
+6.000000e+00	5.000000e-01	5.000000e-01	8.873000e-01	4.441465e-03	4.441492e-03
+7.000000e+00	5.000000e-01	5.000000e-01	9.060000e-01	4.537733e-03	4.536138e-03
+8.000000e+00	5.000000e-01	5.000000e-01	9.228000e-01	4.626795e-03	4.627190e-03
+9.000000e+00	5.000000e-01	5.000000e-01	9.380000e-01	4.712705e-03	4.711419e-03
+1.000000e+01	5.000000e-01	5.000000e-01	9.520000e-01	4.767539e-03	4.769457e-03
+1.100000e+01	5.000000e-01	5.000000e-01	9.641000e-01	4.844945e-03	4.845050e-03
+1.200000e+01	5.000000e-01	5.000000e-01	9.759000e-01	4.926099e-03	4.928376e-03
+1.300000e+01	5.000000e-01	5.000000e-01	9.857000e-01	4.953024e-03	4.954357e-03
+1.400000e+01	5.000000e-01	5.000000e-01	9.961000e-01	5.014396e-03	5.017328e-03
+1.500000e+01	5.000000e-01	5.000000e-01	1.005000e+00	5.225280e-03	5.226864e-03
+1.600000e+01	5.000000e-01	5.000000e-01	1.015000e+00	5.118618e-03	5.126199e-03
+1.700000e+01	5.000000e-01	5.000000e-01	1.025000e+00	5.480597e-03	5.480871e-03
+1.800000e+01	5.000000e-01	5.000000e-01	1.031000e+00	5.271041e-03	5.261677e-03
+1.900000e+01	5.000000e-01	5.000000e-01	1.039000e+00	6.072061e-03	6.082077e-03
+2.000000e+01	5.000000e-01	5.000000e-01	1.046000e+00	5.393794e-03	5.390943e-03
+2.100000e+01	5.000000e-01	5.000000e-01	1.055000e+00	6.756546e-03	6.805801e-03
+2.200000e+01	5.000000e-01	5.000000e-01	1.060000e+00	5.981950e-03	5.992989e-03
+2.300000e+01	5.000000e-01	5.000000e-01	1.066000e+00	7.678127e-03	7.703552e-03
+2.400000e+01	5.000000e-01	5.000000e-01	1.070000e+00	8.011143e-03	8.019413e-03
+2.500000e+01	5.000000e-01	5.000000e-01	1.087000e+00	6.541883e-03	6.473906e-03
+2.600000e+01	5.000000e-01	5.000000e-01	1.091000e+00	7.195716e-03	7.081298e-03
+2.700000e+01	5.000000e-01	5.000000e-01	1.091000e+00	7.146530e-03	7.497086e-03
+2.800000e+01	5.000000e-01	5.000000e-01	1.083000e+00	8.971832e-03	8.938679e-03
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d04-x04-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d04-x04-y01
+Title=doi:10.17182/hepdata.76730.v1/t10
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+00	5.000000e-01	5.000000e-01	7.579000e-01	3.797155e-03	3.797354e-03
+2.000000e+00	5.000000e-01	5.000000e-01	8.610000e-01	4.311715e-03	4.312037e-03
+3.000000e+00	5.000000e-01	5.000000e-01	8.447000e-01	4.243693e-03	4.243561e-03
+4.000000e+00	5.000000e-01	5.000000e-01	8.932000e-01	4.477540e-03	4.477940e-03
+5.000000e+00	5.000000e-01	5.000000e-01	9.064000e-01	4.555496e-03	4.555669e-03
+6.000000e+00	5.000000e-01	5.000000e-01	9.334000e-01	4.679705e-03	4.679944e-03
+7.000000e+00	5.000000e-01	5.000000e-01	9.504000e-01	4.766450e-03	4.765734e-03
+8.000000e+00	5.000000e-01	5.000000e-01	9.683000e-01	4.883417e-03	4.884607e-03
+9.000000e+00	5.000000e-01	5.000000e-01	9.832000e-01	4.958054e-03	4.960506e-03
+1.000000e+01	5.000000e-01	5.000000e-01	9.977000e-01	5.008015e-03	5.003869e-03
+1.100000e+01	5.000000e-01	5.000000e-01	1.010000e+00	5.085393e-03	5.086000e-03
+1.200000e+01	5.000000e-01	5.000000e-01	1.021000e+00	5.174197e-03	5.175950e-03
+1.300000e+01	5.000000e-01	5.000000e-01	1.031000e+00	5.184850e-03	5.187258e-03
+1.400000e+01	5.000000e-01	5.000000e-01	1.042000e+00	5.267987e-03	5.278879e-03
+1.500000e+01	5.000000e-01	5.000000e-01	1.050000e+00	5.447403e-03	5.448561e-03
+1.600000e+01	5.000000e-01	5.000000e-01	1.059000e+00	5.396218e-03	5.381840e-03
+1.700000e+01	5.000000e-01	5.000000e-01	1.069000e+00	5.709084e-03	5.717374e-03
+1.800000e+01	5.000000e-01	5.000000e-01	1.076000e+00	5.612397e-03	5.580827e-03
+1.900000e+01	5.000000e-01	5.000000e-01	1.083000e+00	6.485888e-03	6.493955e-03
+2.000000e+01	5.000000e-01	5.000000e-01	1.090000e+00	5.823149e-03	5.840596e-03
+2.100000e+01	5.000000e-01	5.000000e-01	1.100000e+00	6.836081e-03	6.835153e-03
+2.200000e+01	5.000000e-01	5.000000e-01	1.105000e+00	6.179838e-03	6.195586e-03
+2.300000e+01	5.000000e-01	5.000000e-01	1.109000e+00	9.264842e-03	9.382968e-03
+2.400000e+01	5.000000e-01	5.000000e-01	1.115000e+00	7.457174e-03	7.504028e-03
+2.500000e+01	5.000000e-01	5.000000e-01	1.132000e+00	8.047565e-03	8.300539e-03
+2.600000e+01	5.000000e-01	5.000000e-01	1.135000e+00	8.226210e-03	8.262529e-03
+2.700000e+01	5.000000e-01	5.000000e-01	1.132000e+00	8.908164e-03	9.480266e-03
+2.800000e+01	5.000000e-01	5.000000e-01	1.131000e+00	1.079298e-02	1.050242e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d04-x05-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d04-x05-y01
+Title=doi:10.17182/hepdata.76730.v1/t9
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.000000e+00	5.000000e-01	5.000000e-01	6.355000e-01	3.186370e-03	3.186315e-03
+3.000000e+00	5.000000e-01	5.000000e-01	7.754000e-01	3.896882e-03	3.897786e-03
+4.000000e+00	5.000000e-01	5.000000e-01	7.825000e-01	3.935607e-03	3.936481e-03
+5.000000e+00	5.000000e-01	5.000000e-01	8.213000e-01	4.114146e-03	4.114900e-03
+6.000000e+00	5.000000e-01	5.000000e-01	8.386000e-01	4.205120e-03	4.204228e-03
+7.000000e+00	5.000000e-01	5.000000e-01	8.598000e-01	4.313705e-03	4.314050e-03
+8.000000e+00	5.000000e-01	5.000000e-01	8.768000e-01	4.427049e-03	4.427510e-03
+9.000000e+00	5.000000e-01	5.000000e-01	8.920000e-01	4.486339e-03	4.486895e-03
+1.000000e+01	5.000000e-01	5.000000e-01	9.061000e-01	4.551802e-03	4.553058e-03
+1.100000e+01	5.000000e-01	5.000000e-01	9.184000e-01	4.623930e-03	4.623881e-03
+1.200000e+01	5.000000e-01	5.000000e-01	9.309000e-01	4.700453e-03	4.706176e-03
+1.300000e+01	5.000000e-01	5.000000e-01	9.407000e-01	4.798827e-03	4.796229e-03
+1.400000e+01	5.000000e-01	5.000000e-01	9.506000e-01	4.829054e-03	4.839104e-03
+1.500000e+01	5.000000e-01	5.000000e-01	9.623000e-01	4.998068e-03	4.990137e-03
+1.600000e+01	5.000000e-01	5.000000e-01	9.707000e-01	4.985447e-03	4.974053e-03
+1.700000e+01	5.000000e-01	5.000000e-01	9.802000e-01	5.374073e-03	5.395026e-03
+1.800000e+01	5.000000e-01	5.000000e-01	9.875000e-01	5.158682e-03	5.129382e-03
+1.900000e+01	5.000000e-01	5.000000e-01	9.952000e-01	6.199418e-03	6.204533e-03
+2.000000e+01	5.000000e-01	5.000000e-01	1.001000e+00	5.561689e-03	5.590800e-03
+2.100000e+01	5.000000e-01	5.000000e-01	1.013000e+00	6.949625e-03	6.946050e-03
+2.200000e+01	5.000000e-01	5.000000e-01	1.015000e+00	6.631755e-03	6.621100e-03
+2.300000e+01	5.000000e-01	5.000000e-01	1.022000e+00	7.648483e-03	7.508674e-03
+2.400000e+01	5.000000e-01	5.000000e-01	1.029000e+00	8.348484e-03	8.265702e-03
+2.500000e+01	5.000000e-01	5.000000e-01	1.043000e+00	7.625279e-03	7.665129e-03
+2.600000e+01	5.000000e-01	5.000000e-01	1.048000e+00	8.536584e-03	8.314823e-03
+2.700000e+01	5.000000e-01	5.000000e-01	1.053000e+00	8.247103e-03	8.487529e-03
+2.800000e+01	5.000000e-01	5.000000e-01	1.036000e+00	2.632628e-02	2.622189e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d05-x04-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d05-x04-y01
+Title=doi:10.17182/hepdata.76730.v1/t32
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+00	5.000000e-01	5.000000e-01	8.301000e-01	1.687937e-03	1.689005e-03
+2.000000e+00	5.000000e-01	5.000000e-01	8.560000e-01	1.719674e-03	1.719165e-03
+3.000000e+00	5.000000e-01	5.000000e-01	8.943000e-01	1.825839e-03	1.826733e-03
+4.000000e+00	5.000000e-01	5.000000e-01	9.276000e-01	1.880501e-03	1.880210e-03
+5.000000e+00	5.000000e-01	5.000000e-01	9.557000e-01	1.978528e-03	1.980329e-03
+6.000000e+00	5.000000e-01	5.000000e-01	9.786000e-01	1.993751e-03	1.991732e-03
+7.000000e+00	5.000000e-01	5.000000e-01	9.976000e-01	2.099225e-03	2.097679e-03
+8.000000e+00	5.000000e-01	5.000000e-01	1.015000e+00	2.072112e-03	2.068485e-03
+9.000000e+00	5.000000e-01	5.000000e-01	1.028000e+00	2.281861e-03	2.294517e-03
+1.000000e+01	5.000000e-01	5.000000e-01	1.042000e+00	2.227060e-03	2.232339e-03
+1.100000e+01	5.000000e-01	5.000000e-01	1.053000e+00	3.208575e-03	3.234187e-03
+1.200000e+01	5.000000e-01	5.000000e-01	1.067000e+00	2.570168e-03	2.572992e-03
+1.300000e+01	5.000000e-01	5.000000e-01	1.076000e+00	2.939793e-03	2.950565e-03
+1.400000e+01	5.000000e-01	5.000000e-01	1.087000e+00	3.339310e-03	3.459707e-03
+1.500000e+01	5.000000e-01	5.000000e-01	1.094000e+00	3.688359e-03	3.851276e-03
+1.600000e+01	5.000000e-01	5.000000e-01	1.109000e+00	5.849028e-03	5.720863e-03
+1.700000e+01	5.000000e-01	5.000000e-01	1.112000e+00	7.110256e-03	6.948605e-03
+1.800000e+01	5.000000e-01	5.000000e-01	1.123000e+00	7.071679e-03	7.333282e-03
+1.900000e+01	5.000000e-01	5.000000e-01	1.134000e+00	8.708084e-03	8.508937e-03
+2.000000e+01	5.000000e-01	5.000000e-01	1.149000e+00	1.404491e-02	1.369737e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d05-x05-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d05-x05-y01
+Title=doi:10.17182/hepdata.76730.v1/t31
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+00	5.000000e-01	5.000000e-01	7.746000e-01	2.327935e-03	2.327457e-03
+2.000000e+00	5.000000e-01	5.000000e-01	8.298000e-01	2.513414e-03	2.513642e-03
+3.000000e+00	5.000000e-01	5.000000e-01	8.664000e-01	2.606348e-03	2.606853e-03
+4.000000e+00	5.000000e-01	5.000000e-01	8.945000e-01	2.704729e-03	2.703746e-03
+5.000000e+00	5.000000e-01	5.000000e-01	9.176000e-01	2.786860e-03	2.784469e-03
+6.000000e+00	5.000000e-01	5.000000e-01	9.359000e-01	2.874906e-03	2.873028e-03
+7.000000e+00	5.000000e-01	5.000000e-01	9.524000e-01	2.922291e-03	2.928857e-03
+8.000000e+00	5.000000e-01	5.000000e-01	9.666000e-01	3.150809e-03	3.136094e-03
+9.000000e+00	5.000000e-01	5.000000e-01	9.810000e-01	3.183818e-03	3.197127e-03
+1.000000e+01	5.000000e-01	5.000000e-01	9.914000e-01	3.327144e-03	3.292378e-03
+1.100000e+01	5.000000e-01	5.000000e-01	1.001000e+00	3.634092e-03	3.533472e-03
+1.200000e+01	5.000000e-01	5.000000e-01	1.011000e+00	5.764596e-03	5.645218e-03
+1.300000e+01	5.000000e-01	5.000000e-01	1.020000e+00	5.521696e-03	5.707243e-03
+1.450000e+01	1.000000e+00	1.000000e+00	1.028000e+00	9.109206e-03	9.297599e-03
+1.650000e+01	1.000000e+00	1.000000e+00	1.040000e+00	1.523918e-02	1.515556e-02
+1.900000e+01	1.500000e+00	1.500000e+00	1.037000e+00	3.961481e-02	3.750351e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d06-x01-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d06-x01-y01
+Title=doi:10.17182/hepdata.76730.v1/t15
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+00	1.500000e+00	1.500000e+00	6.245000e-01	6.775431e-03	6.774669e-03
+4.500000e+00	1.500000e+00	1.500000e+00	6.185000e-01	6.747705e-03	6.746556e-03
+7.500000e+00	1.500000e+00	1.500000e+00	6.090000e-01	6.688931e-03	6.687583e-03
+1.050000e+01	1.500000e+00	1.500000e+00	5.992000e-01	6.629737e-03	6.627847e-03
+1.350000e+01	1.500000e+00	1.500000e+00	5.886000e-01	6.561875e-03	6.561300e-03
+1.650000e+01	1.500000e+00	1.500000e+00	5.786000e-01	6.502835e-03	6.501926e-03
+1.950000e+01	1.500000e+00	1.500000e+00	5.682000e-01	6.438587e-03	6.437830e-03
+2.250000e+01	1.500000e+00	1.500000e+00	5.590000e-01	6.390213e-03	6.390750e-03
+2.550000e+01	1.500000e+00	1.500000e+00	5.497000e-01	6.335753e-03	6.337166e-03
+2.850000e+01	1.500000e+00	1.500000e+00	5.418000e-01	6.297839e-03	6.297669e-03
+3.150000e+01	1.500000e+00	1.500000e+00	5.342000e-01	6.257010e-03	6.255807e-03
+3.450000e+01	1.500000e+00	1.500000e+00	5.271000e-01	6.217041e-03	6.216958e-03
+3.750000e+01	1.500000e+00	1.500000e+00	5.216000e-01	6.189826e-03	6.189639e-03
+4.050000e+01	1.500000e+00	1.500000e+00	5.164000e-01	6.159366e-03	6.159790e-03
+4.350000e+01	1.500000e+00	1.500000e+00	5.127000e-01	6.141172e-03	6.140821e-03
+4.650000e+01	1.500000e+00	1.500000e+00	5.085000e-01	6.107837e-03	6.109089e-03
+4.950000e+01	1.500000e+00	1.500000e+00	5.053000e-01	6.079011e-03	6.080130e-03
+5.250000e+01	1.500000e+00	1.500000e+00	5.033000e-01	6.060818e-03	6.060434e-03
+5.550000e+01	1.500000e+00	1.500000e+00	5.010000e-01	6.031216e-03	6.031455e-03
+5.850000e+01	1.500000e+00	1.500000e+00	4.996000e-01	6.012973e-03	6.012366e-03
+6.150000e+01	1.500000e+00	1.500000e+00	4.985000e-01	5.994704e-03	5.995805e-03
+6.450000e+01	1.500000e+00	1.500000e+00	4.981000e-01	5.983933e-03	5.983304e-03
+6.750000e+01	1.500000e+00	1.500000e+00	4.975000e-01	5.968425e-03	5.967920e-03
+7.050000e+01	1.500000e+00	1.500000e+00	4.976000e-01	5.960644e-03	5.959938e-03
+7.350000e+01	1.500000e+00	1.500000e+00	4.981000e-01	5.957991e-03	5.958152e-03
+7.650000e+01	1.500000e+00	1.500000e+00	4.989000e-01	5.957518e-03	5.957107e-03
+7.950000e+01	1.500000e+00	1.500000e+00	4.995000e-01	5.951946e-03	5.953401e-03
+8.250000e+01	1.500000e+00	1.500000e+00	5.006000e-01	5.957333e-03	5.957133e-03
+8.550000e+01	1.500000e+00	1.500000e+00	5.024000e-01	5.965921e-03	5.966783e-03
+8.850000e+01	1.500000e+00	1.500000e+00	5.039000e-01	5.972050e-03	5.972217e-03
+9.150000e+01	1.500000e+00	1.500000e+00	5.060000e-01	5.986857e-03	5.985055e-03
+9.450000e+01	1.500000e+00	1.500000e+00	5.080000e-01	5.996280e-03	5.994739e-03
+9.750000e+01	1.500000e+00	1.500000e+00	5.102000e-01	6.010441e-03	6.011086e-03
+1.005000e+02	1.500000e+00	1.500000e+00	5.131000e-01	6.033839e-03	6.031858e-03
+1.035000e+02	1.500000e+00	1.500000e+00	5.156000e-01	6.049786e-03	6.050615e-03
+1.065000e+02	1.500000e+00	1.500000e+00	5.184000e-01	6.072846e-03	6.073190e-03
+1.095000e+02	1.500000e+00	1.500000e+00	5.211000e-01	6.095171e-03	6.094484e-03
+1.125000e+02	1.500000e+00	1.500000e+00	5.244000e-01	6.122223e-03	6.121964e-03
+1.155000e+02	1.500000e+00	1.500000e+00	5.276000e-01	6.146102e-03	6.145878e-03
+1.185000e+02	1.500000e+00	1.500000e+00	5.312000e-01	6.175534e-03	6.175040e-03
+1.215000e+02	1.500000e+00	1.500000e+00	5.343000e-01	6.197109e-03	6.197832e-03
+1.245000e+02	1.500000e+00	1.500000e+00	5.380000e-01	6.223008e-03	6.225555e-03
+1.275000e+02	1.500000e+00	1.500000e+00	5.417000e-01	6.251120e-03	6.250270e-03
+1.305000e+02	1.500000e+00	1.500000e+00	5.454000e-01	6.273827e-03	6.273051e-03
+1.335000e+02	1.500000e+00	1.500000e+00	5.494000e-01	6.302796e-03	6.303770e-03
+1.365000e+02	1.500000e+00	1.500000e+00	5.531000e-01	6.328046e-03	6.326341e-03
+1.395000e+02	1.500000e+00	1.500000e+00	5.567000e-01	6.353211e-03	6.353758e-03
+1.425000e+02	1.500000e+00	1.500000e+00	5.603000e-01	6.377823e-03	6.377463e-03
+1.455000e+02	1.500000e+00	1.500000e+00	5.640000e-01	6.404503e-03	6.406841e-03
+1.485000e+02	1.500000e+00	1.500000e+00	5.676000e-01	6.430562e-03	6.431850e-03
+1.515000e+02	1.500000e+00	1.500000e+00	5.712000e-01	6.457836e-03	6.456644e-03
+1.545000e+02	1.500000e+00	1.500000e+00	5.741000e-01	6.473457e-03	6.473839e-03
+1.575000e+02	1.500000e+00	1.500000e+00	5.777000e-01	6.500564e-03	6.498799e-03
+1.605000e+02	1.500000e+00	1.500000e+00	5.800000e-01	6.505749e-03	6.504994e-03
+1.635000e+02	1.500000e+00	1.500000e+00	5.828000e-01	6.518185e-03	6.518260e-03
+1.665000e+02	1.500000e+00	1.500000e+00	5.846000e-01	6.517467e-03	6.518485e-03
+1.695000e+02	1.500000e+00	1.500000e+00	5.865000e-01	6.517678e-03	6.517306e-03
+1.725000e+02	1.500000e+00	1.500000e+00	5.876000e-01	6.510543e-03	6.508212e-03
+1.755000e+02	1.500000e+00	1.500000e+00	5.891000e-01	6.506564e-03	6.506073e-03
+1.785000e+02	1.500000e+00	1.500000e+00	5.890000e-01	6.486971e-03	6.487377e-03
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d06-x02-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d06-x02-y01
+Title=doi:10.17182/hepdata.76730.v1/t16
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+00	1.500000e+00	1.500000e+00	1.698000e+00	1.786117e-02	1.784740e-02
+4.500000e+00	1.500000e+00	1.500000e+00	1.626000e+00	1.710549e-02	1.716494e-02
+7.500000e+00	1.500000e+00	1.500000e+00	1.537000e+00	1.624349e-02	1.623088e-02
+1.050000e+01	1.500000e+00	1.500000e+00	1.456000e+00	1.542840e-02	1.543306e-02
+1.350000e+01	1.500000e+00	1.500000e+00	1.378000e+00	1.466472e-02	1.466381e-02
+1.650000e+01	1.500000e+00	1.500000e+00	1.316000e+00	1.404352e-02	1.407874e-02
+1.950000e+01	1.500000e+00	1.500000e+00	1.261000e+00	1.346536e-02	1.351479e-02
+2.250000e+01	1.500000e+00	1.500000e+00	1.221000e+00	1.310739e-02	1.309200e-02
+2.550000e+01	1.500000e+00	1.500000e+00	1.189000e+00	1.276228e-02	1.277473e-02
+2.850000e+01	1.500000e+00	1.500000e+00	1.162000e+00	1.251429e-02	1.248413e-02
+3.150000e+01	1.500000e+00	1.500000e+00	1.142000e+00	1.229244e-02	1.229841e-02
+3.450000e+01	1.500000e+00	1.500000e+00	1.122000e+00	1.210301e-02	1.206249e-02
+3.750000e+01	1.500000e+00	1.500000e+00	1.109000e+00	1.193612e-02	1.195181e-02
+4.050000e+01	1.500000e+00	1.500000e+00	1.094000e+00	1.180693e-02	1.180166e-02
+4.350000e+01	1.500000e+00	1.500000e+00	1.088000e+00	1.173066e-02	1.173771e-02
+4.650000e+01	1.500000e+00	1.500000e+00	1.077000e+00	1.157048e-02	1.164084e-02
+4.950000e+01	1.500000e+00	1.500000e+00	1.071000e+00	1.157129e-02	1.152081e-02
+5.250000e+01	1.500000e+00	1.500000e+00	1.068000e+00	1.157536e-02	1.157025e-02
+5.550000e+01	1.500000e+00	1.500000e+00	1.061000e+00	1.145770e-02	1.146224e-02
+5.850000e+01	1.500000e+00	1.500000e+00	1.058000e+00	1.140676e-02	1.144417e-02
+6.150000e+01	1.500000e+00	1.500000e+00	1.057000e+00	1.141851e-02	1.143252e-02
+6.450000e+01	1.500000e+00	1.500000e+00	1.059000e+00	1.141564e-02	1.144906e-02
+6.750000e+01	1.500000e+00	1.500000e+00	1.059000e+00	1.142176e-02	1.142951e-02
+7.050000e+01	1.500000e+00	1.500000e+00	1.060000e+00	1.143781e-02	1.142139e-02
+7.350000e+01	1.500000e+00	1.500000e+00	1.063000e+00	1.146774e-02	1.147574e-02
+7.650000e+01	1.500000e+00	1.500000e+00	1.063000e+00	1.149224e-02	1.150412e-02
+7.950000e+01	1.500000e+00	1.500000e+00	1.068000e+00	1.153193e-02	1.156409e-02
+8.250000e+01	1.500000e+00	1.500000e+00	1.069000e+00	1.157282e-02	1.154602e-02
+8.550000e+01	1.500000e+00	1.500000e+00	1.072000e+00	1.161200e-02	1.158057e-02
+8.850000e+01	1.500000e+00	1.500000e+00	1.080000e+00	1.166639e-02	1.167330e-02
+9.150000e+01	1.500000e+00	1.500000e+00	1.085000e+00	1.173225e-02	1.170887e-02
+9.450000e+01	1.500000e+00	1.500000e+00	1.088000e+00	1.177211e-02	1.177229e-02
+9.750000e+01	1.500000e+00	1.500000e+00	1.097000e+00	1.185369e-02	1.184874e-02
+1.005000e+02	1.500000e+00	1.500000e+00	1.105000e+00	1.193629e-02	1.193139e-02
+1.035000e+02	1.500000e+00	1.500000e+00	1.113000e+00	1.200547e-02	1.198511e-02
+1.065000e+02	1.500000e+00	1.500000e+00	1.121000e+00	1.207232e-02	1.208309e-02
+1.095000e+02	1.500000e+00	1.500000e+00	1.130000e+00	1.220529e-02	1.222322e-02
+1.125000e+02	1.500000e+00	1.500000e+00	1.139000e+00	1.227971e-02	1.229839e-02
+1.155000e+02	1.500000e+00	1.500000e+00	1.151000e+00	1.239393e-02	1.242404e-02
+1.185000e+02	1.500000e+00	1.500000e+00	1.162000e+00	1.253840e-02	1.253162e-02
+1.215000e+02	1.500000e+00	1.500000e+00	1.175000e+00	1.266104e-02	1.265565e-02
+1.245000e+02	1.500000e+00	1.500000e+00	1.186000e+00	1.278204e-02	1.279605e-02
+1.275000e+02	1.500000e+00	1.500000e+00	1.198000e+00	1.291165e-02	1.290978e-02
+1.305000e+02	1.500000e+00	1.500000e+00	1.215000e+00	1.308501e-02	1.309434e-02
+1.335000e+02	1.500000e+00	1.500000e+00	1.225000e+00	1.317229e-02	1.317475e-02
+1.365000e+02	1.500000e+00	1.500000e+00	1.241000e+00	1.332502e-02	1.333123e-02
+1.395000e+02	1.500000e+00	1.500000e+00	1.258000e+00	1.349651e-02	1.348970e-02
+1.425000e+02	1.500000e+00	1.500000e+00	1.275000e+00	1.368815e-02	1.367091e-02
+1.455000e+02	1.500000e+00	1.500000e+00	1.291000e+00	1.386121e-02	1.383494e-02
+1.485000e+02	1.500000e+00	1.500000e+00	1.305000e+00	1.398035e-02	1.399023e-02
+1.515000e+02	1.500000e+00	1.500000e+00	1.328000e+00	1.425128e-02	1.423124e-02
+1.545000e+02	1.500000e+00	1.500000e+00	1.339000e+00	1.432233e-02	1.428985e-02
+1.575000e+02	1.500000e+00	1.500000e+00	1.358000e+00	1.451134e-02	1.451425e-02
+1.605000e+02	1.500000e+00	1.500000e+00	1.375000e+00	1.472995e-02	1.470549e-02
+1.635000e+02	1.500000e+00	1.500000e+00	1.388000e+00	1.482543e-02	1.483031e-02
+1.665000e+02	1.500000e+00	1.500000e+00	1.401000e+00	1.493991e-02	1.494065e-02
+1.695000e+02	1.500000e+00	1.500000e+00	1.415000e+00	1.513103e-02	1.510470e-02
+1.725000e+02	1.500000e+00	1.500000e+00	1.423000e+00	1.519967e-02	1.520143e-02
+1.755000e+02	1.500000e+00	1.500000e+00	1.434000e+00	1.532736e-02	1.532973e-02
+1.785000e+02	1.500000e+00	1.500000e+00	1.434000e+00	1.537791e-02	1.535429e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d06-x03-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d06-x03-y01
+Title=doi:10.17182/hepdata.76730.v1/t17
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+00	1.500000e+00	1.500000e+00	2.586000e+00	2.895518e-02	2.925987e-02
+4.500000e+00	1.500000e+00	1.500000e+00	2.276000e+00	2.581416e-02	2.622005e-02
+7.500000e+00	1.500000e+00	1.500000e+00	1.961000e+00	2.296599e-02	2.302955e-02
+1.050000e+01	1.500000e+00	1.500000e+00	1.733000e+00	2.084714e-02	2.047849e-02
+1.350000e+01	1.500000e+00	1.500000e+00	1.582000e+00	1.939272e-02	1.883619e-02
+1.650000e+01	1.500000e+00	1.500000e+00	1.479000e+00	1.772445e-02	1.792951e-02
+1.950000e+01	1.500000e+00	1.500000e+00	1.395000e+00	1.688289e-02	1.686332e-02
+2.250000e+01	1.500000e+00	1.500000e+00	1.320000e+00	1.637435e-02	1.609697e-02
+2.550000e+01	1.500000e+00	1.500000e+00	1.299000e+00	1.593590e-02	1.595542e-02
+2.850000e+01	1.500000e+00	1.500000e+00	1.249000e+00	1.542427e-02	1.558758e-02
+3.150000e+01	1.500000e+00	1.500000e+00	1.214000e+00	1.506505e-02	1.499086e-02
+3.450000e+01	1.500000e+00	1.500000e+00	1.196000e+00	1.516581e-02	1.553769e-02
+3.750000e+01	1.500000e+00	1.500000e+00	1.180000e+00	1.509795e-02	1.509329e-02
+4.050000e+01	1.500000e+00	1.500000e+00	1.150000e+00	1.490405e-02	1.484319e-02
+4.350000e+01	1.500000e+00	1.500000e+00	1.144000e+00	1.502051e-02	1.484994e-02
+4.650000e+01	1.500000e+00	1.500000e+00	1.134000e+00	1.508222e-02	1.484156e-02
+4.950000e+01	1.500000e+00	1.500000e+00	1.127000e+00	1.462486e-02	1.492054e-02
+5.250000e+01	1.500000e+00	1.500000e+00	1.126000e+00	1.498354e-02	1.479646e-02
+5.550000e+01	1.500000e+00	1.500000e+00	1.110000e+00	1.438513e-02	1.428293e-02
+5.850000e+01	1.500000e+00	1.500000e+00	1.116000e+00	1.442191e-02	1.422055e-02
+6.150000e+01	1.500000e+00	1.500000e+00	1.117000e+00	1.436036e-02	1.412404e-02
+6.450000e+01	1.500000e+00	1.500000e+00	1.109000e+00	1.419368e-02	1.449543e-02
+6.750000e+01	1.500000e+00	1.500000e+00	1.114000e+00	1.414563e-02	1.399618e-02
+7.050000e+01	1.500000e+00	1.500000e+00	1.111000e+00	1.405282e-02	1.409734e-02
+7.350000e+01	1.500000e+00	1.500000e+00	1.119000e+00	1.403386e-02	1.406279e-02
+7.650000e+01	1.500000e+00	1.500000e+00	1.117000e+00	1.418288e-02	1.391465e-02
+7.950000e+01	1.500000e+00	1.500000e+00	1.123000e+00	1.452194e-02	1.417762e-02
+8.250000e+01	1.500000e+00	1.500000e+00	1.123000e+00	1.423040e-02	1.423149e-02
+8.550000e+01	1.500000e+00	1.500000e+00	1.133000e+00	1.422384e-02	1.435718e-02
+8.850000e+01	1.500000e+00	1.500000e+00	1.156000e+00	1.479610e-02	1.449930e-02
+9.150000e+01	1.500000e+00	1.500000e+00	1.159000e+00	1.471469e-02	1.454536e-02
+9.450000e+01	1.500000e+00	1.500000e+00	1.157000e+00	1.469684e-02	1.490562e-02
+9.750000e+01	1.500000e+00	1.500000e+00	1.175000e+00	1.486232e-02	1.476983e-02
+1.005000e+02	1.500000e+00	1.500000e+00	1.174000e+00	1.478374e-02	1.468957e-02
+1.035000e+02	1.500000e+00	1.500000e+00	1.202000e+00	1.477133e-02	1.515117e-02
+1.065000e+02	1.500000e+00	1.500000e+00	1.207000e+00	1.560536e-02	1.513562e-02
+1.095000e+02	1.500000e+00	1.500000e+00	1.224000e+00	1.511329e-02	1.529577e-02
+1.125000e+02	1.500000e+00	1.500000e+00	1.226000e+00	1.515141e-02	1.531998e-02
+1.155000e+02	1.500000e+00	1.500000e+00	1.244000e+00	1.594215e-02	1.547513e-02
+1.185000e+02	1.500000e+00	1.500000e+00	1.270000e+00	1.579967e-02	1.593515e-02
+1.215000e+02	1.500000e+00	1.500000e+00	1.278000e+00	1.611714e-02	1.573620e-02
+1.245000e+02	1.500000e+00	1.500000e+00	1.305000e+00	1.625425e-02	1.623752e-02
+1.275000e+02	1.500000e+00	1.500000e+00	1.329000e+00	1.652562e-02	1.642769e-02
+1.305000e+02	1.500000e+00	1.500000e+00	1.358000e+00	1.655686e-02	1.684909e-02
+1.335000e+02	1.500000e+00	1.500000e+00	1.381000e+00	1.686604e-02	1.681944e-02
+1.365000e+02	1.500000e+00	1.500000e+00	1.411000e+00	1.742681e-02	1.709549e-02
+1.395000e+02	1.500000e+00	1.500000e+00	1.436000e+00	1.786404e-02	1.709429e-02
+1.425000e+02	1.500000e+00	1.500000e+00	1.470000e+00	1.818962e-02	1.779867e-02
+1.455000e+02	1.500000e+00	1.500000e+00	1.504000e+00	1.815882e-02	1.813212e-02
+1.485000e+02	1.500000e+00	1.500000e+00	1.537000e+00	1.869200e-02	1.839660e-02
+1.515000e+02	1.500000e+00	1.500000e+00	1.588000e+00	1.872499e-02	1.856162e-02
+1.545000e+02	1.500000e+00	1.500000e+00	1.638000e+00	1.973905e-02	1.937641e-02
+1.575000e+02	1.500000e+00	1.500000e+00	1.667000e+00	1.967298e-02	1.989413e-02
+1.605000e+02	1.500000e+00	1.500000e+00	1.714000e+00	2.021882e-02	1.990259e-02
+1.635000e+02	1.500000e+00	1.500000e+00	1.759000e+00	2.087957e-02	2.094281e-02
+1.665000e+02	1.500000e+00	1.500000e+00	1.805000e+00	2.131153e-02	2.131480e-02
+1.695000e+02	1.500000e+00	1.500000e+00	1.838000e+00	2.149097e-02	2.162664e-02
+1.725000e+02	1.500000e+00	1.500000e+00	1.881000e+00	2.232074e-02	2.190273e-02
+1.755000e+02	1.500000e+00	1.500000e+00	1.898000e+00	2.202666e-02	2.223089e-02
+1.785000e+02	1.500000e+00	1.500000e+00	1.914000e+00	2.236150e-02	2.281497e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d07-x01-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d07-x01-y01
+Title=doi:10.17182/hepdata.76730.v1/t18
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+00	1.500000e+00	1.500000e+00	6.647000e-01	6.938455e-03	6.938742e-03
+4.500000e+00	1.500000e+00	1.500000e+00	6.460000e-01	6.762143e-03	6.765152e-03
+7.500000e+00	1.500000e+00	1.500000e+00	6.228000e-01	6.556749e-03	6.555907e-03
+1.050000e+01	1.500000e+00	1.500000e+00	6.022000e-01	6.384050e-03	6.384549e-03
+1.350000e+01	1.500000e+00	1.500000e+00	5.824000e-01	6.222673e-03	6.222754e-03
+1.650000e+01	1.500000e+00	1.500000e+00	5.652000e-01	6.089989e-03	6.090361e-03
+1.950000e+01	1.500000e+00	1.500000e+00	5.494000e-01	5.969231e-03	5.967052e-03
+2.250000e+01	1.500000e+00	1.500000e+00	5.363000e-01	5.871322e-03	5.871547e-03
+2.550000e+01	1.500000e+00	1.500000e+00	5.240000e-01	5.775163e-03	5.775850e-03
+2.850000e+01	1.500000e+00	1.500000e+00	5.140000e-01	5.703942e-03	5.700979e-03
+3.150000e+01	1.500000e+00	1.500000e+00	5.052000e-01	5.632353e-03	5.634505e-03
+3.450000e+01	1.500000e+00	1.500000e+00	4.970000e-01	5.566628e-03	5.567568e-03
+3.750000e+01	1.500000e+00	1.500000e+00	4.911000e-01	5.519949e-03	5.520123e-03
+4.050000e+01	1.500000e+00	1.500000e+00	4.855000e-01	5.474301e-03	5.473048e-03
+4.350000e+01	1.500000e+00	1.500000e+00	4.815000e-01	5.440830e-03	5.441580e-03
+4.650000e+01	1.500000e+00	1.500000e+00	4.772000e-01	5.399427e-03	5.398668e-03
+4.950000e+01	1.500000e+00	1.500000e+00	4.739000e-01	5.368066e-03	5.366861e-03
+5.250000e+01	1.500000e+00	1.500000e+00	4.720000e-01	5.347341e-03	5.347971e-03
+5.550000e+01	1.500000e+00	1.500000e+00	4.698000e-01	5.319315e-03	5.318800e-03
+5.850000e+01	1.500000e+00	1.500000e+00	4.684000e-01	5.297244e-03	5.297401e-03
+6.150000e+01	1.500000e+00	1.500000e+00	4.675000e-01	5.279818e-03	5.280086e-03
+6.450000e+01	1.500000e+00	1.500000e+00	4.671000e-01	5.265210e-03	5.265013e-03
+6.750000e+01	1.500000e+00	1.500000e+00	4.667000e-01	5.249944e-03	5.250095e-03
+7.050000e+01	1.500000e+00	1.500000e+00	4.670000e-01	5.243575e-03	5.242608e-03
+7.350000e+01	1.500000e+00	1.500000e+00	4.676000e-01	5.238860e-03	5.241236e-03
+7.650000e+01	1.500000e+00	1.500000e+00	4.684000e-01	5.242276e-03	5.242135e-03
+7.950000e+01	1.500000e+00	1.500000e+00	4.692000e-01	5.243303e-03	5.244392e-03
+8.250000e+01	1.500000e+00	1.500000e+00	4.703000e-01	5.254881e-03	5.254504e-03
+8.550000e+01	1.500000e+00	1.500000e+00	4.723000e-01	5.276257e-03	5.277848e-03
+8.850000e+01	1.500000e+00	1.500000e+00	4.743000e-01	5.301184e-03	5.301114e-03
+9.150000e+01	1.500000e+00	1.500000e+00	4.767000e-01	5.334653e-03	5.334594e-03
+9.450000e+01	1.500000e+00	1.500000e+00	4.788000e-01	5.362594e-03	5.364194e-03
+9.750000e+01	1.500000e+00	1.500000e+00	4.814000e-01	5.398196e-03	5.399528e-03
+1.005000e+02	1.500000e+00	1.500000e+00	4.845000e-01	5.437821e-03	5.439231e-03
+1.035000e+02	1.500000e+00	1.500000e+00	4.873000e-01	5.475074e-03	5.475402e-03
+1.065000e+02	1.500000e+00	1.500000e+00	4.906000e-01	5.510960e-03	5.512665e-03
+1.095000e+02	1.500000e+00	1.500000e+00	4.936000e-01	5.539085e-03	5.539952e-03
+1.125000e+02	1.500000e+00	1.500000e+00	4.972000e-01	5.568651e-03	5.568616e-03
+1.155000e+02	1.500000e+00	1.500000e+00	5.008000e-01	5.589800e-03	5.589102e-03
+1.185000e+02	1.500000e+00	1.500000e+00	5.049000e-01	5.609959e-03	5.611382e-03
+1.215000e+02	1.500000e+00	1.500000e+00	5.085000e-01	5.624454e-03	5.622931e-03
+1.245000e+02	1.500000e+00	1.500000e+00	5.129000e-01	5.645943e-03	5.645637e-03
+1.275000e+02	1.500000e+00	1.500000e+00	5.170000e-01	5.666746e-03	5.666356e-03
+1.305000e+02	1.500000e+00	1.500000e+00	5.212000e-01	5.689832e-03	5.689916e-03
+1.335000e+02	1.500000e+00	1.500000e+00	5.259000e-01	5.723835e-03	5.723944e-03
+1.365000e+02	1.500000e+00	1.500000e+00	5.304000e-01	5.762113e-03	5.760451e-03
+1.395000e+02	1.500000e+00	1.500000e+00	5.348000e-01	5.802218e-03	5.803084e-03
+1.425000e+02	1.500000e+00	1.500000e+00	5.392000e-01	5.850771e-03	5.851449e-03
+1.455000e+02	1.500000e+00	1.500000e+00	5.441000e-01	5.909951e-03	5.909662e-03
+1.485000e+02	1.500000e+00	1.500000e+00	5.487000e-01	5.959428e-03	5.959635e-03
+1.515000e+02	1.500000e+00	1.500000e+00	5.533000e-01	6.004092e-03	6.004525e-03
+1.545000e+02	1.500000e+00	1.500000e+00	5.571000e-01	6.033605e-03	6.033846e-03
+1.575000e+02	1.500000e+00	1.500000e+00	5.618000e-01	6.066483e-03	6.067276e-03
+1.605000e+02	1.500000e+00	1.500000e+00	5.652000e-01	6.077259e-03	6.077975e-03
+1.635000e+02	1.500000e+00	1.500000e+00	5.690000e-01	6.090340e-03	6.092004e-03
+1.665000e+02	1.500000e+00	1.500000e+00	5.718000e-01	6.093823e-03	6.092573e-03
+1.695000e+02	1.500000e+00	1.500000e+00	5.743000e-01	6.095097e-03	6.095698e-03
+1.725000e+02	1.500000e+00	1.500000e+00	5.760000e-01	6.098387e-03	6.096949e-03
+1.755000e+02	1.500000e+00	1.500000e+00	5.782000e-01	6.116278e-03	6.116349e-03
+1.785000e+02	1.500000e+00	1.500000e+00	5.782000e-01	6.125627e-03	6.125727e-03
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d07-x02-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d07-x02-y01
+Title=doi:10.17182/hepdata.76730.v1/t19
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+00	1.500000e+00	1.500000e+00	2.778000e+00	3.409095e-02	3.398580e-02
+4.500000e+00	1.500000e+00	1.500000e+00	2.442000e+00	2.885954e-02	2.886524e-02
+7.500000e+00	1.500000e+00	1.500000e+00	2.127000e+00	2.447451e-02	2.442335e-02
+1.050000e+01	1.500000e+00	1.500000e+00	1.879000e+00	2.098872e-02	2.094077e-02
+1.350000e+01	1.500000e+00	1.500000e+00	1.692000e+00	1.853671e-02	1.850365e-02
+1.650000e+01	1.500000e+00	1.500000e+00	1.556000e+00	1.674473e-02	1.675148e-02
+1.950000e+01	1.500000e+00	1.500000e+00	1.458000e+00	1.547007e-02	1.553735e-02
+2.250000e+01	1.500000e+00	1.500000e+00	1.388000e+00	1.465716e-02	1.462509e-02
+2.550000e+01	1.500000e+00	1.500000e+00	1.335000e+00	1.403642e-02	1.407823e-02
+2.850000e+01	1.500000e+00	1.500000e+00	1.293000e+00	1.365151e-02	1.367293e-02
+3.150000e+01	1.500000e+00	1.500000e+00	1.264000e+00	1.344244e-02	1.334956e-02
+3.450000e+01	1.500000e+00	1.500000e+00	1.237000e+00	1.311773e-02	1.311734e-02
+3.750000e+01	1.500000e+00	1.500000e+00	1.219000e+00	1.294954e-02	1.299051e-02
+4.050000e+01	1.500000e+00	1.500000e+00	1.200000e+00	1.277049e-02	1.276298e-02
+4.350000e+01	1.500000e+00	1.500000e+00	1.193000e+00	1.270048e-02	1.264760e-02
+4.650000e+01	1.500000e+00	1.500000e+00	1.180000e+00	1.254021e-02	1.257494e-02
+4.950000e+01	1.500000e+00	1.500000e+00	1.173000e+00	1.240111e-02	1.247069e-02
+5.250000e+01	1.500000e+00	1.500000e+00	1.170000e+00	1.236265e-02	1.248742e-02
+5.550000e+01	1.500000e+00	1.500000e+00	1.163000e+00	1.236204e-02	1.234276e-02
+5.850000e+01	1.500000e+00	1.500000e+00	1.159000e+00	1.230654e-02	1.227883e-02
+6.150000e+01	1.500000e+00	1.500000e+00	1.159000e+00	1.225215e-02	1.237218e-02
+6.450000e+01	1.500000e+00	1.500000e+00	1.161000e+00	1.233749e-02	1.235772e-02
+6.750000e+01	1.500000e+00	1.500000e+00	1.163000e+00	1.235732e-02	1.236268e-02
+7.050000e+01	1.500000e+00	1.500000e+00	1.164000e+00	1.235260e-02	1.241209e-02
+7.350000e+01	1.500000e+00	1.500000e+00	1.168000e+00	1.246727e-02	1.242103e-02
+7.650000e+01	1.500000e+00	1.500000e+00	1.170000e+00	1.247578e-02	1.243101e-02
+7.950000e+01	1.500000e+00	1.500000e+00	1.175000e+00	1.249965e-02	1.246685e-02
+8.250000e+01	1.500000e+00	1.500000e+00	1.178000e+00	1.254491e-02	1.252368e-02
+8.550000e+01	1.500000e+00	1.500000e+00	1.183000e+00	1.255144e-02	1.255782e-02
+8.850000e+01	1.500000e+00	1.500000e+00	1.195000e+00	1.268742e-02	1.268003e-02
+9.150000e+01	1.500000e+00	1.500000e+00	1.200000e+00	1.274405e-02	1.279995e-02
+9.450000e+01	1.500000e+00	1.500000e+00	1.207000e+00	1.281028e-02	1.282950e-02
+9.750000e+01	1.500000e+00	1.500000e+00	1.218000e+00	1.292602e-02	1.294149e-02
+1.005000e+02	1.500000e+00	1.500000e+00	1.228000e+00	1.304656e-02	1.305579e-02
+1.035000e+02	1.500000e+00	1.500000e+00	1.242000e+00	1.322777e-02	1.312855e-02
+1.065000e+02	1.500000e+00	1.500000e+00	1.253000e+00	1.329486e-02	1.328669e-02
+1.095000e+02	1.500000e+00	1.500000e+00	1.268000e+00	1.347617e-02	1.340774e-02
+1.125000e+02	1.500000e+00	1.500000e+00	1.281000e+00	1.357460e-02	1.359527e-02
+1.155000e+02	1.500000e+00	1.500000e+00	1.296000e+00	1.374826e-02	1.374111e-02
+1.185000e+02	1.500000e+00	1.500000e+00	1.313000e+00	1.389533e-02	1.390352e-02
+1.215000e+02	1.500000e+00	1.500000e+00	1.332000e+00	1.414223e-02	1.412537e-02
+1.245000e+02	1.500000e+00	1.500000e+00	1.353000e+00	1.433722e-02	1.428987e-02
+1.275000e+02	1.500000e+00	1.500000e+00	1.369000e+00	1.450306e-02	1.450080e-02
+1.305000e+02	1.500000e+00	1.500000e+00	1.396000e+00	1.479725e-02	1.478291e-02
+1.335000e+02	1.500000e+00	1.500000e+00	1.415000e+00	1.494089e-02	1.491542e-02
+1.365000e+02	1.500000e+00	1.500000e+00	1.440000e+00	1.513650e-02	1.522971e-02
+1.395000e+02	1.500000e+00	1.500000e+00	1.469000e+00	1.548609e-02	1.547317e-02
+1.425000e+02	1.500000e+00	1.500000e+00	1.499000e+00	1.577194e-02	1.586828e-02
+1.455000e+02	1.500000e+00	1.500000e+00	1.526000e+00	1.605070e-02	1.606132e-02
+1.485000e+02	1.500000e+00	1.500000e+00	1.554000e+00	1.633557e-02	1.636485e-02
+1.515000e+02	1.500000e+00	1.500000e+00	1.593000e+00	1.671778e-02	1.675497e-02
+1.545000e+02	1.500000e+00	1.500000e+00	1.616000e+00	1.700014e-02	1.699718e-02
+1.575000e+02	1.500000e+00	1.500000e+00	1.652000e+00	1.738910e-02	1.738142e-02
+1.605000e+02	1.500000e+00	1.500000e+00	1.689000e+00	1.775249e-02	1.773475e-02
+1.635000e+02	1.500000e+00	1.500000e+00	1.720000e+00	1.804914e-02	1.806036e-02
+1.665000e+02	1.500000e+00	1.500000e+00	1.748000e+00	1.831568e-02	1.832239e-02
+1.695000e+02	1.500000e+00	1.500000e+00	1.779000e+00	1.863255e-02	1.858062e-02
+1.725000e+02	1.500000e+00	1.500000e+00	1.804000e+00	1.887121e-02	1.887456e-02
+1.755000e+02	1.500000e+00	1.500000e+00	1.826000e+00	1.937312e-02	1.933334e-02
+1.785000e+02	1.500000e+00	1.500000e+00	1.831000e+00	1.975551e-02	1.981590e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d07-x03-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d07-x03-y01
+Title=doi:10.17182/hepdata.76730.v1/t20
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+00	1.500000e+00	1.500000e+00	6.984000e+00	9.058502e-02	8.861365e-02
+4.500000e+00	1.500000e+00	1.500000e+00	4.787000e+00	6.019391e-02	5.810733e-02
+7.500000e+00	1.500000e+00	1.500000e+00	3.339000e+00	4.221780e-02	4.184771e-02
+1.050000e+01	1.500000e+00	1.500000e+00	2.566000e+00	3.177678e-02	3.273053e-02
+1.350000e+01	1.500000e+00	1.500000e+00	2.148000e+00	2.744988e-02	2.792288e-02
+1.650000e+01	1.500000e+00	1.500000e+00	1.890000e+00	2.427987e-02	2.426313e-02
+1.950000e+01	1.500000e+00	1.500000e+00	1.720000e+00	2.220073e-02	2.212075e-02
+2.250000e+01	1.500000e+00	1.500000e+00	1.598000e+00	2.113149e-02	2.080003e-02
+2.550000e+01	1.500000e+00	1.500000e+00	1.554000e+00	2.005769e-02	2.035929e-02
+2.850000e+01	1.500000e+00	1.500000e+00	1.471000e+00	1.923777e-02	1.923777e-02
+3.150000e+01	1.500000e+00	1.500000e+00	1.419000e+00	1.822018e-02	1.830413e-02
+3.450000e+01	1.500000e+00	1.500000e+00	1.398000e+00	1.838423e-02	1.788605e-02
+3.750000e+01	1.500000e+00	1.500000e+00	1.368000e+00	1.834053e-02	1.776883e-02
+4.050000e+01	1.500000e+00	1.500000e+00	1.336000e+00	1.864084e-02	1.731434e-02
+4.350000e+01	1.500000e+00	1.500000e+00	1.329000e+00	1.816045e-02	1.830367e-02
+4.650000e+01	1.500000e+00	1.500000e+00	1.311000e+00	1.841947e-02	1.839555e-02
+4.950000e+01	1.500000e+00	1.500000e+00	1.301000e+00	1.786146e-02	1.821276e-02
+5.250000e+01	1.500000e+00	1.500000e+00	1.307000e+00	1.852842e-02	1.885577e-02
+5.550000e+01	1.500000e+00	1.500000e+00	1.280000e+00	1.799210e-02	1.784792e-02
+5.850000e+01	1.500000e+00	1.500000e+00	1.287000e+00	1.759576e-02	1.777546e-02
+6.150000e+01	1.500000e+00	1.500000e+00	1.292000e+00	1.735002e-02	1.852290e-02
+6.450000e+01	1.500000e+00	1.500000e+00	1.281000e+00	1.735204e-02	1.790810e-02
+6.750000e+01	1.500000e+00	1.500000e+00	1.296000e+00	1.764802e-02	1.713377e-02
+7.050000e+01	1.500000e+00	1.500000e+00	1.295000e+00	1.701581e-02	1.733281e-02
+7.350000e+01	1.500000e+00	1.500000e+00	1.299000e+00	1.739662e-02	1.743479e-02
+7.650000e+01	1.500000e+00	1.500000e+00	1.308000e+00	1.697310e-02	1.744389e-02
+7.950000e+01	1.500000e+00	1.500000e+00	1.305000e+00	1.740724e-02	1.720756e-02
+8.250000e+01	1.500000e+00	1.500000e+00	1.323000e+00	1.779751e-02	1.749503e-02
+8.550000e+01	1.500000e+00	1.500000e+00	1.342000e+00	1.788632e-02	1.801279e-02
+8.850000e+01	1.500000e+00	1.500000e+00	1.358000e+00	1.765637e-02	1.787562e-02
+9.150000e+01	1.500000e+00	1.500000e+00	1.368000e+00	1.827574e-02	1.772119e-02
+9.450000e+01	1.500000e+00	1.500000e+00	1.372000e+00	1.752079e-02	1.823689e-02
+9.750000e+01	1.500000e+00	1.500000e+00	1.399000e+00	1.817016e-02	1.866906e-02
+1.005000e+02	1.500000e+00	1.500000e+00	1.406000e+00	1.888109e-02	1.871692e-02
+1.035000e+02	1.500000e+00	1.500000e+00	1.442000e+00	1.870264e-02	1.903479e-02
+1.065000e+02	1.500000e+00	1.500000e+00	1.455000e+00	1.933675e-02	1.887573e-02
+1.095000e+02	1.500000e+00	1.500000e+00	1.483000e+00	1.990537e-02	1.981811e-02
+1.125000e+02	1.500000e+00	1.500000e+00	1.488000e+00	2.027985e-02	1.969946e-02
+1.155000e+02	1.500000e+00	1.500000e+00	1.526000e+00	2.062499e-02	2.080900e-02
+1.185000e+02	1.500000e+00	1.500000e+00	1.574000e+00	2.060750e-02	2.104169e-02
+1.215000e+02	1.500000e+00	1.500000e+00	1.602000e+00	2.112796e-02	2.133804e-02
+1.245000e+02	1.500000e+00	1.500000e+00	1.649000e+00	2.107798e-02	2.181186e-02
+1.275000e+02	1.500000e+00	1.500000e+00	1.695000e+00	2.241221e-02	2.263931e-02
+1.305000e+02	1.500000e+00	1.500000e+00	1.750000e+00	2.260932e-02	2.359995e-02
+1.335000e+02	1.500000e+00	1.500000e+00	1.802000e+00	2.374942e-02	2.309869e-02
+1.365000e+02	1.500000e+00	1.500000e+00	1.854000e+00	2.437736e-02	2.459911e-02
+1.395000e+02	1.500000e+00	1.500000e+00	1.919000e+00	2.567652e-02	2.506734e-02
+1.425000e+02	1.500000e+00	1.500000e+00	1.998000e+00	2.501082e-02	2.622253e-02
+1.455000e+02	1.500000e+00	1.500000e+00	2.065000e+00	2.741946e-02	2.733634e-02
+1.485000e+02	1.500000e+00	1.500000e+00	2.172000e+00	2.789847e-02	2.872189e-02
+1.515000e+02	1.500000e+00	1.500000e+00	2.272000e+00	2.971479e-02	2.958913e-02
+1.545000e+02	1.500000e+00	1.500000e+00	2.382000e+00	3.051274e-02	3.053709e-02
+1.575000e+02	1.500000e+00	1.500000e+00	2.475000e+00	3.264605e-02	3.157530e-02
+1.605000e+02	1.500000e+00	1.500000e+00	2.626000e+00	3.414012e-02	3.352264e-02
+1.635000e+02	1.500000e+00	1.500000e+00	2.753000e+00	3.549137e-02	3.452288e-02
+1.665000e+02	1.500000e+00	1.500000e+00	2.871000e+00	3.748001e-02	3.548179e-02
+1.695000e+02	1.500000e+00	1.500000e+00	3.016000e+00	3.837417e-02	3.930683e-02
+1.725000e+02	1.500000e+00	1.500000e+00	3.140000e+00	4.075917e-02	4.040022e-02
+1.755000e+02	1.500000e+00	1.500000e+00	3.259000e+00	4.167071e-02	4.084764e-02
+1.785000e+02	1.500000e+00	1.500000e+00	3.303000e+00	4.456582e-02	4.473170e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d08-x01-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d08-x01-y01
+Title=doi:10.17182/hepdata.76730.v1/t1
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+00	2.500000e-01	2.500000e-01	5.779000e-01	6.047522e-03	5.975835e-03
+1.750000e+00	2.500000e-01	2.500000e-01	4.463000e-01	4.505629e-03	4.494407e-03
+2.250000e+00	2.500000e-01	2.500000e-01	3.302000e-01	3.306186e-03	3.306089e-03
+2.750000e+00	2.500000e-01	2.500000e-01	2.247000e-01	2.271699e-03	2.279504e-03
+3.250000e+00	2.500000e-01	2.500000e-01	1.436000e-01	1.477115e-03	1.490860e-03
+3.750000e+00	2.500000e-01	2.500000e-01	8.951000e-02	9.376591e-04	9.517573e-04
+4.250000e+00	2.500000e-01	2.500000e-01	5.550000e-02	5.912589e-04	6.015528e-04
+4.750000e+00	2.500000e-01	2.500000e-01	3.502000e-02	3.787949e-04	3.846299e-04
+5.250000e+00	2.500000e-01	2.500000e-01	2.268000e-02	2.488967e-04	2.516390e-04
+5.750000e+00	2.500000e-01	2.500000e-01	1.508000e-02	1.677271e-04	1.686220e-04
+6.250000e+00	2.500000e-01	2.500000e-01	1.026000e-02	1.146651e-04	1.154968e-04
+6.750000e+00	2.500000e-01	2.500000e-01	7.180000e-03	8.121731e-05	8.163008e-05
+7.250000e+00	2.500000e-01	2.500000e-01	5.103000e-03	5.795352e-05	5.861093e-05
+7.750000e+00	2.500000e-01	2.500000e-01	3.709000e-03	4.292273e-05	4.267670e-05
+8.500000e+00	5.000000e-01	5.000000e-01	2.429000e-03	2.739429e-05	2.778725e-05
+9.500000e+00	5.000000e-01	5.000000e-01	1.423000e-03	1.636332e-05	1.681622e-05
+1.050000e+01	5.000000e-01	5.000000e-01	8.636000e-04	1.051887e-05	1.069980e-05
+1.150000e+01	5.000000e-01	5.000000e-01	5.610000e-04	7.165826e-06	7.310568e-06
+1.250000e+01	5.000000e-01	5.000000e-01	3.731000e-04	5.080240e-06	5.466067e-06
+1.350000e+01	5.000000e-01	5.000000e-01	2.617000e-04	3.967795e-06	4.118494e-06
+1.500000e+01	1.000000e+00	1.000000e+00	1.611000e-04	2.343599e-06	2.507699e-06
+1.700000e+01	1.000000e+00	1.000000e+00	8.490000e-05	1.433060e-06	1.474847e-06
+1.900000e+01	1.000000e+00	1.000000e+00	5.085000e-05	2.260958e-06	2.281776e-06
+2.250000e+01	2.500000e+00	2.500000e+00	2.305000e-05	1.023920e-06	1.028387e-06
+2.750000e+01	2.500000e+00	2.500000e+00	8.432000e-06	4.724832e-07	4.882333e-07
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1509919/d08-x02-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1509919/d08-x02-y01
+Title=doi:10.17182/hepdata.76730.v1/t14
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.250000e+00	2.500000e-01	2.500000e-01	5.802000e-01	5.866570e-03	5.868389e-03
+5.750000e+00	2.500000e-01	2.500000e-01	3.857000e-01	3.926902e-03	3.924880e-03
+6.250000e+00	2.500000e-01	2.500000e-01	2.625000e-01	2.696427e-03	2.695356e-03
+6.750000e+00	2.500000e-01	2.500000e-01	1.837000e-01	1.909777e-03	1.901752e-03
+7.250000e+00	2.500000e-01	2.500000e-01	1.306000e-01	1.371304e-03	1.381001e-03
+7.750000e+00	2.500000e-01	2.500000e-01	9.490000e-02	1.012779e-03	1.007108e-03
+8.500000e+00	5.000000e-01	5.000000e-01	6.215000e-02	6.559513e-04	6.561415e-04
+9.500000e+00	5.000000e-01	5.000000e-01	3.641000e-02	4.006781e-04	3.934212e-04
+1.050000e+01	5.000000e-01	5.000000e-01	2.209000e-02	2.543220e-04	2.472197e-04
+1.150000e+01	5.000000e-01	5.000000e-01	1.435000e-02	1.773722e-04	1.732668e-04
+1.250000e+01	5.000000e-01	5.000000e-01	9.544000e-03	1.275356e-04	1.269330e-04
+1.350000e+01	5.000000e-01	5.000000e-01	6.694000e-03	9.253663e-05	1.011545e-04
+1.500000e+01	1.000000e+00	1.000000e+00	4.121000e-03	5.691186e-05	5.659139e-05
+1.700000e+01	1.000000e+00	1.000000e+00	2.172000e-03	3.539323e-05	3.349075e-05
+1.900000e+01	1.000000e+00	1.000000e+00	1.301000e-03	5.815387e-05	5.788134e-05
+2.250000e+01	2.500000e+00	2.500000e+00	5.897000e-04	2.564260e-05	2.632237e-05
+2.750000e+01	2.500000e+00	2.500000e+00	2.157000e-04	1.232487e-05	1.239694e-05
+# END YODA_SCATTER2D
+
+
+
+
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1514251.cc b/analyses/pluginATLAS/ATLAS_2017_I1514251.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1514251.cc
@@ -0,0 +1,201 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/ZFinder.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Projections/VetoedFinalState.hh"
+
+namespace Rivet {
+  
+  /// Z + jets in pp at 13 TeV 
+  /// @note This base class contains a "mode" variable for combined, e, and mu channel derived classes
+  class ATLAS_2017_I1514251 : public Analysis {
+  public:
+    
+    /// Constructor
+    ATLAS_2017_I1514251(string name="ATLAS_2017_I1514251")
+      : Analysis(name)  {
+      // This class uses the combined e+mu mode
+      _mode = 0;
+    }
+    
+    /// Book histograms and initialise projections before the run
+    void init() {
+      const FinalState fs;
+      
+      Cut cuts = (Cuts::pT > 25*GeV) && (Cuts::abseta < 2.5);
+      
+      ZFinder zeefinder(fs, cuts, PID::ELECTRON, 71*GeV, 111*GeV);
+      ZFinder zmumufinder(fs, cuts, PID::MUON, 71*GeV, 111*GeV);
+      declare(zeefinder, "zeefinder");
+      declare(zmumufinder, "zmumufinder");
+      
+      // Define veto FS in order to prevent Z-decay products entering the jet algorithm
+      VetoedFinalState had_fs;
+      had_fs.addVetoOnThisFinalState(zeefinder);
+      had_fs.addVetoOnThisFinalState(zmumufinder);
+      FastJets jets(had_fs, FastJets::ANTIKT, 0.4);
+      jets.useInvisibles(true);
+      declare(jets, "jets");
+      
+      // individual channels
+      _h_Njets       = bookHisto1D(1, 1, _mode + 1);
+      _h_Njets_Ratio = bookScatter2D(1, 2, _mode + 1, true);
+      _h_Njets_excl  = bookHisto1D(1, 3, _mode + 1);
+
+      _h_HT                    = bookHisto1D(1, 4, _mode + 1);
+      _h_leading_jet_rap       = bookHisto1D(1, 5, _mode + 1);
+      _h_leading_jet_pT_eq1jet = bookHisto1D(1, 6, _mode + 1);
+      _h_leading_jet_pT        = bookHisto1D(1, 7, _mode + 1);
+      _h_leading_jet_pT_2jet   = bookHisto1D(1, 8, _mode + 1);
+      _h_leading_jet_pT_3jet   = bookHisto1D(1, 9, _mode + 1);
+      _h_leading_jet_pT_4jet   = bookHisto1D(1, 10, _mode + 1);
+      _h_jet_dphi              = bookHisto1D(1, 11, _mode + 1);
+      _h_jet_mass              = bookHisto1D(1, 12, _mode + 1);
+
+    }
+    
+    
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+      
+      const double weight = event.weight();
+      
+      const ZFinder& zeefinder = apply<ZFinder>(event, "zeefinder");
+      const ZFinder& zmumufinder = apply<ZFinder>(event, "zmumufinder");
+      
+      const Particles& zees = zeefinder.bosons();
+      const Particles& zmumus = zmumufinder.bosons();
+
+      //Veto Z->mumu in electron mode, and vice versa:      
+      if (_mode==1 && (zees.size()!=1 || zmumus.size() ) )  vetoEvent;
+      else if (_mode==2 && (zees.size() || zmumus.size()!=1 ) )  vetoEvent;
+      else if (zees.size() + zmumus.size() != 1) {
+        // Running in combined mode, we did not find exactly one Z. Not good.
+        MSG_DEBUG("Did not find exactly one good Z candidate");
+        vetoEvent;
+      }
+
+      // Find the (dressed!) leptons
+      const Particles& leptons = zees.size() ? zeefinder.constituents() : zmumufinder.constituents();
+      if (leptons.size() != 2) vetoEvent;
+
+      Jets jets =  apply<JetAlg>(event, "jets").jetsByPt(Cuts::pT > 30*GeV && Cuts::absrap < 2.5);
+      
+      bool veto = false;
+      foreach(const Jet& j, jets)  {
+        foreach(const Particle& l, leptons) { veto |= deltaR(j, l) < 0.4; }
+      }
+      if (veto) vetoEvent;
+      
+      double HT=0;
+      foreach(const Particle& l, leptons) { HT += l.pT(); }
+
+      const size_t Njets = jets.size();
+      _h_Njets_excl->fill(Njets, weight);	
+      for(size_t i = 0; i <= Njets; ++i) { _h_Njets->fill(i, weight);	}
+
+      if (Njets < 1)  vetoEvent;
+
+      
+      for(size_t i = 0; i < Njets; ++i) { HT += jets[i].pT(); }
+      const double pT = jets[0].pT();
+      const double rap = jets[0].rapidity();
+      
+      _h_HT->fill(HT, weight);      
+      _h_leading_jet_rap->fill(fabs(rap), weight);
+      _h_leading_jet_pT->fill(pT, weight);
+      if (Njets == 1)  _h_leading_jet_pT_eq1jet->fill(pT, weight);
+      if (Njets > 1) {
+        _h_leading_jet_pT_2jet->fill(pT, weight);
+        _h_jet_dphi->fill( deltaPhi(jets[0], jets[1]), weight );
+        _h_jet_mass->fill( (jets[0].momentum()+jets[1].momentum()).mass() , weight );
+      }
+      
+      if (Njets > 2)  _h_leading_jet_pT_3jet->fill(pT, weight);
+      if (Njets > 3)  _h_leading_jet_pT_4jet->fill(pT, weight);
+
+    }
+
+    void finalize() {
+      for (size_t i = 0; i < _h_Njets->numBins()-2; ++i) {
+        double  n = _h_Njets->bin(i + 1).sumW();
+        double dN = _h_Njets->bin(i + 1).sumW2();
+        double  d = _h_Njets->bin(i).sumW();
+        double dD = _h_Njets->bin(i).sumW2();
+        double r = safediv(n, d);
+        double e = sqrt( safediv(r * (1 - r), d) );
+        if ( _h_Njets->effNumEntries() != _h_Njets->numEntries() ) {
+          // use F. James's approximation for weighted events:
+          e = sqrt( safediv((1 - 2 * r) * dN + r * r * dD, d * d) );
+        }
+        _h_Njets_Ratio->point(i).setY(r, e);
+      }
+
+      scale(_h_Njets,                  crossSectionPerEvent() );
+      scale(_h_Njets_excl,             crossSectionPerEvent() );
+      scale(_h_HT,                     crossSectionPerEvent() );
+      scale(_h_leading_jet_rap,        crossSectionPerEvent() );
+      scale(_h_leading_jet_pT,         crossSectionPerEvent() );
+      scale(_h_leading_jet_pT_eq1jet,  crossSectionPerEvent() );
+      scale(_h_leading_jet_pT_2jet,    crossSectionPerEvent() );
+      scale(_h_leading_jet_pT_3jet,    crossSectionPerEvent() );
+      scale(_h_leading_jet_pT_4jet,    crossSectionPerEvent() );
+      scale(_h_jet_dphi,               crossSectionPerEvent() );
+      scale(_h_jet_mass,               crossSectionPerEvent() );
+
+    }
+
+    //@}
+
+
+  protected:
+
+    size_t _mode;
+
+
+  private:
+
+    Scatter2DPtr _h_Njets_Ratio;
+    Histo1DPtr   _h_Njets;
+    Scatter2DPtr _h_Njets_excl_Ratio;
+    Histo1DPtr   _h_Njets_excl;
+    Histo1DPtr   _h_HT;
+    Histo1DPtr   _h_leading_jet_rap;
+    Histo1DPtr   _h_leading_jet_pT;
+    Histo1DPtr   _h_leading_jet_pT_eq1jet;
+    Histo1DPtr   _h_leading_jet_pT_2jet;
+    Histo1DPtr   _h_leading_jet_pT_3jet;
+    Histo1DPtr   _h_leading_jet_pT_4jet;
+    Histo1DPtr   _h_jet_dphi;
+    Histo1DPtr   _h_jet_mass;
+  
+  };
+
+
+
+  class ATLAS_2017_I1514251_EL : public ATLAS_2017_I1514251 {
+  public:
+    ATLAS_2017_I1514251_EL()
+      : ATLAS_2017_I1514251("ATLAS_2017_I1514251_EL")
+    {
+      _mode = 1;
+    }
+  };
+
+
+
+  class ATLAS_2017_I1514251_MU : public ATLAS_2017_I1514251 {
+  public:
+    ATLAS_2017_I1514251_MU()
+      : ATLAS_2017_I1514251("ATLAS_2017_I1514251_MU")
+    {
+      _mode = 2;
+    }
+  };
+
+
+
+  DECLARE_RIVET_PLUGIN(ATLAS_2017_I1514251);
+  DECLARE_RIVET_PLUGIN(ATLAS_2017_I1514251_EL);
+  DECLARE_RIVET_PLUGIN(ATLAS_2017_I1514251_MU);
+}
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1514251.info b/analyses/pluginATLAS/ATLAS_2017_I1514251.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1514251.info
@@ -0,0 +1,45 @@
+Name: ATLAS_2017_I1514251
+Year: 2017
+Summary: Z plus jets at 13 TeV
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1514251 
+Status: VALIDATED
+Authors:
+ - Gavin Hesketh <gavin.hesketh@cern.ch>
+References:
+ - arXiv:1702.05725 [hep-ex]
+ - submitted to EPJC
+Keywords:
+ - Z
+ - JETS
+RunInfo:
+  pp -> Z(->ll) + jets at 13 TeV
+Luminosity_fb: 3.16
+Beams: [p+, p+]
+Energies: [13000]
+PtCuts: [25, 25] 
+Description:
+  'Measurements of the production cross section of a $Z$ boson in association with jets in proton-proton collisions at i
+  $\sqrt{s}=13$ TeV are presented, using data corresponding to an integrated luminosity of 3.16 fb${}^{-1}$ collected by 
+  the ATLAS experiment at the CERN Large Hadron Collider in 2015. Inclusive and differential cross sections are measured 
+  for events containing a $Z$ boson decaying to electrons or muons and produced in association with up to seven jets with 
+  $p_\text{T}>30$ GeV and $|y|<2.5$. Predictions from different Monte Carlo generators based on leading-order and 
+  next-to-leading-order matrix elements for up to two additional partons interfaced with parton shower and fixed-order 
+  predictions at next-to-leading order and next-to-next-to-leading order are compared with the measured cross sections. 
+  Good agreement within the uncertainties is observed for most of the modelled quantities, in particular with the generators 
+  which use next-to-leading-order matrix elements and the more recent next-to-next-to-leading-order fixed-order predictions.'
+BibKey: Aaboud:2017hbk
+BibTeX: '@article{Aaboud:2017hbk,
+      author         = "Aaboud, Morad and others",
+      title          = "{Measurements of the production cross section of a $Z$
+                        boson in association with jets in pp collisions at
+                        $\sqrt{s} = 13$ TeV with the ATLAS detector}",
+      collaboration  = "ATLAS",
+      year           = "2017",
+      eprint         = "1702.05725",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2016-297",
+      SLACcitation   = "%%CITATION = ARXIV:1702.05725;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1514251.plot b/analyses/pluginATLAS/ATLAS_2017_I1514251.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1514251.plot
@@ -0,0 +1,83 @@
+# BEGIN PLOT /ATLAS_2017_I1514251/d..
+XTwosidedTicks=1
+YTwosidedTicks=1
+LeftMargin=1.5
+XMinorTickMarks=0
+LogY=1
+LegendAlign=r
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251/d..-x..-y01
+Title=$Z \rightarrow \ell^+ \ell^-$, dressed level
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251/d01-x01
+LogY=1
+XLabel=$N_\text{jets}$
+XCustomMajorTicks=0	$\ge0$	1	$\ge1$	2	$\ge2$	3	$\ge3$	4	$\ge4$	5	$\ge5$	6	$\ge6$	7	$\ge7$
+YLabel=$\sigma(Z + \geq N_\text{jets})$ [pb]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251/d01-x02
+LogY=0
+XLabel=$N_\text{jets}$
+XCustomMajorTicks=0	$\ge$1/$\ge$0	1	$\ge$2/$\ge$1	2	$\ge$3/$\ge$2	3	$\ge$4/$\ge$3	4	$\ge$5/$\ge$4	5	$\ge$6/$\ge$5	6	$\ge$7/$\ge$6
+LegendYPos=0.3
+YLabel=$\sigma(Z + \geq N_\text{jets}+1) / \sigma(Z + \geq N_\text{jets})$
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251/d01-x03
+LogY=1
+XLabel=$N_\text{jets}$
+YLabel=$\sigma(Z + N_\text{jets})$ [pb]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251/d01-x04
+YLabel=d$\sigma/$d$H_\text{T}$ [pb/GeV]
+XLabel=$H_\text{T}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251/d01-x05
+YLabel=d$\sigma/$d$y^\text{jet}$ [pb]
+XLabel=$y^\text{jet}$ (leading jet)
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251/d01-x06
+YLabel=d$\sigma/$d$p_\text{T}^\text{jet}$ [pb/GeV]
+XLabel=$p_\text{T}^\text{jet}$ (== 1 jet) [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251/d01-x07
+YLabel=d$\sigma/$d$p_\text{T}^\text{jet}$ [pb/GeV]
+XLabel=$p_\text{T}^\text{jet}$ (leading jet, $\ge$ 1 jet) [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251/d01-x08
+YLabel=d$\sigma/$d$p_\text{T}^\text{jet}$ [pb/GeV]
+XLabel=$p_\text{T}^\text{jet}$ (leading jet, $\ge$ 2 jet) [GeV]
+# END PLOT
+
+
+# BEGIN PLOT /ATLAS_2017_I1514251/d01-x09
+YLabel=d$\sigma/$d$p_\text{T}^\text{jet}$ [pb/GeV]
+XLabel=$p_\text{T}^\text{jet}$ (leading jet, $\ge$ 3 jet) [GeV]
+# END PLOT
+
+
+# BEGIN PLOT /ATLAS_2017_I1514251/d01-x10
+YLabel=d$\sigma/$d$p_\text{T}^\text{jet}$ [pb/GeV]
+XLabel=$p_\text{T}^\text{jet}$ (leading jet, $\ge$ 4 jet) [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251/d01-x11
+YLabel=d$\sigma/$d$\Delta\phi$ [pb]
+XLabel=$\Delta\phi$(leading, second jet)
+LegendAlign=l
+LegendXPos=0.05
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251/d01-x12
+YLabel=d$\sigma/$d$M$ [pb/GeV]
+XLabel=$M$(leading, second jet) [GeV]
+# END PLOT
+
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1514251.yoda b/analyses/pluginATLAS/ATLAS_2017_I1514251.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1514251.yoda
@@ -0,0 +1,238 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251/d01-x11-y01
+Path=/REF/ATLAS_2017_I1514251/d01-x11-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.047198e-01	1.047198e-01	1.047198e-01	4.030800e+00	5.345178e-01	5.345178e-01
+3.141593e-01	1.047198e-01	1.047198e-01	4.618000e+00	6.099260e-01	6.099260e-01
+5.235988e-01	1.047198e-01	1.047198e-01	5.615800e+00	6.883346e-01	6.883346e-01
+7.330383e-01	1.047198e-01	1.047198e-01	4.828700e+00	6.168659e-01	6.168659e-01
+9.424778e-01	1.047198e-01	1.047198e-01	4.602300e+00	6.259016e-01	6.259016e-01
+1.151917e+00	1.047198e-01	1.047198e-01	4.518800e+00	5.680532e-01	5.680532e-01
+1.361357e+00	1.047198e-01	1.047198e-01	4.954900e+00	6.108040e-01	6.108040e-01
+1.570796e+00	1.047198e-01	1.047198e-01	5.381800e+00	6.144543e-01	6.144543e-01
+1.780236e+00	1.047198e-01	1.047198e-01	6.525700e+00	7.369293e-01	7.369293e-01
+1.989675e+00	1.047198e-01	1.047198e-01	7.665000e+00	7.947360e-01	7.947360e-01
+2.199115e+00	1.047198e-01	1.047198e-01	9.287400e+00	9.260299e-01	9.260299e-01
+2.408554e+00	1.047198e-01	1.047198e-01	1.190900e+01	1.065972e+00	1.065972e+00
+2.617994e+00	1.047198e-01	1.047198e-01	1.463800e+01	1.241741e+00	1.241741e+00
+2.827433e+00	1.047198e-01	1.047198e-01	1.843600e+01	1.476389e+00	1.476389e+00
+3.036873e+00	1.047198e-01	1.047198e-01	2.132100e+01	1.590688e+00	1.590688e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251/d01-x04-y01
+Path=/REF/ATLAS_2017_I1514251/d01-x04-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+02	2.000000e+01	2.000000e+01	3.456000e-01	4.924729e-02	4.924729e-02
+1.400000e+02	2.000000e+01	2.000000e+01	1.315900e+00	9.903606e-02	9.903606e-02
+1.800000e+02	2.000000e+01	2.000000e+01	5.293900e-01	3.129747e-02	3.129747e-02
+2.200000e+02	2.000000e+01	2.000000e+01	2.641500e-01	1.462663e-02	1.462663e-02
+2.600000e+02	2.000000e+01	2.000000e+01	1.474800e-01	7.940013e-03	7.940013e-03
+3.000000e+02	2.000000e+01	2.000000e+01	9.035200e-02	4.840316e-03	4.840316e-03
+3.400000e+02	2.000000e+01	2.000000e+01	5.809400e-02	3.145613e-03	3.145613e-03
+3.800000e+02	2.000000e+01	2.000000e+01	3.912800e-02	2.201638e-03	2.201638e-03
+4.400000e+02	4.000000e+01	4.000000e+01	2.291900e-02	1.261677e-03	1.261677e-03
+5.200000e+02	4.000000e+01	4.000000e+01	1.212600e-02	6.945190e-04	6.945190e-04
+6.000000e+02	4.000000e+01	4.000000e+01	6.645200e-03	4.255398e-04	4.255398e-04
+6.800000e+02	4.000000e+01	4.000000e+01	3.837700e-03	2.616215e-04	2.616215e-04
+7.600000e+02	4.000000e+01	4.000000e+01	2.596700e-03	1.972273e-04	1.972273e-04
+9.000000e+02	1.000000e+02	1.000000e+02	1.213200e-03	9.266040e-05	9.266040e-05
+1.100000e+03	1.000000e+02	1.000000e+02	4.465700e-04	4.765590e-05	4.765590e-05
+1.300000e+03	1.000000e+02	1.000000e+02	1.753900e-04	2.652306e-05	2.652306e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251/d01-x03-y01
+Path=/REF/ATLAS_2017_I1514251/d01-x03-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+0.000000e+00	5.000000e-01	5.000000e-01	6.239200e+02	2.529460e+01	2.529460e+01
+1.000000e+00	5.000000e-01	5.000000e-01	8.899800e+01	7.133804e+00	7.133804e+00
+2.000000e+00	5.000000e-01	5.000000e-01	2.077400e+01	2.087926e+00	2.087926e+00
+3.000000e+00	5.000000e-01	5.000000e-01	4.721400e+00	5.982262e-01	5.982262e-01
+4.000000e+00	5.000000e-01	5.000000e-01	1.126500e+00	1.673875e-01	1.673875e-01
+5.000000e+00	5.000000e-01	5.000000e-01	2.765100e-01	5.027574e-02	5.027574e-02
+6.000000e+00	5.000000e-01	5.000000e-01	6.093900e-02	1.377480e-02	1.377480e-02
+7.000000e+00	5.000000e-01	5.000000e-01	1.295000e-02	3.623567e-03	3.623567e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251/d01-x12-y01
+Path=/REF/ATLAS_2017_I1514251/d01-x12-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+3.750000e+01	1.250000e+01	1.250000e+01	6.196700e-02	9.136514e-03	9.136514e-03
+6.250000e+01	1.250000e+01	1.250000e+01	9.710300e-02	1.390536e-02	1.390536e-02
+8.750000e+01	1.250000e+01	1.250000e+01	1.556900e-01	1.891757e-02	1.891757e-02
+1.125000e+02	1.250000e+01	1.250000e+01	1.452700e-01	1.483584e-02	1.483584e-02
+1.375000e+02	1.250000e+01	1.250000e+01	1.184000e-01	1.104741e-02	1.104741e-02
+1.625000e+02	1.250000e+01	1.250000e+01	9.018000e-02	7.700222e-03	7.700222e-03
+1.875000e+02	1.250000e+01	1.250000e+01	7.106800e-02	5.769762e-03	5.769762e-03
+2.125000e+02	1.250000e+01	1.250000e+01	5.434600e-02	4.602760e-03	4.602760e-03
+2.375000e+02	1.250000e+01	1.250000e+01	4.310100e-02	3.529962e-03	3.529962e-03
+2.625000e+02	1.250000e+01	1.250000e+01	3.318400e-02	2.580565e-03	2.580565e-03
+2.875000e+02	1.250000e+01	1.250000e+01	2.742600e-02	2.113215e-03	2.113215e-03
+3.125000e+02	1.250000e+01	1.250000e+01	2.196100e-02	1.739501e-03	1.739501e-03
+3.375000e+02	1.250000e+01	1.250000e+01	1.804200e-02	1.465208e-03	1.465208e-03
+3.625000e+02	1.250000e+01	1.250000e+01	1.457900e-02	1.156532e-03	1.156532e-03
+3.875000e+02	1.250000e+01	1.250000e+01	1.185700e-02	8.959690e-04	8.959690e-04
+4.250000e+02	2.500000e+01	2.500000e+01	9.067800e-03	6.003227e-04	6.003227e-04
+4.750000e+02	2.500000e+01	2.500000e+01	6.856700e-03	4.833956e-04	4.833956e-04
+5.375000e+02	3.750000e+01	3.750000e+01	4.487000e-03	3.203624e-04	3.203624e-04
+6.250000e+02	5.000000e+01	5.000000e+01	2.530600e-03	2.036954e-04	2.036954e-04
+7.375000e+02	6.250000e+01	6.250000e+01	1.406700e-03	1.180507e-04	1.180507e-04
+9.000000e+02	1.000000e+02	1.000000e+02	6.471100e-04	5.833758e-05	5.833758e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251/d01-x08-y01
+Path=/REF/ATLAS_2017_I1514251/d01-x08-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+4.000000e+01	1.000000e+01	1.000000e+01	3.104100e-01	5.143933e-02	5.143933e-02
+6.000000e+01	1.000000e+01	1.000000e+01	3.351400e-01	3.614511e-02	3.614511e-02
+8.000000e+01	1.000000e+01	1.000000e+01	2.235700e-01	1.775375e-02	1.775375e-02
+1.000000e+02	1.000000e+01	1.000000e+01	1.472500e-01	1.068505e-02	1.068505e-02
+1.200000e+02	1.000000e+01	1.000000e+01	9.653800e-02	6.468481e-03	6.468481e-03
+1.400000e+02	1.000000e+01	1.000000e+01	6.392100e-02	4.034995e-03	4.034995e-03
+1.600000e+02	1.000000e+01	1.000000e+01	4.441200e-02	2.743962e-03	2.743962e-03
+1.850000e+02	1.500000e+01	1.500000e+01	2.963200e-02	1.904277e-03	1.904277e-03
+2.250000e+02	2.500000e+01	2.500000e+01	1.552500e-02	9.657805e-04	9.657805e-04
+2.750000e+02	2.500000e+01	2.500000e+01	7.350500e-03	5.099942e-04	5.099942e-04
+3.250000e+02	2.500000e+01	2.500000e+01	3.695700e-03	2.979070e-04	2.979070e-04
+3.750000e+02	2.500000e+01	2.500000e+01	2.173400e-03	2.066030e-04	2.066030e-04
+4.500000e+02	5.000000e+01	5.000000e+01	9.380700e-04	9.743583e-05	9.743583e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251/d01-x01-y01
+Path=/REF/ATLAS_2017_I1514251/d01-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+0.000000e+00	5.000000e-01	5.000000e-01	7.398600e+02	2.779764e+01	2.779764e+01
+1.000000e+00	5.000000e-01	5.000000e-01	1.160000e+02	9.993344e+00	9.993344e+00
+2.000000e+00	5.000000e-01	5.000000e-01	2.698500e+01	2.912963e+00	2.912963e+00
+3.000000e+00	5.000000e-01	5.000000e-01	6.203700e+00	8.311129e-01	8.311129e-01
+4.000000e+00	5.000000e-01	5.000000e-01	1.482300e+00	2.344978e-01	2.344978e-01
+5.000000e+00	5.000000e-01	5.000000e-01	3.554200e-01	6.808409e-02	6.808409e-02
+6.000000e+00	5.000000e-01	5.000000e-01	7.876900e-02	1.843561e-02	1.843561e-02
+7.000000e+00	5.000000e-01	5.000000e-01	1.777400e-02	5.272302e-03	5.272302e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251/d01-x09-y01
+Path=/REF/ATLAS_2017_I1514251/d01-x09-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+4.000000e+01	1.000000e+01	1.000000e+01	2.811100e-02	7.087759e-03	7.087759e-03
+6.000000e+01	1.000000e+01	1.000000e+01	5.574000e-02	1.009314e-02	1.009314e-02
+8.000000e+01	1.000000e+01	1.000000e+01	5.235100e-02	6.957580e-03	6.957580e-03
+1.000000e+02	1.000000e+01	1.000000e+01	4.302000e-02	4.936301e-03	4.936301e-03
+1.200000e+02	1.000000e+01	1.000000e+01	3.149000e-02	3.309596e-03	3.309596e-03
+1.400000e+02	1.000000e+01	1.000000e+01	2.313400e-02	2.187037e-03	2.187037e-03
+1.600000e+02	1.000000e+01	1.000000e+01	1.721200e-02	1.514998e-03	1.514998e-03
+1.850000e+02	1.500000e+01	1.500000e+01	1.272800e-02	1.117466e-03	1.117466e-03
+2.250000e+02	2.500000e+01	2.500000e+01	7.487700e-03	6.315760e-04	6.315760e-04
+2.750000e+02	2.500000e+01	2.500000e+01	4.066200e-03	3.598574e-04	3.598574e-04
+3.250000e+02	2.500000e+01	2.500000e+01	2.036400e-03	2.151489e-04	2.151489e-04
+3.750000e+02	2.500000e+01	2.500000e+01	1.219800e-03	1.466148e-04	1.466148e-04
+4.500000e+02	5.000000e+01	5.000000e+01	5.613900e-04	7.182772e-05	7.182772e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251/d01-x02-y01
+Path=/REF/ATLAS_2017_I1514251/d01-x02-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+0.000000e+00	5.000000e-01	5.000000e-01	1.567600e-01	1.310558e-02	1.310558e-02
+1.000000e+00	5.000000e-01	5.000000e-01	2.326700e-01	9.342718e-03	9.342718e-03
+2.000000e+00	5.000000e-01	5.000000e-01	2.299200e-01	9.643739e-03	9.643739e-03
+3.000000e+00	5.000000e-01	5.000000e-01	2.389500e-01	1.004928e-02	1.004928e-02
+4.000000e+00	5.000000e-01	5.000000e-01	2.396800e-01	1.300900e-02	1.300900e-02
+5.000000e+00	5.000000e-01	5.000000e-01	2.213400e-01	1.763451e-02	1.763451e-02
+6.000000e+00	5.000000e-01	5.000000e-01	2.240300e-01	3.453777e-02	3.453777e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251/d01-x10-y01
+Path=/REF/ATLAS_2017_I1514251/d01-x10-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+4.000000e+01	1.000000e+01	1.000000e+01	2.937800e-03	1.209037e-03	1.209037e-03
+6.000000e+01	1.000000e+01	1.000000e+01	8.361900e-03	2.193385e-03	2.193385e-03
+8.000000e+01	1.000000e+01	1.000000e+01	1.012800e-02	1.895078e-03	1.895078e-03
+1.000000e+02	1.000000e+01	1.000000e+01	1.021900e-02	1.696012e-03	1.696012e-03
+1.200000e+02	1.000000e+01	1.000000e+01	8.313900e-03	1.268775e-03	1.268775e-03
+1.400000e+02	1.000000e+01	1.000000e+01	6.603800e-03	9.111117e-04	9.111117e-04
+1.600000e+02	1.000000e+01	1.000000e+01	5.466000e-03	7.466036e-04	7.466036e-04
+1.850000e+02	1.500000e+01	1.500000e+01	4.119000e-03	5.401174e-04	5.401174e-04
+2.250000e+02	2.500000e+01	2.500000e+01	2.740000e-03	3.361440e-04	3.361440e-04
+2.750000e+02	2.500000e+01	2.500000e+01	1.646400e-03	2.126714e-04	2.126714e-04
+3.500000e+02	5.000000e+01	5.000000e+01	7.241000e-04	9.424856e-05	9.424856e-05
+4.500000e+02	5.000000e+01	5.000000e+01	2.671900e-04	4.827164e-05	4.827164e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251/d01-x05-y01
+Path=/REF/ATLAS_2017_I1514251/d01-x05-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e-01	1.250000e-01	1.250000e-01	6.319600e+01	3.953434e+00	3.953434e+00
+3.750000e-01	1.250000e-01	1.250000e-01	5.983600e+01	3.758238e+00	3.758238e+00
+6.250000e-01	1.250000e-01	1.250000e-01	5.774000e+01	3.959449e+00	3.959449e+00
+8.750000e-01	1.250000e-01	1.250000e-01	5.414900e+01	4.429114e+00	4.429114e+00
+1.125000e+00	1.250000e-01	1.250000e-01	4.878400e+01	4.498735e+00	4.498735e+00
+1.375000e+00	1.250000e-01	1.250000e-01	4.614500e+01	4.459845e+00	4.459845e+00
+1.625000e+00	1.250000e-01	1.250000e-01	4.021500e+01	3.707886e+00	3.707886e+00
+1.875000e+00	1.250000e-01	1.250000e-01	3.593800e+01	2.891373e+00	2.891373e+00
+2.125000e+00	1.250000e-01	1.250000e-01	3.090300e+01	2.573678e+00	2.573678e+00
+2.375000e+00	1.250000e-01	1.250000e-01	2.526600e+01	2.850394e+00	2.850394e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251/d01-x06-y01
+Path=/REF/ATLAS_2017_I1514251/d01-x06-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+3.500000e+01	5.000000e+00	5.000000e+00	3.595900e+00	3.635789e-01	3.635789e-01
+4.500000e+01	5.000000e+00	5.000000e+00	1.936800e+00	1.240513e-01	1.240513e-01
+5.500000e+01	5.000000e+00	5.000000e+00	1.112800e+00	5.376393e-02	5.376393e-02
+7.000000e+01	1.000000e+01	1.000000e+01	5.551200e-01	2.528962e-02	2.528962e-02
+9.000000e+01	1.000000e+01	1.000000e+01	2.538500e-01	1.140341e-02	1.140341e-02
+1.100000e+02	1.000000e+01	1.000000e+01	1.287100e-01	5.985070e-03	5.985070e-03
+1.300000e+02	1.000000e+01	1.000000e+01	7.066700e-02	3.523090e-03	3.523090e-03
+1.500000e+02	1.000000e+01	1.000000e+01	4.128300e-02	2.223135e-03	2.223135e-03
+1.700000e+02	1.000000e+01	1.000000e+01	2.496400e-02	1.442144e-03	1.442144e-03
+1.900000e+02	1.000000e+01	1.000000e+01	1.523700e-02	9.912496e-04	9.912496e-04
+2.250000e+02	2.500000e+01	2.500000e+01	7.282900e-03	4.922869e-04	4.922869e-04
+2.750000e+02	2.500000e+01	2.500000e+01	2.754700e-03	2.504506e-04	2.504506e-04
+3.500000e+02	5.000000e+01	5.000000e+01	7.803800e-04	8.840042e-05	8.840042e-05
+4.500000e+02	5.000000e+01	5.000000e+01	2.083300e-04	4.206397e-05	4.206397e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251/d01-x07-y01
+Path=/REF/ATLAS_2017_I1514251/d01-x07-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+3.500000e+01	5.000000e+00	5.000000e+00	3.831200e+00	3.902006e-01	3.902006e-01
+4.500000e+01	5.000000e+00	5.000000e+00	2.333800e+00	1.768663e-01	1.768663e-01
+5.500000e+01	5.000000e+00	5.000000e+00	1.483700e+00	9.146476e-02	9.146476e-02
+7.000000e+01	1.000000e+01	1.000000e+01	8.312400e-01	4.636537e-02	4.636537e-02
+9.000000e+01	1.000000e+01	1.000000e+01	4.363700e-01	2.252658e-02	2.252658e-02
+1.100000e+02	1.000000e+01	1.000000e+01	2.459100e-01	1.187997e-02	1.187997e-02
+1.300000e+02	1.000000e+01	1.000000e+01	1.495200e-01	7.378757e-03	7.378757e-03
+1.500000e+02	1.000000e+01	1.000000e+01	9.479800e-02	4.675996e-03	4.675996e-03
+1.700000e+02	1.000000e+01	1.000000e+01	6.308100e-02	3.298258e-03	3.298258e-03
+1.900000e+02	1.000000e+01	1.000000e+01	4.178600e-02	2.332021e-03	2.332021e-03
+2.250000e+02	2.500000e+01	2.500000e+01	2.279100e-02	1.230949e-03	1.230949e-03
+2.750000e+02	2.500000e+01	2.500000e+01	1.011700e-02	6.281632e-04	6.281632e-04
+3.250000e+02	2.500000e+01	2.500000e+01	4.730600e-03	3.457864e-04	3.457864e-04
+3.750000e+02	2.500000e+01	2.500000e+01	2.708600e-03	2.380367e-04	2.380367e-04
+4.500000e+02	5.000000e+01	5.000000e+01	1.156500e-03	1.121547e-04	1.121547e-04
+5.500000e+02	5.000000e+01	5.000000e+01	4.083200e-04	5.905935e-05	5.905935e-05
+6.500000e+02	5.000000e+01	5.000000e+01	1.649900e-04	3.435026e-05	3.435026e-05
+END YODA_SCATTER2D
+
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1514251_EL.info b/analyses/pluginATLAS/ATLAS_2017_I1514251_EL.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1514251_EL.info
@@ -0,0 +1,45 @@
+Name: ATLAS_2017_I1514251_EL
+Year: 2017
+Summary: Z plus jets at 13 TeV, electron channel
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1514251
+Status: VALIDATED
+Authors:
+ - Gavin Hesketh <gavin.hesketh@cern.ch>
+References:
+ - arXiv:1702.05725 [hep-ex]
+ - submitted to EPJC
+Keywords:
+ - Z
+ - JETS
+RunInfo:
+  pp -> Z(->ee) + jets at 13 TeV
+Luminosity_fb: 3.16
+Beams: [p+, p+]
+Energies: [13000]
+PtCuts: [25, 25]
+Description:
+  'Measurements of the production cross section of a $Z$ boson in association with jets in proton-proton collisions at i
+  $\sqrt{s}=13$ TeV are presented, using data corresponding to an integrated luminosity of 3.16 fb${}^{-1}$ collected by
+  the ATLAS experiment at the CERN Large Hadron Collider in 2015. Inclusive and differential cross sections are measured
+  for events containing a $Z$ boson decaying to electrons or muons and produced in association with up to seven jets with
+  $p_\text{T}>30$ GeV and $|y|<2.5$. Predictions from different Monte Carlo generators based on leading-order and
+  next-to-leading-order matrix elements for up to two additional partons interfaced with parton shower and fixed-order
+  predictions at next-to-leading order and next-to-next-to-leading order are compared with the measured cross sections.
+  Good agreement within the uncertainties is observed for most of the modelled quantities, in particular with the generators
+  which use next-to-leading-order matrix elements and the more recent next-to-next-to-leading-order fixed-order predictions.'
+BibKey: Aaboud:2017hbk
+BibTeX: '@article{Aaboud:2017hbk,
+      author         = "Aaboud, Morad and others",
+      title          = "{Measurements of the production cross section of a $Z$
+                        boson in association with jets in pp collisions at
+                        $\sqrt{s} = 13$ TeV with the ATLAS detector}",
+      collaboration  = "ATLAS",
+      year           = "2017",
+      eprint         = "1702.05725",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2016-297",
+      SLACcitation   = "%%CITATION = ARXIV:1702.05725;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1514251_EL.plot b/analyses/pluginATLAS/ATLAS_2017_I1514251_EL.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1514251_EL.plot
@@ -0,0 +1,83 @@
+# BEGIN PLOT /ATLAS_2017_I1514251_EL/d..
+XTwosidedTicks=1
+YTwosidedTicks=1
+LeftMargin=1.5
+XMinorTickMarks=0
+LogY=1
+LegendAlign=r
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_EL/d..-x..-y02
+Title=$Z \rightarrow e^+ e^-$, dressed level
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_EL/d01-x01
+LogY=1
+XLabel=$N_\text{jets}$
+XCustomMajorTicks=0	$\ge0$	1	$\ge1$	2	$\ge2$	3	$\ge3$	4	$\ge4$	5	$\ge5$	6	$\ge6$	7	$\ge7$
+YLabel=$\sigma(Z + \geq N_\text{jets})$ [pb]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_EL/d01-x02
+LogY=0
+XLabel=$N_\text{jets}$
+XCustomMajorTicks=0	$\ge$1/$\ge$0	1	$\ge$2/$\ge$1	2	$\ge$3/$\ge$2	3	$\ge$4/$\ge$3	4	$\ge$5/$\ge$4	5	$\ge$6/$\ge$5	6	$\ge$7/$\ge$6
+LegendYPos=0.3
+YLabel=$\sigma(Z + \geq N_\text{jets}+1) / \sigma(Z + \geq N_\text{jets})$
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_EL/d01-x03
+LogY=1
+XLabel=$N_\text{jets}$
+YLabel=$\sigma(Z + N_\text{jets})$ [pb]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_EL/d01-x04
+YLabel=d$\sigma/$d$H_\text{T}$ [pb/GeV]
+XLabel=$H_\text{T}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_EL/d01-x05
+YLabel=d$\sigma/$d$y^\text{jet}$ [pb]
+XLabel=$y^\text{jet}$ (leading jet)
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_EL/d01-x06
+YLabel=d$\sigma/$d$p_\text{T}^\text{jet}$ [pb/GeV]
+XLabel=$p_\text{T}^\text{jet}$ (== 1 jet) [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_EL/d01-x07
+YLabel=d$\sigma/$d$p_\text{T}^\text{jet}$ [pb/GeV]
+XLabel=$p_\text{T}^\text{jet}$ (leading jet, $\ge$ 1 jet) [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_EL/d01-x08
+YLabel=d$\sigma/$d$p_\text{T}^\text{jet}$ [pb/GeV]
+XLabel=$p_\text{T}^\text{jet}$ (leading jet, $\ge$ 2 jet) [GeV]
+# END PLOT
+
+
+# BEGIN PLOT /ATLAS_2017_I1514251_EL/d01-x09
+YLabel=d$\sigma/$d$p_\text{T}^\text{jet}$ [pb/GeV]
+XLabel=$p_\text{T}^\text{jet}$ (leading jet, $\ge$ 3 jet) [GeV]
+# END PLOT
+
+
+# BEGIN PLOT /ATLAS_2017_I1514251_EL/d01-x10
+YLabel=d$\sigma/$d$p_\text{T}^\text{jet}$ [pb/GeV]
+XLabel=$p_\text{T}^\text{jet}$ (leading jet, $\ge$ 4 jet) [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_EL/d01-x11
+YLabel=d$\sigma/$d$\Delta\phi$ [pb]
+XLabel=$\Delta\phi$(leading, second jet)
+LegendAlign=l
+LegendXPos=0.05
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_EL/d01-x12
+YLabel=d$\sigma/$d$M$ [pb/GeV]
+XLabel=$M$(leading, second jet) [GeV]
+# END PLOT
+
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1514251_EL.yoda b/analyses/pluginATLAS/ATLAS_2017_I1514251_EL.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1514251_EL.yoda
@@ -0,0 +1,241 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_EL/d01-x11-y02
+Path=/REF/ATLAS_2017_I1514251_EL/d01-x11-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.047198e-01	1.047198e-01	1.047198e-01	4.118513e+00	5.704798e-01	5.704798e-01
+3.141593e-01	1.047198e-01	1.047198e-01	4.736919e+00	6.432382e-01	6.432382e-01
+5.235988e-01	1.047198e-01	1.047198e-01	5.766376e+00	7.346579e-01	7.346579e-01
+7.330383e-01	1.047198e-01	1.047198e-01	4.997756e+00	6.596933e-01	6.596933e-01
+9.424778e-01	1.047198e-01	1.047198e-01	4.684497e+00	6.497553e-01	6.497553e-01
+1.151917e+00	1.047198e-01	1.047198e-01	4.451269e+00	5.732207e-01	5.732207e-01
+1.361357e+00	1.047198e-01	1.047198e-01	4.855426e+00	6.559916e-01	6.559916e-01
+1.570796e+00	1.047198e-01	1.047198e-01	5.505116e+00	6.552807e-01	6.552807e-01
+1.780236e+00	1.047198e-01	1.047198e-01	6.708991e+00	8.008456e-01	8.008456e-01
+1.989675e+00	1.047198e-01	1.047198e-01	7.542017e+00	7.966161e-01	7.966161e-01
+2.199115e+00	1.047198e-01	1.047198e-01	9.371866e+00	9.781217e-01	9.781217e-01
+2.408554e+00	1.047198e-01	1.047198e-01	1.218162e+01	1.161073e+00	1.161073e+00
+2.617994e+00	1.047198e-01	1.047198e-01	1.465395e+01	1.289212e+00	1.289212e+00
+2.827433e+00	1.047198e-01	1.047198e-01	1.839235e+01	1.484988e+00	1.484988e+00
+3.036873e+00	1.047198e-01	1.047198e-01	2.116200e+01	1.638341e+00	1.638341e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_EL/d01-x04-y02
+Path=/REF/ATLAS_2017_I1514251_EL/d01-x04-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+02	2.000000e+01	2.000000e+01	3.513412e-01	5.152192e-02	5.152192e-02
+1.400000e+02	2.000000e+01	2.000000e+01	1.321960e+00	1.012910e-01	1.012910e-01
+1.800000e+02	2.000000e+01	2.000000e+01	5.284628e-01	3.264442e-02	3.264442e-02
+2.200000e+02	2.000000e+01	2.000000e+01	2.650125e-01	1.534839e-02	1.534839e-02
+2.600000e+02	2.000000e+01	2.000000e+01	1.491337e-01	8.439977e-03	8.439977e-03
+3.000000e+02	2.000000e+01	2.000000e+01	9.073137e-02	5.133226e-03	5.133226e-03
+3.400000e+02	2.000000e+01	2.000000e+01	5.881562e-02	3.455577e-03	3.455577e-03
+3.800000e+02	2.000000e+01	2.000000e+01	4.013245e-02	2.577090e-03	2.577090e-03
+4.400000e+02	4.000000e+01	4.000000e+01	2.275433e-02	1.452194e-03	1.452194e-03
+5.200000e+02	4.000000e+01	4.000000e+01	1.218997e-02	8.376371e-04	8.376371e-04
+6.000000e+02	4.000000e+01	4.000000e+01	6.503254e-03	5.193747e-04	5.193747e-04
+6.800000e+02	4.000000e+01	4.000000e+01	3.756909e-03	3.360809e-04	3.360809e-04
+7.600000e+02	4.000000e+01	4.000000e+01	2.656269e-03	2.679214e-04	2.679214e-04
+9.000000e+02	1.000000e+02	1.000000e+02	1.219469e-03	1.227992e-04	1.227992e-04
+1.100000e+03	1.000000e+02	1.000000e+02	4.048999e-04	6.077697e-05	6.077697e-05
+1.300000e+03	1.000000e+02	1.000000e+02	1.745717e-04	3.854946e-05	3.854946e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_EL/d01-x03-y02
+Path=/REF/ATLAS_2017_I1514251_EL/d01-x03-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+0.000000e+00	5.000000e-01	5.000000e-01	6.259947e+02	2.599740e+01	2.599740e+01
+1.000000e+00	5.000000e-01	5.000000e-01	8.953408e+01	7.251258e+00	7.251258e+00
+2.000000e+00	5.000000e-01	5.000000e-01	2.088323e+01	2.159380e+00	2.159380e+00
+3.000000e+00	5.000000e-01	5.000000e-01	4.713982e+00	5.973220e-01	5.973220e-01
+4.000000e+00	5.000000e-01	5.000000e-01	1.130425e+00	1.699983e-01	1.699983e-01
+5.000000e+00	5.000000e-01	5.000000e-01	2.748345e-01	5.194739e-02	5.194739e-02
+6.000000e+00	5.000000e-01	5.000000e-01	6.378176e-02	1.548900e-02	1.548900e-02
+7.000000e+00	5.000000e-01	5.000000e-01	1.326055e-02	4.471643e-03	4.471643e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_EL/d01-x12-y02
+Path=/REF/ATLAS_2017_I1514251_EL/d01-x12-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+01	1.250000e+01	1.250000e+01	4.589550e-03	1.086386e-03	1.086386e-03
+3.750000e+01	1.250000e+01	1.250000e+01	6.216574e-02	9.902741e-03	9.902741e-03
+6.250000e+01	1.250000e+01	1.250000e+01	9.752081e-02	1.456701e-02	1.456701e-02
+8.750000e+01	1.250000e+01	1.250000e+01	1.599205e-01	2.082027e-02	2.082027e-02
+1.125000e+02	1.250000e+01	1.250000e+01	1.448286e-01	1.579742e-02	1.579742e-02
+1.375000e+02	1.250000e+01	1.250000e+01	1.198583e-01	1.180898e-02	1.180898e-02
+1.625000e+02	1.250000e+01	1.250000e+01	9.205018e-02	8.113408e-03	8.113408e-03
+1.875000e+02	1.250000e+01	1.250000e+01	7.174541e-02	6.059267e-03	6.059267e-03
+2.125000e+02	1.250000e+01	1.250000e+01	5.596492e-02	4.998201e-03	4.998201e-03
+2.375000e+02	1.250000e+01	1.250000e+01	4.416680e-02	3.859227e-03	3.859227e-03
+2.625000e+02	1.250000e+01	1.250000e+01	3.317607e-02	2.840431e-03	2.840431e-03
+2.875000e+02	1.250000e+01	1.250000e+01	2.789397e-02	2.407914e-03	2.407914e-03
+3.125000e+02	1.250000e+01	1.250000e+01	2.268925e-02	2.017258e-03	2.017258e-03
+3.375000e+02	1.250000e+01	1.250000e+01	1.849564e-02	1.680873e-03	1.680873e-03
+3.625000e+02	1.250000e+01	1.250000e+01	1.490864e-02	1.371851e-03	1.371851e-03
+3.875000e+02	1.250000e+01	1.250000e+01	1.170693e-02	1.037846e-03	1.037846e-03
+4.250000e+02	2.500000e+01	2.500000e+01	8.881526e-03	7.178252e-04	7.178252e-04
+4.750000e+02	2.500000e+01	2.500000e+01	6.996677e-03	6.078034e-04	6.078034e-04
+5.375000e+02	3.750000e+01	3.750000e+01	4.754896e-03	4.186139e-04	4.186139e-04
+6.250000e+02	5.000000e+01	5.000000e+01	2.487915e-03	2.512504e-04	2.512504e-04
+7.375000e+02	6.250000e+01	6.250000e+01	1.358970e-03	1.519033e-04	1.519033e-04
+9.000000e+02	1.000000e+02	1.000000e+02	6.368713e-04	7.970294e-05	7.970294e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_EL/d01-x08-y02
+Path=/REF/ATLAS_2017_I1514251_EL/d01-x08-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+4.000000e+01	1.000000e+01	1.000000e+01	3.119780e-01	5.354819e-02	5.354819e-02
+6.000000e+01	1.000000e+01	1.000000e+01	3.360101e-01	3.703852e-02	3.703852e-02
+8.000000e+01	1.000000e+01	1.000000e+01	2.235269e-01	1.835625e-02	1.835625e-02
+1.000000e+02	1.000000e+01	1.000000e+01	1.491288e-01	1.153190e-02	1.153190e-02
+1.200000e+02	1.000000e+01	1.000000e+01	9.707385e-02	6.969805e-03	6.969805e-03
+1.400000e+02	1.000000e+01	1.000000e+01	6.450773e-02	4.495511e-03	4.495511e-03
+1.600000e+02	1.000000e+01	1.000000e+01	4.504425e-02	3.222809e-03	3.222809e-03
+1.850000e+02	1.500000e+01	1.500000e+01	2.922988e-02	2.178874e-03	2.178874e-03
+2.250000e+02	2.500000e+01	2.500000e+01	1.523541e-02	1.100428e-03	1.100428e-03
+2.750000e+02	2.500000e+01	2.500000e+01	7.480967e-03	6.529627e-04	6.529627e-04
+3.250000e+02	2.500000e+01	2.500000e+01	3.790698e-03	4.021117e-04	4.021117e-04
+3.750000e+02	2.500000e+01	2.500000e+01	2.258362e-03	2.942760e-04	2.942760e-04
+4.500000e+02	5.000000e+01	5.000000e+01	9.316150e-04	1.313468e-04	1.313468e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_EL/d01-x01-y02
+Path=/REF/ATLAS_2017_I1514251_EL/d01-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+0.000000e+00	5.000000e-01	5.000000e-01	7.426131e+02	2.877942e+01	2.877942e+01
+1.000000e+00	5.000000e-01	5.000000e-01	1.166183e+02	1.017194e+01	1.017194e+01
+2.000000e+00	5.000000e-01	5.000000e-01	2.708424e+01	2.981752e+00	2.981752e+00
+3.000000e+00	5.000000e-01	5.000000e-01	6.201009e+00	8.326064e-01	8.326064e-01
+4.000000e+00	5.000000e-01	5.000000e-01	1.487027e+00	2.385186e-01	2.385186e-01
+5.000000e+00	5.000000e-01	5.000000e-01	3.566019e-01	7.085190e-02	7.085190e-02
+6.000000e+00	5.000000e-01	5.000000e-01	8.176736e-02	2.025657e-02	2.025657e-02
+7.000000e+00	5.000000e-01	5.000000e-01	1.798560e-02	5.911363e-03	5.911363e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_EL/d01-x09-y02
+Path=/REF/ATLAS_2017_I1514251_EL/d01-x09-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+4.000000e+01	1.000000e+01	1.000000e+01	2.826449e-02	7.519230e-03	7.519230e-03
+6.000000e+01	1.000000e+01	1.000000e+01	5.685295e-02	1.026501e-02	1.026501e-02
+8.000000e+01	1.000000e+01	1.000000e+01	5.228339e-02	7.076828e-03	7.076828e-03
+1.000000e+02	1.000000e+01	1.000000e+01	4.376019e-02	5.301240e-03	5.301240e-03
+1.200000e+02	1.000000e+01	1.000000e+01	3.082990e-02	3.491523e-03	3.491523e-03
+1.400000e+02	1.000000e+01	1.000000e+01	2.258743e-02	2.301485e-03	2.301485e-03
+1.600000e+02	1.000000e+01	1.000000e+01	1.730957e-02	1.728849e-03	1.728849e-03
+1.850000e+02	1.500000e+01	1.500000e+01	1.207005e-02	1.251554e-03	1.251554e-03
+2.250000e+02	2.500000e+01	2.500000e+01	7.073640e-03	6.999320e-04	6.999320e-04
+2.750000e+02	2.500000e+01	2.500000e+01	4.108232e-03	4.548680e-04	4.548680e-04
+3.250000e+02	2.500000e+01	2.500000e+01	2.173094e-03	3.037301e-04	3.037301e-04
+3.750000e+02	2.500000e+01	2.500000e+01	1.223382e-03	2.085298e-04	2.085298e-04
+4.500000e+02	5.000000e+01	5.000000e+01	4.842817e-04	8.882944e-05	8.882944e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_EL/d01-x02-y02
+Path=/REF/ATLAS_2017_I1514251_EL/d01-x02-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+0.000000e+00	5.000000e-01	5.000000e-01	1.570378e-01	1.319255e-02	1.319255e-02
+1.000000e+00	5.000000e-01	5.000000e-01	2.322468e-01	9.622771e-03	9.622771e-03
+2.000000e+00	5.000000e-01	5.000000e-01	2.289527e-01	9.721342e-03	9.721342e-03
+3.000000e+00	5.000000e-01	5.000000e-01	2.398041e-01	1.123159e-02	1.123159e-02
+4.000000e+00	5.000000e-01	5.000000e-01	2.398086e-01	1.611865e-02	1.611865e-02
+5.000000e+00	5.000000e-01	5.000000e-01	2.292959e-01	2.382778e-02	2.382778e-02
+6.000000e+00	5.000000e-01	5.000000e-01	2.199606e-01	4.499367e-02	4.499367e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_EL/d01-x10-y02
+Path=/REF/ATLAS_2017_I1514251_EL/d01-x10-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+4.000000e+01	1.000000e+01	1.000000e+01	3.770506e-03	1.804516e-03	1.804516e-03
+6.000000e+01	1.000000e+01	1.000000e+01	9.744312e-03	2.664998e-03	2.664998e-03
+8.000000e+01	1.000000e+01	1.000000e+01	1.051329e-02	2.137766e-03	2.137766e-03
+1.000000e+02	1.000000e+01	1.000000e+01	1.019792e-02	1.846214e-03	1.846214e-03
+1.200000e+02	1.000000e+01	1.000000e+01	7.665168e-03	1.287776e-03	1.287776e-03
+1.400000e+02	1.000000e+01	1.000000e+01	6.373141e-03	9.907235e-04	9.907235e-04
+1.600000e+02	1.000000e+01	1.000000e+01	5.503235e-03	8.800177e-04	8.800177e-04
+1.850000e+02	1.500000e+01	1.500000e+01	3.759879e-03	5.997107e-04	5.997107e-04
+2.250000e+02	2.500000e+01	2.500000e+01	2.525802e-03	3.842226e-04	3.842226e-04
+2.750000e+02	2.500000e+01	2.500000e+01	1.724159e-03	2.800925e-04	2.800925e-04
+3.500000e+02	5.000000e+01	5.000000e+01	7.904478e-04	1.349583e-04	1.349583e-04
+4.500000e+02	5.000000e+01	5.000000e+01	2.306093e-04	6.177763e-05	6.177763e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_EL/d01-x05-y02
+Path=/REF/ATLAS_2017_I1514251_EL/d01-x05-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e-01	1.250000e-01	1.250000e-01	6.325097e+01	4.047895e+00	4.047895e+00
+3.750000e-01	1.250000e-01	1.250000e-01	5.946519e+01	3.868471e+00	3.868471e+00
+6.250000e-01	1.250000e-01	1.250000e-01	5.839623e+01	4.112607e+00	4.112607e+00
+8.750000e-01	1.250000e-01	1.250000e-01	5.483243e+01	4.490714e+00	4.490714e+00
+1.125000e+00	1.250000e-01	1.250000e-01	4.863375e+01	4.599547e+00	4.599547e+00
+1.375000e+00	1.250000e-01	1.250000e-01	4.614978e+01	4.431997e+00	4.431997e+00
+1.625000e+00	1.250000e-01	1.250000e-01	4.076749e+01	3.836771e+00	3.836771e+00
+1.875000e+00	1.250000e-01	1.250000e-01	3.608314e+01	2.981045e+00	2.981045e+00
+2.125000e+00	1.250000e-01	1.250000e-01	3.144874e+01	2.750479e+00	2.750479e+00
+2.375000e+00	1.250000e-01	1.250000e-01	2.583812e+01	3.000890e+00	3.000890e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_EL/d01-x06-y02
+Path=/REF/ATLAS_2017_I1514251_EL/d01-x06-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+3.500000e+01	5.000000e+00	5.000000e+00	3.620743e+00	3.717212e-01	3.717212e-01
+4.500000e+01	5.000000e+00	5.000000e+00	1.954246e+00	1.234090e-01	1.234090e-01
+5.500000e+01	5.000000e+00	5.000000e+00	1.121379e+00	5.735693e-02	5.735693e-02
+7.000000e+01	1.000000e+01	1.000000e+01	5.603352e-01	2.726035e-02	2.726035e-02
+9.000000e+01	1.000000e+01	1.000000e+01	2.537939e-01	1.210410e-02	1.210410e-02
+1.100000e+02	1.000000e+01	1.000000e+01	1.306979e-01	6.760691e-03	6.760691e-03
+1.300000e+02	1.000000e+01	1.000000e+01	7.110927e-02	4.005835e-03	4.005835e-03
+1.500000e+02	1.000000e+01	1.000000e+01	4.081246e-02	2.563130e-03	2.563130e-03
+1.700000e+02	1.000000e+01	1.000000e+01	2.491043e-02	1.734081e-03	1.734081e-03
+1.900000e+02	1.000000e+01	1.000000e+01	1.572745e-02	1.230650e-03	1.230650e-03
+2.250000e+02	2.500000e+01	2.500000e+01	7.578172e-03	6.460433e-04	6.460433e-04
+2.750000e+02	2.500000e+01	2.500000e+01	2.587921e-03	3.181898e-04	3.181898e-04
+3.500000e+02	5.000000e+01	5.000000e+01	7.360154e-04	1.132591e-04	1.132591e-04
+4.500000e+02	5.000000e+01	5.000000e+01	2.205223e-04	6.077055e-05	6.077055e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_EL/d01-x07-y02
+Path=/REF/ATLAS_2017_I1514251_EL/d01-x07-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.750000e+01	2.500000e+00	2.500000e+00	6.171587e+00	7.007749e-01	7.007749e-01
+3.500000e+01	5.000000e+00	5.000000e+00	3.855525e+00	3.988895e-01	3.988895e-01
+4.500000e+01	5.000000e+00	5.000000e+00	2.348499e+00	1.767603e-01	1.767603e-01
+5.500000e+01	5.000000e+00	5.000000e+00	1.491991e+00	9.543730e-02	9.543730e-02
+7.000000e+01	1.000000e+01	1.000000e+01	8.367969e-01	4.854673e-02	4.854673e-02
+9.000000e+01	1.000000e+01	1.000000e+01	4.366089e-01	2.333714e-02	2.333714e-02
+1.100000e+02	1.000000e+01	1.000000e+01	2.485608e-01	1.311348e-02	1.311348e-02
+1.300000e+02	1.000000e+01	1.000000e+01	1.510431e-01	8.129623e-03	8.129623e-03
+1.500000e+02	1.000000e+01	1.000000e+01	9.558518e-02	5.354950e-03	5.354950e-03
+1.700000e+02	1.000000e+01	1.000000e+01	6.241624e-02	3.725795e-03	3.725795e-03
+1.900000e+02	1.000000e+01	1.000000e+01	4.196775e-02	2.703290e-03	2.703290e-03
+2.250000e+02	2.500000e+01	2.500000e+01	2.282962e-02	1.455194e-03	1.455194e-03
+2.750000e+02	2.500000e+01	2.500000e+01	1.006720e-02	7.851689e-04	7.851689e-04
+3.250000e+02	2.500000e+01	2.500000e+01	4.745278e-03	4.544663e-04	4.544663e-04
+3.750000e+02	2.500000e+01	2.500000e+01	2.772143e-03	3.264631e-04	3.264631e-04
+4.500000e+02	5.000000e+01	5.000000e+01	1.156774e-03	1.505478e-04	1.505478e-04
+5.500000e+02	5.000000e+01	5.000000e+01	4.236944e-04	8.611340e-05	8.611340e-05
+6.500000e+02	5.000000e+01	5.000000e+01	1.527075e-04	4.686190e-05	4.686190e-05
+7.500000e+02	5.000000e+01	5.000000e+01	9.514199e-05	3.771580e-05	3.771580e-05
+END YODA_SCATTER2D
+
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1514251_MU.info b/analyses/pluginATLAS/ATLAS_2017_I1514251_MU.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1514251_MU.info
@@ -0,0 +1,45 @@
+Name: ATLAS_2017_I1514251_MU
+Year: 2017
+Summary: Z plus jets at 13 TeV, muon channel
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1514251
+Status: VALIDATED
+Authors:
+ - Gavin Hesketh <gavin.hesketh@cern.ch>
+References:
+ - arXiv:1702.05725 [hep-ex]
+ - submitted to EPJC
+Keywords:
+ - Z
+ - JETS
+RunInfo:
+  pp -> Z(->mumu) + jets at 13 TeV
+Luminosity_fb: 3.16
+Beams: [p+, p+]
+Energies: [13000]
+PtCuts: [25, 25]
+Description:
+  'Measurements of the production cross section of a $Z$ boson in association with jets in proton-proton collisions at i
+  $\sqrt{s}=13$ TeV are presented, using data corresponding to an integrated luminosity of 3.16 fb${}^{-1}$ collected by
+  the ATLAS experiment at the CERN Large Hadron Collider in 2015. Inclusive and differential cross sections are measured
+  for events containing a $Z$ boson decaying to electrons or muons and produced in association with up to seven jets with
+  $p_\text{T}>30$ GeV and $|y|<2.5$. Predictions from different Monte Carlo generators based on leading-order and
+  next-to-leading-order matrix elements for up to two additional partons interfaced with parton shower and fixed-order
+  predictions at next-to-leading order and next-to-next-to-leading order are compared with the measured cross sections.
+  Good agreement within the uncertainties is observed for most of the modelled quantities, in particular with the generators
+  which use next-to-leading-order matrix elements and the more recent next-to-next-to-leading-order fixed-order predictions.'
+BibKey: Aaboud:2017hbk
+BibTeX: '@article{Aaboud:2017hbk,
+      author         = "Aaboud, Morad and others",
+      title          = "{Measurements of the production cross section of a $Z$
+                        boson in association with jets in pp collisions at
+                        $\sqrt{s} = 13$ TeV with the ATLAS detector}",
+      collaboration  = "ATLAS",
+      year           = "2017",
+      eprint         = "1702.05725",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2016-297",
+      SLACcitation   = "%%CITATION = ARXIV:1702.05725;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1514251_MU.plot b/analyses/pluginATLAS/ATLAS_2017_I1514251_MU.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1514251_MU.plot
@@ -0,0 +1,83 @@
+# BEGIN PLOT /ATLAS_2017_I1514251_MU/d..
+XTwosidedTicks=1
+YTwosidedTicks=1
+LeftMargin=1.5
+XMinorTickMarks=0
+LogY=1
+LegendAlign=r
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_MU/d..-x..-y03
+Title=$Z \rightarrow \mu^+ \mu^-$, dressed level
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_MU/d01-x01
+LogY=1
+XLabel=$N_\text{jets}$
+XCustomMajorTicks=0	$\ge0$	1	$\ge1$	2	$\ge2$	3	$\ge3$	4	$\ge4$	5	$\ge5$	6	$\ge6$	7	$\ge7$
+YLabel=$\sigma(Z + \geq N_\text{jets})$ [pb]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_MU/d01-x02
+LogY=0
+XLabel=$N_\text{jets}$
+XCustomMajorTicks=0	$\ge$1/$\ge$0	1	$\ge$2/$\ge$1	2	$\ge$3/$\ge$2	3	$\ge$4/$\ge$3	4	$\ge$5/$\ge$4	5	$\ge$6/$\ge$5	6	$\ge$7/$\ge$6
+LegendYPos=0.3
+YLabel=$\sigma(Z + \geq N_\text{jets}+1) / \sigma(Z + \geq N_\text{jets})$
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_MU/d01-x03
+LogY=1
+XLabel=$N_\text{jets}$
+YLabel=$\sigma(Z + N_\text{jets})$ [pb]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_MU/d01-x04
+YLabel=d$\sigma/$d$H_\text{T}$ [pb/GeV]
+XLabel=$H_\text{T}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_MU/d01-x05
+YLabel=d$\sigma/$d$y^\text{jet}$ [pb]
+XLabel=$y^\text{jet}$ (leading jet)
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_MU/d01-x06
+YLabel=d$\sigma/$d$p_\text{T}^\text{jet}$ [pb/GeV]
+XLabel=$p_\text{T}^\text{jet}$ (== 1 jet) [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_MU/d01-x07
+YLabel=d$\sigma/$d$p_\text{T}^\text{jet}$ [pb/GeV]
+XLabel=$p_\text{T}^\text{jet}$ (leading jet, $\ge$ 1 jet) [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_MU/d01-x08
+YLabel=d$\sigma/$d$p_\text{T}^\text{jet}$ [pb/GeV]
+XLabel=$p_\text{T}^\text{jet}$ (leading jet, $\ge$ 2 jet) [GeV]
+# END PLOT
+
+
+# BEGIN PLOT /ATLAS_2017_I1514251_MU/d01-x09
+YLabel=d$\sigma/$d$p_\text{T}^\text{jet}$ [pb/GeV]
+XLabel=$p_\text{T}^\text{jet}$ (leading jet, $\ge$ 3 jet) [GeV]
+# END PLOT
+
+
+# BEGIN PLOT /ATLAS_2017_I1514251_MU/d01-x10
+YLabel=d$\sigma/$d$p_\text{T}^\text{jet}$ [pb/GeV]
+XLabel=$p_\text{T}^\text{jet}$ (leading jet, $\ge$ 4 jet) [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_MU/d01-x11
+YLabel=d$\sigma/$d$\Delta\phi$ [pb]
+XLabel=$\Delta\phi$(leading, second jet)
+LegendAlign=l
+LegendXPos=0.05
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1514251_MU/d01-x12
+YLabel=d$\sigma/$d$M$ [pb/GeV]
+XLabel=$M$(leading, second jet) [GeV]
+# END PLOT
+
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1514251_MU.yoda b/analyses/pluginATLAS/ATLAS_2017_I1514251_MU.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1514251_MU.yoda
@@ -0,0 +1,242 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_MU/d01-x11-y03
+Path=/REF/ATLAS_2017_I1514251_MU/d01-x11-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.047198e-01	1.047198e-01	1.047198e-01	3.981572e+00	5.292262e-01	5.292262e-01
+3.141593e-01	1.047198e-01	1.047198e-01	4.554883e+00	6.174893e-01	6.174893e-01
+5.235988e-01	1.047198e-01	1.047198e-01	5.551377e+00	6.862260e-01	6.862260e-01
+7.330383e-01	1.047198e-01	1.047198e-01	4.747646e+00	6.159811e-01	6.159811e-01
+9.424778e-01	1.047198e-01	1.047198e-01	4.579189e+00	6.386834e-01	6.386834e-01
+1.151917e+00	1.047198e-01	1.047198e-01	4.609639e+00	5.949327e-01	5.949327e-01
+1.361357e+00	1.047198e-01	1.047198e-01	5.090633e+00	5.979317e-01	5.979317e-01
+1.570796e+00	1.047198e-01	1.047198e-01	5.301260e+00	6.141678e-01	6.141678e-01
+1.780236e+00	1.047198e-01	1.047198e-01	6.420107e+00	7.201467e-01	7.201467e-01
+1.989675e+00	1.047198e-01	1.047198e-01	7.843624e+00	8.465353e-01	8.465353e-01
+2.199115e+00	1.047198e-01	1.047198e-01	9.262704e+00	9.287876e-01	9.287876e-01
+2.408554e+00	1.047198e-01	1.047198e-01	1.176840e+01	1.044146e+00	1.044146e+00
+2.617994e+00	1.047198e-01	1.047198e-01	1.473658e+01	1.261430e+00	1.261430e+00
+2.827433e+00	1.047198e-01	1.047198e-01	1.858758e+01	1.541193e+00	1.541193e+00
+3.036873e+00	1.047198e-01	1.047198e-01	2.157408e+01	1.618677e+00	1.618677e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_MU/d01-x04-y03
+Path=/REF/ATLAS_2017_I1514251_MU/d01-x04-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+02	2.000000e+01	2.000000e+01	3.443088e-01	4.854880e-02	4.854880e-02
+1.400000e+02	2.000000e+01	2.000000e+01	1.311959e+00	9.890332e-02	9.890332e-02
+1.800000e+02	2.000000e+01	2.000000e+01	5.296575e-01	3.132497e-02	3.132497e-02
+2.200000e+02	2.000000e+01	2.000000e+01	2.635566e-01	1.486859e-02	1.486859e-02
+2.600000e+02	2.000000e+01	2.000000e+01	1.462782e-01	8.199187e-03	8.199187e-03
+3.000000e+02	2.000000e+01	2.000000e+01	9.012351e-02	5.137514e-03	5.137514e-03
+3.400000e+02	2.000000e+01	2.000000e+01	5.758080e-02	3.313443e-03	3.313443e-03
+3.800000e+02	2.000000e+01	2.000000e+01	3.836301e-02	2.238206e-03	2.238206e-03
+4.400000e+02	4.000000e+01	4.000000e+01	2.308455e-02	1.343492e-03	1.343492e-03
+5.200000e+02	4.000000e+01	4.000000e+01	1.210005e-02	7.691444e-04	7.691444e-04
+6.000000e+02	4.000000e+01	4.000000e+01	6.782193e-03	4.861696e-04	4.861696e-04
+6.800000e+02	4.000000e+01	4.000000e+01	3.909990e-03	3.161560e-04	3.161560e-04
+7.600000e+02	4.000000e+01	4.000000e+01	2.550123e-03	2.364222e-04	2.364222e-04
+9.000000e+02	1.000000e+02	1.000000e+02	1.205445e-03	1.111542e-04	1.111542e-04
+1.100000e+03	1.000000e+02	1.000000e+02	4.881184e-04	6.549789e-05	6.549789e-05
+1.300000e+03	1.000000e+02	1.000000e+02	1.835134e-04	3.725143e-05	3.725143e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_MU/d01-x03-y03
+Path=/REF/ATLAS_2017_I1514251_MU/d01-x03-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+0.000000e+00	5.000000e-01	5.000000e-01	6.227766e+02	2.544608e+01	2.544608e+01
+1.000000e+00	5.000000e-01	5.000000e-01	8.872733e+01	7.177740e+00	7.177740e+00
+2.000000e+00	5.000000e-01	5.000000e-01	2.073994e+01	2.067456e+00	2.067456e+00
+3.000000e+00	5.000000e-01	5.000000e-01	4.737322e+00	6.121548e-01	6.121548e-01
+4.000000e+00	5.000000e-01	5.000000e-01	1.127494e+00	1.701515e-01	1.701515e-01
+5.000000e+00	5.000000e-01	5.000000e-01	2.789631e-01	5.200200e-02	5.200200e-02
+6.000000e+00	5.000000e-01	5.000000e-01	5.896512e-02	1.427857e-02	1.427857e-02
+7.000000e+00	5.000000e-01	5.000000e-01	1.276613e-02	4.319409e-03	4.319409e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_MU/d01-x12-y03
+Path=/REF/ATLAS_2017_I1514251_MU/d01-x12-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e+01	1.250000e+01	1.250000e+01	4.316887e-03	9.172755e-04	9.172755e-04
+3.750000e+01	1.250000e+01	1.250000e+01	6.250205e-02	9.447342e-03	9.447342e-03
+6.250000e+01	1.250000e+01	1.250000e+01	9.732039e-02	1.475371e-02	1.475371e-02
+8.750000e+01	1.250000e+01	1.250000e+01	1.538266e-01	1.854781e-02	1.854781e-02
+1.125000e+02	1.250000e+01	1.250000e+01	1.465606e-01	1.527634e-02	1.527634e-02
+1.375000e+02	1.250000e+01	1.250000e+01	1.182093e-01	1.138886e-02	1.138886e-02
+1.625000e+02	1.250000e+01	1.250000e+01	8.944070e-02	8.171645e-03	8.171645e-03
+1.875000e+02	1.250000e+01	1.250000e+01	7.105411e-02	6.328220e-03	6.328220e-03
+2.125000e+02	1.250000e+01	1.250000e+01	5.349166e-02	4.815084e-03	4.815084e-03
+2.375000e+02	1.250000e+01	1.250000e+01	4.262199e-02	3.724524e-03	3.724524e-03
+2.625000e+02	1.250000e+01	1.250000e+01	3.347957e-02	2.869324e-03	2.869324e-03
+2.875000e+02	1.250000e+01	1.250000e+01	2.731930e-02	2.333747e-03	2.333747e-03
+3.125000e+02	1.250000e+01	1.250000e+01	2.158670e-02	1.875695e-03	1.875695e-03
+3.375000e+02	1.250000e+01	1.250000e+01	1.782350e-02	1.562478e-03	1.562478e-03
+3.625000e+02	1.250000e+01	1.250000e+01	1.444831e-02	1.250877e-03	1.250877e-03
+3.875000e+02	1.250000e+01	1.250000e+01	1.208561e-02	1.013557e-03	1.013557e-03
+4.250000e+02	2.500000e+01	2.500000e+01	9.291791e-03	7.244567e-04	7.244567e-04
+4.750000e+02	2.500000e+01	2.500000e+01	6.804474e-03	5.777556e-04	5.777556e-04
+5.375000e+02	3.750000e+01	3.750000e+01	4.334264e-03	3.850733e-04	3.850733e-04
+6.250000e+02	5.000000e+01	5.000000e+01	2.589786e-03	2.673211e-04	2.673211e-04
+7.375000e+02	6.250000e+01	6.250000e+01	1.456276e-03	1.501567e-04	1.501567e-04
+9.000000e+02	1.000000e+02	1.000000e+02	6.551615e-04	7.985188e-05	7.985188e-05
+1.100000e+03	1.000000e+02	1.000000e+02	3.197411e-04	4.936188e-05	4.936188e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_MU/d01-x08-y03
+Path=/REF/ATLAS_2017_I1514251_MU/d01-x08-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+4.000000e+01	1.000000e+01	1.000000e+01	3.098445e-01	5.014563e-02	5.014563e-02
+6.000000e+01	1.000000e+01	1.000000e+01	3.351107e-01	3.612981e-02	3.612981e-02
+8.000000e+01	1.000000e+01	1.000000e+01	2.240844e-01	1.796731e-02	1.796731e-02
+1.000000e+02	1.000000e+01	1.000000e+01	1.460735e-01	1.070479e-02	1.070479e-02
+1.200000e+02	1.000000e+01	1.000000e+01	9.635136e-02	6.678530e-03	6.678530e-03
+1.400000e+02	1.000000e+01	1.000000e+01	6.361195e-02	4.229763e-03	4.229763e-03
+1.600000e+02	1.000000e+01	1.000000e+01	4.407405e-02	2.890652e-03	2.890652e-03
+1.850000e+02	1.500000e+01	1.500000e+01	3.007293e-02	2.048475e-03	2.048475e-03
+2.250000e+02	2.500000e+01	2.500000e+01	1.582645e-02	1.122824e-03	1.122824e-03
+2.750000e+02	2.500000e+01	2.500000e+01	7.274606e-03	6.007216e-04	6.007216e-04
+3.250000e+02	2.500000e+01	2.500000e+01	3.629279e-03	3.571488e-04	3.571488e-04
+3.750000e+02	2.500000e+01	2.500000e+01	2.108344e-03	2.559965e-04	2.559965e-04
+4.500000e+02	5.000000e+01	5.000000e+01	9.539574e-04	1.271105e-04	1.271105e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_MU/d01-x01-y03
+Path=/REF/ATLAS_2017_I1514251_MU/d01-x01-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+0.000000e+00	5.000000e-01	5.000000e-01	7.384632e+02	2.814458e+01	2.814458e+01
+1.000000e+00	5.000000e-01	5.000000e-01	1.156866e+02	1.003341e+01	1.003341e+01
+2.000000e+00	5.000000e-01	5.000000e-01	2.695924e+01	2.905420e+00	2.905420e+00
+3.000000e+00	5.000000e-01	5.000000e-01	6.219295e+00	8.470796e-01	8.470796e-01
+4.000000e+00	5.000000e-01	5.000000e-01	1.481974e+00	2.378979e-01	2.378979e-01
+5.000000e+00	5.000000e-01	5.000000e-01	3.544801e-01	6.981850e-02	6.981850e-02
+6.000000e+00	5.000000e-01	5.000000e-01	7.551701e-02	1.938110e-02	1.938110e-02
+7.000000e+00	5.000000e-01	5.000000e-01	1.655189e-02	6.577859e-03	6.577859e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_MU/d01-x09-y03
+Path=/REF/ATLAS_2017_I1514251_MU/d01-x09-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+4.000000e+01	1.000000e+01	1.000000e+01	2.793739e-02	6.915508e-03	6.915508e-03
+6.000000e+01	1.000000e+01	1.000000e+01	5.474565e-02	1.019329e-02	1.019329e-02
+8.000000e+01	1.000000e+01	1.000000e+01	5.224220e-02	7.122214e-03	7.122214e-03
+1.000000e+02	1.000000e+01	1.000000e+01	4.228975e-02	4.976113e-03	4.976113e-03
+1.200000e+02	1.000000e+01	1.000000e+01	3.188564e-02	3.418171e-03	3.418171e-03
+1.400000e+02	1.000000e+01	1.000000e+01	2.347843e-02	2.420436e-03	2.420436e-03
+1.600000e+02	1.000000e+01	1.000000e+01	1.705245e-02	1.625310e-03	1.625310e-03
+1.850000e+02	1.500000e+01	1.500000e+01	1.321391e-02	1.231649e-03	1.231649e-03
+2.250000e+02	2.500000e+01	2.500000e+01	7.796005e-03	7.633860e-04	7.633860e-04
+2.750000e+02	2.500000e+01	2.500000e+01	4.000196e-03	4.257486e-04	4.257486e-04
+3.250000e+02	2.500000e+01	2.500000e+01	1.907839e-03	2.453498e-04	2.453498e-04
+3.750000e+02	2.500000e+01	2.500000e+01	1.214618e-03	1.859635e-04	1.859635e-04
+4.500000e+02	5.000000e+01	5.000000e+01	6.276644e-04	1.018562e-04	1.018562e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_MU/d01-x02-y03
+Path=/REF/ATLAS_2017_I1514251_MU/d01-x02-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+0.000000e+00	5.000000e-01	5.000000e-01	1.566585e-01	1.311257e-02	1.311257e-02
+1.000000e+00	5.000000e-01	5.000000e-01	2.330369e-01	9.266758e-03	9.266758e-03
+2.000000e+00	5.000000e-01	5.000000e-01	2.306926e-01	1.026836e-02	1.026836e-02
+3.000000e+00	5.000000e-01	5.000000e-01	2.382865e-01	1.079165e-02	1.079165e-02
+4.000000e+00	5.000000e-01	5.000000e-01	2.391946e-01	1.540768e-02	1.540768e-02
+5.000000e+00	5.000000e-01	5.000000e-01	2.130360e-01	2.377029e-02	2.377029e-02
+6.000000e+00	5.000000e-01	5.000000e-01	2.191809e-01	5.333429e-02	5.333429e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_MU/d01-x10-y03
+Path=/REF/ATLAS_2017_I1514251_MU/d01-x10-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+4.000000e+01	1.000000e+01	1.000000e+01	2.540350e-03	1.035872e-03	1.035872e-03
+6.000000e+01	1.000000e+01	1.000000e+01	7.349081e-03	1.987856e-03	1.987856e-03
+8.000000e+01	1.000000e+01	1.000000e+01	9.835785e-03	1.851317e-03	1.851317e-03
+1.000000e+02	1.000000e+01	1.000000e+01	1.028037e-02	1.745723e-03	1.745723e-03
+1.200000e+02	1.000000e+01	1.000000e+01	8.875280e-03	1.428963e-03	1.428963e-03
+1.400000e+02	1.000000e+01	1.000000e+01	6.819900e-03	1.040792e-03	1.040792e-03
+1.600000e+02	1.000000e+01	1.000000e+01	5.445462e-03	8.179979e-04	8.179979e-04
+1.850000e+02	1.500000e+01	1.500000e+01	4.434904e-03	6.319532e-04	6.319532e-04
+2.250000e+02	2.500000e+01	2.500000e+01	2.920828e-03	4.230027e-04	4.230027e-04
+2.750000e+02	2.500000e+01	2.500000e+01	1.591619e-03	2.499708e-04	2.499708e-04
+3.500000e+02	5.000000e+01	5.000000e+01	6.742211e-04	1.089175e-04	1.089175e-04
+4.500000e+02	5.000000e+01	5.000000e+01	3.014310e-04	6.834656e-05	6.834656e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_MU/d01-x05-y03
+Path=/REF/ATLAS_2017_I1514251_MU/d01-x05-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e-01	1.250000e-01	1.250000e-01	6.327552e+01	4.020493e+00	4.020493e+00
+3.750000e-01	1.250000e-01	1.250000e-01	6.017529e+01	3.799369e+00	3.799369e+00
+6.250000e-01	1.250000e-01	1.250000e-01	5.737774e+01	3.975794e+00	3.975794e+00
+8.750000e-01	1.250000e-01	1.250000e-01	5.372851e+01	4.518245e+00	4.518245e+00
+1.125000e+00	1.250000e-01	1.250000e-01	4.896851e+01	4.501486e+00	4.501486e+00
+1.375000e+00	1.250000e-01	1.250000e-01	4.621553e+01	4.583611e+00	4.583611e+00
+1.625000e+00	1.250000e-01	1.250000e-01	3.984139e+01	3.695079e+00	3.695079e+00
+1.875000e+00	1.250000e-01	1.250000e-01	3.587892e+01	2.898484e+00	2.898484e+00
+2.125000e+00	1.250000e-01	1.250000e-01	3.053770e+01	2.493947e+00	2.493947e+00
+2.375000e+00	1.250000e-01	1.250000e-01	2.486526e+01	2.776260e+00	2.776260e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_MU/d01-x06-y03
+Path=/REF/ATLAS_2017_I1514251_MU/d01-x06-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+3.500000e+01	5.000000e+00	5.000000e+00	3.584871e+00	3.604266e-01	3.604266e-01
+4.500000e+01	5.000000e+00	5.000000e+00	1.929037e+00	1.299139e-01	1.299139e-01
+5.500000e+01	5.000000e+00	5.000000e+00	1.110024e+00	5.462819e-02	5.462819e-02
+7.000000e+01	1.000000e+01	1.000000e+01	5.528817e-01	2.557367e-02	2.557367e-02
+9.000000e+01	1.000000e+01	1.000000e+01	2.548246e-01	1.206523e-02	1.206523e-02
+1.100000e+02	1.000000e+01	1.000000e+01	1.276067e-01	6.190470e-03	6.190470e-03
+1.300000e+02	1.000000e+01	1.000000e+01	7.063908e-02	3.796346e-03	3.796346e-03
+1.500000e+02	1.000000e+01	1.000000e+01	4.194407e-02	2.488142e-03	2.488142e-03
+1.700000e+02	1.000000e+01	1.000000e+01	2.519359e-02	1.659379e-03	1.659379e-03
+1.900000e+02	1.000000e+01	1.000000e+01	1.492130e-02	1.171045e-03	1.171045e-03
+2.250000e+02	2.500000e+01	2.500000e+01	7.093151e-03	5.679079e-04	5.679079e-04
+2.750000e+02	2.500000e+01	2.500000e+01	2.943595e-03	3.319621e-04	3.319621e-04
+3.500000e+02	5.000000e+01	5.000000e+01	8.313115e-04	1.220545e-04	1.220545e-04
+4.500000e+02	5.000000e+01	5.000000e+01	2.047523e-04	5.852323e-05	5.852323e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1514251_MU/d01-x07-y03
+Path=/REF/ATLAS_2017_I1514251_MU/d01-x07-y03
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.750000e+01	2.500000e+00	2.500000e+00	6.244869e+00	6.724412e-01	6.724412e-01
+3.500000e+01	5.000000e+00	5.000000e+00	3.816282e+00	3.859915e-01	3.859915e-01
+4.500000e+01	5.000000e+00	5.000000e+00	2.325957e+00	1.820083e-01	1.820083e-01
+5.500000e+01	5.000000e+00	5.000000e+00	1.479731e+00	9.204213e-02	9.204213e-02
+7.000000e+01	1.000000e+01	1.000000e+01	8.284267e-01	4.659670e-02	4.659670e-02
+9.000000e+01	1.000000e+01	1.000000e+01	4.371670e-01	2.350371e-02	2.350371e-02
+1.100000e+02	1.000000e+01	1.000000e+01	2.443669e-01	1.202640e-02	1.202640e-02
+1.300000e+02	1.000000e+01	1.000000e+01	1.487031e-01	7.752958e-03	7.752958e-03
+1.500000e+02	1.000000e+01	1.000000e+01	9.444954e-02	4.921526e-03	4.921526e-03
+1.700000e+02	1.000000e+01	1.000000e+01	6.390413e-02	3.581791e-03	3.581791e-03
+1.900000e+02	1.000000e+01	1.000000e+01	4.179750e-02	2.551195e-03	2.551195e-03
+2.250000e+02	2.500000e+01	2.500000e+01	2.285700e-02	1.384284e-03	1.384284e-03
+2.750000e+02	2.500000e+01	2.500000e+01	1.021331e-02	7.461543e-04	7.461543e-04
+3.250000e+02	2.500000e+01	2.500000e+01	4.740529e-03	4.234311e-04	4.234311e-04
+3.750000e+02	2.500000e+01	2.500000e+01	2.669406e-03	2.953536e-04	2.953536e-04
+4.500000e+02	5.000000e+01	5.000000e+01	1.158595e-03	1.424947e-04	1.424947e-04
+5.500000e+02	5.000000e+01	5.000000e+01	3.977625e-04	7.645299e-05	7.645299e-05
+6.500000e+02	5.000000e+01	5.000000e+01	1.796467e-04	5.007868e-05	5.007868e-05
+7.500000e+02	5.000000e+01	5.000000e+01	9.327001e-05	3.742119e-05	3.742119e-05
+END YODA_SCATTER2D
+
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1589844.cc b/analyses/pluginATLAS/ATLAS_2017_I1589844.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1589844.cc
@@ -0,0 +1,166 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/IdentifiedFinalState.hh"
+#include "Rivet/Projections/DressedLeptons.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Projections/VetoedFinalState.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+
+namespace Rivet {
+
+
+  /// kT splittings in Z events at 8 TeV
+  class ATLAS_2017_I1589844 : public Analysis {
+  public:
+
+    /// @name Constructors etc.
+    //@{
+
+    /// Constructors
+    ATLAS_2017_I1589844(string name="ATLAS_2017_I1589844") : Analysis(name) {
+      _mode = 1; // pick electron channel by default
+      setNeedsCrossSection(true);
+    }
+
+    //@}
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      const FinalState fs;
+
+      const Cut cuts = (_mode) ?
+        Cuts::pT > 25*GeV && (Cuts::abseta <= 1.37 || (Cuts::abseta >= 1.52 && Cuts::abseta < 2.47)) : //< electron channel version
+        (Cuts::pT > 25*GeV) && (Cuts::abseta < 2.4); //< muon channel version
+
+      IdentifiedFinalState bareleptons(fs);
+      bareleptons.acceptIdPair(_mode? PID::ELECTRON : PID::MUON);
+      const DressedLeptons leptons(fs, bareleptons, 0.1, cuts, true, true);
+      declare(leptons, "leptons");
+
+      const ChargedFinalState cfs(Cuts::abseta < 2.5 && Cuts::pT > 0.4*GeV);
+      VetoedFinalState jet_fs(cfs);
+      jet_fs.addVetoOnThisFinalState(leptons);
+      declare(FastJets(jet_fs, FastJets::KT, 0.4), "Kt04Jets");
+      declare(FastJets(jet_fs, FastJets::KT, 1.0), "Kt10Jets");
+
+      VetoedFinalState jet_fs_all(Cuts::abseta < 2.5 && Cuts::pT > 0.4*GeV);
+      jet_fs_all.addVetoOnThisFinalState(leptons);
+      FastJets jetpro04_all(jet_fs_all, FastJets::KT, 0.4);
+      jetpro04_all.useInvisibles();
+      declare(jetpro04_all, "Kt04Jets_all");
+      FastJets jetpro10_all(jet_fs_all, FastJets::KT, 1.0);
+      jetpro10_all.useInvisibles();
+      declare(jetpro10_all, "Kt10Jets_all");
+
+      // Histograms with data binning
+      _ndij = 8;
+      for (size_t i = 0; i < _ndij; ++i) {
+        string label = "d" + to_str(i) + "_kT4";
+        _h[label] = bookHisto1D(i + 1, 1, _mode + 1);
+        _h[label + "_all"] = bookHisto1D(i + 1, 1, _mode + 5);
+        label = "d" + to_str(i) + "_kT10";
+        _h[label] = bookHisto1D(i + 1, 1, _mode + 3);
+        _h[label + "_all"] = bookHisto1D(i + 1, 1, _mode + 7);
+      }
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& e) {
+
+      // Check we have a Z candidate:
+      const vector<DressedLepton>& leptons = apply<DressedLeptons>(e, "leptons").dressedLeptons();
+      if (leptons.size() != 2)  vetoEvent;
+      if (leptons[0].charge3()*leptons[1].charge3() > 0) vetoEvent;
+      const double dilepton_mass = (leptons[0].momentum() + leptons[1].momentum()).mass();
+      if (!inRange(dilepton_mass, 71*GeV, 111*GeV)) vetoEvent;
+
+      const double weight = e.weight();
+
+      // Get kT splitting scales (charged particles only)
+      const FastJets& jetpro04 = applyProjection<FastJets>(e, "Kt04Jets");
+      const shared_ptr<fastjet::ClusterSequence> seq04 = jetpro04.clusterSeq();
+      for (size_t i = 0; i < min(_ndij, (size_t)seq04->n_particles()); ++i) {
+        const double dij = sqrt(seq04->exclusive_dmerge_max(i))/GeV;
+        if (dij <= 0.0) continue;
+        const string label = "d" + to_str(i) + "_kT4";
+        _h[label]->fill(dij, weight);
+      }
+      const FastJets& jetpro10 = applyProjection<FastJets>(e, "Kt10Jets");
+      const shared_ptr<fastjet::ClusterSequence> seq10 = jetpro10.clusterSeq();
+      for (size_t i = 0; i < min(_ndij, (size_t)seq10->n_particles()); ++i) {
+        const double dij = sqrt(seq10->exclusive_dmerge_max(i))/GeV;
+        if (dij <= 0.0) continue;
+        const string label = "d" + to_str(i) + "_kT10";
+        _h[label]->fill(dij, weight);
+      }
+
+      // Get kT splitting scales (all particles)
+      const FastJets& jetpro04_all = applyProjection<FastJets>(e, "Kt04Jets_all");
+      const shared_ptr<fastjet::ClusterSequence> seq04_all = jetpro04_all.clusterSeq();
+      for (size_t i = 0; i < min(_ndij, (size_t)seq04_all->n_particles()); ++i) {
+        const double dij = sqrt(seq04_all->exclusive_dmerge_max(i))/GeV;
+        if (dij <= 0.0) continue;
+        const string label = "d" + to_str(i) + "_kT4_all";
+        _h[label]->fill(dij, weight);
+      }
+      const FastJets& jetpro10_all = applyProjection<FastJets>(e, "Kt10Jets_all");
+      const shared_ptr<fastjet::ClusterSequence> seq10_all = jetpro10_all.clusterSeq();
+      for (size_t i = 0; i < min(_ndij, (size_t)seq10_all->n_particles()); ++i) {
+        const double dij = sqrt(seq10_all->exclusive_dmerge_max(i))/GeV;
+        if (dij <= 0.0) continue;
+        const string label = "d" + to_str(i) + "_kT10_all";
+        _h[label]->fill(dij, weight);
+      }
+
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+      const double sf = crossSectionPerEvent();
+      for (auto& kv : _h) scale(kv.second, sf);
+    }
+
+    //@}
+
+
+  protected:
+
+    // Data members like post-cuts event weight counters go here
+    size_t _mode, _ndij;
+
+
+  private:
+
+    // Histograms
+    map<string, Histo1DPtr> _h;
+
+  };
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(ATLAS_2017_I1589844);
+
+
+
+  /// kT splittings in Z events at 8 TeV (electron channel)
+  struct ATLAS_2017_I1589844_EL : public ATLAS_2017_I1589844 {
+    ATLAS_2017_I1589844_EL() : ATLAS_2017_I1589844("ATLAS_2017_I1589844_EL") { _mode = 1; }
+  };
+  DECLARE_RIVET_PLUGIN(ATLAS_2017_I1589844_EL);
+
+
+  /// kT splittings in Z events at 8 TeV (muon channel)
+  struct ATLAS_2017_I1589844_MU : public ATLAS_2017_I1589844 {
+    ATLAS_2017_I1589844_MU() : ATLAS_2017_I1589844("ATLAS_2017_I1589844_MU") { _mode = 0; }
+  };
+  DECLARE_RIVET_PLUGIN(ATLAS_2017_I1589844_MU);
+
+
+}
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1589844.info b/analyses/pluginATLAS/ATLAS_2017_I1589844.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1589844.info
@@ -0,0 +1,46 @@
+Name: ATLAS_2017_I1589844
+Year: 2017
+Summary: $k_T$ splittings in $Z$ events at 8 TeV
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1589844
+Status: VALIDATED
+Authors:
+ - Christian Gutschow <chris.g@cern.ch>
+ - Frank Siegert <frank.siegert@cern.ch>
+References:
+ - arXiv:1704.01530 [hep-ex]
+ - submitted to JHEP
+Keywords:
+ - KTSPLITTINGS
+ - QCD
+ - Z
+ - JETS
+ - TRACKS
+RunInfo:
+  '$pp \to Z(\to ee/\mu\mu) +$ jets at 8 TeV'
+Luminosity_fb: 20.2
+Beams: [p+, p+]
+Energies: [8000]
+PtCuts: [25, 25, 0.4]
+Description:
+  'A measurement of the splitting scales occuring in the $k_\text{t}$ jet-clustering algorithm is presented for final states containing
+  a $Z$ boson. The measurement is done using 20.2 fb$^{-1}$ of proton-proton collision data collected at a centre-of-mass energy of
+  $\sqrt{s} = 8$ TeV by the ATLAS experiment at the LHC in 2012. The measurement is based on charged-particle track information,
+  which is measured with excellent precision in the $p_\text{T}$ region relevant for the transition between the perturbative and the
+  non-perturbative regimes. The data distributions are corrected for detector effects, and are found to deviate from
+  state-of-the-art predictions in various regions of the observables.'
+BibKey: Aaboud:2017hox
+BibTeX: '@article{Aaboud:2017hox,
+      author         = "Aaboud, Morad and others",
+      title          = "{Measurement of the $k_\mathrm{t}$ splitting scales in $Z
+                        \to \ell\ell$ events in $pp$ collisions at $\sqrt{s} = 8$
+                        TeV with the ATLAS detector}",
+      collaboration  = "ATLAS",
+      year           = "2017",
+      eprint         = "1704.01530",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2017-033",
+      SLACcitation   = "%%CITATION = ARXIV:1704.01530;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1589844.plot b/analyses/pluginATLAS/ATLAS_2017_I1589844.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1589844.plot
@@ -0,0 +1,63 @@
+# BEGIN PLOT /ATLAS_2017_I1589844/d..
+Title=$Z \rightarrow e^+e^-$, $R=0.4$, charged particles only
+LogY=1
+LogX=1
+XTwosidedTicks=1
+YTwosidedTicks=1
+#LeftMargin=1.5
+LegendXPos=0.95
+LegendAlign=r
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844/d..-x01-y04
+Title=$Z \rightarrow e^+e^-$, $R=1.0$, charged particles only
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844/d..-x01-y06
+Title=$Z \rightarrow e^+e^-$, $R=0.4$, charged and neutral particles
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844/d..-x01-y08
+Title=$Z \rightarrow e^+e^-$, $R=1.0$, charged and neutral particles
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844/d01
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_0}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_0}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844/d02
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_1}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_1}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844/d03
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_2}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_2}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844/d04
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_3}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_3}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844/d05
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_4}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_4}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844/d06
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_5}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_5}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844/d07
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_6}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_6}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844/d08
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_7}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_7}$ [GeV]
+# END PLOT
+
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1589844.yoda b/analyses/pluginATLAS/ATLAS_2017_I1589844.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1589844.yoda
@@ -0,0 +1,848 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d01-x01-y02
+Path=/REF/ATLAS_2017_I1589844/d01-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.843191e+01	7.457050e-01	7.457050e-01
+1.300520e+00	1.120177e-01	1.120177e-01	2.441937e+01	8.251125e-01	8.251125e-01
+1.545671e+00	1.331332e-01	1.331332e-01	3.066112e+01	1.114318e+00	1.114318e+00
+1.837033e+00	1.582291e-01	1.582291e-01	4.064066e+01	1.394752e+00	1.394752e+00
+2.183318e+00	1.880557e-01	1.880557e-01	4.727946e+01	1.525491e+00	1.525491e+00
+2.594878e+00	2.235046e-01	2.235046e-01	5.446314e+01	1.778923e+00	1.778923e+00
+3.084019e+00	2.656357e-01	2.656357e-01	5.806647e+01	1.920201e+00	1.920201e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.538682e+01	1.723712e+00	1.723712e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.033783e+01	1.566466e+00	1.566466e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.086573e+01	1.290886e+00	1.290886e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.126881e+01	9.824325e-01	9.824325e-01
+7.313361e+00	6.299216e-01	6.299216e-01	2.267270e+01	7.502458e-01	7.502458e-01
+8.691946e+00	7.486632e-01	7.486632e-01	1.607494e+01	5.400483e-01	5.400483e-01
+1.033040e+01	8.897879e-01	8.897879e-01	1.169971e+01	4.021634e-01	4.021634e-01
+1.227770e+01	1.057515e+00	1.057515e+00	8.472988e+00	2.986058e-01	2.986058e-01
+1.459207e+01	1.256859e+00	1.256859e+00	5.892089e+00	2.098366e-01	2.098366e-01
+1.734271e+01	1.493779e+00	1.493779e+00	4.366320e+00	1.600385e-01	1.600385e-01
+2.061185e+01	1.775360e+00	1.775360e+00	3.112279e+00	1.174748e-01	1.174748e-01
+2.449723e+01	2.110020e+00	2.110020e+00	2.240750e+00	8.717211e-02	8.717211e-02
+2.911501e+01	2.507763e+00	2.507763e+00	1.534069e+00	6.318952e-02	6.318952e-02
+3.460326e+01	2.980482e+00	2.980482e+00	1.030531e+00	4.402922e-02	4.402922e-02
+4.112605e+01	3.542309e+00	3.542309e+00	6.834079e-01	2.963892e-02	2.963892e-02
+4.887840e+01	4.210043e+00	4.210043e+00	4.320688e-01	1.918555e-02	1.918555e-02
+5.809209e+01	5.003645e+00	5.003645e+00	2.666526e-01	1.245923e-02	1.245923e-02
+6.904258e+01	5.946843e+00	5.946843e+00	1.671143e-01	8.250283e-03	8.250283e-03
+8.205726e+01	7.067836e+00	7.067836e+00	9.339255e-02	4.677413e-03	4.677413e-03
+9.752523e+01	8.400139e+00	8.400139e+00	5.411575e-02	2.824555e-03	2.824555e-03
+1.159090e+02	9.983584e+00	9.983584e+00	2.782189e-02	1.487392e-03	1.487392e-03
+1.377581e+02	1.186551e+01	1.186551e+01	1.514939e-02	8.451217e-04	8.451217e-04
+1.961423e+02	4.651872e+01	4.651872e+01	4.275534e-03	2.531246e-04	2.531246e-04
+6.213305e+02	3.786695e+02	3.786695e+02	8.432581e-05	9.408547e-06	9.408547e-06
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d01-x01-y04
+Path=/REF/ATLAS_2017_I1589844/d01-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	8.131834e+00	4.490677e-01	4.490677e-01
+1.300520e+00	1.120177e-01	1.120177e-01	1.009730e+01	4.073897e-01	4.073897e-01
+1.545671e+00	1.331332e-01	1.331332e-01	1.143915e+01	5.885724e-01	5.885724e-01
+1.837033e+00	1.582291e-01	1.582291e-01	1.466143e+01	5.944605e-01	5.944605e-01
+2.183318e+00	1.880557e-01	1.880557e-01	1.782742e+01	6.701411e-01	6.701411e-01
+2.594878e+00	2.235046e-01	2.235046e-01	2.082979e+01	7.277524e-01	7.277524e-01
+3.084019e+00	2.656357e-01	2.656357e-01	2.538012e+01	9.136748e-01	9.136748e-01
+3.665363e+00	3.157087e-01	3.157087e-01	2.791683e+01	9.391386e-01	9.391386e-01
+4.356292e+00	3.752204e-01	3.752204e-01	3.061612e+01	9.748082e-01	9.748082e-01
+5.177463e+00	4.459503e-01	4.459503e-01	3.145211e+01	9.928744e-01	9.928744e-01
+6.153426e+00	5.300130e-01	5.300130e-01	3.162385e+01	9.857417e-01	9.857417e-01
+7.313361e+00	6.299216e-01	6.299216e-01	2.929418e+01	9.115539e-01	9.115539e-01
+8.691946e+00	7.486632e-01	7.486632e-01	2.545845e+01	8.282911e-01	8.282911e-01
+1.033040e+01	8.897879e-01	8.897879e-01	2.103254e+01	6.742779e-01	6.742779e-01
+1.227770e+01	1.057515e+00	1.057515e+00	1.604205e+01	5.290447e-01	5.290447e-01
+1.459207e+01	1.256859e+00	1.256859e+00	1.130196e+01	3.864420e-01	3.864420e-01
+1.734271e+01	1.493779e+00	1.493779e+00	7.816633e+00	2.789999e-01	2.789999e-01
+2.061185e+01	1.775360e+00	1.775360e+00	5.245804e+00	1.959936e-01	1.959936e-01
+2.449723e+01	2.110020e+00	2.110020e+00	3.466486e+00	1.362328e-01	1.362328e-01
+2.911501e+01	2.507763e+00	2.507763e+00	2.335649e+00	9.715040e-02	9.715040e-02
+3.460326e+01	2.980482e+00	2.980482e+00	1.476691e+00	6.452457e-02	6.452457e-02
+4.112605e+01	3.542309e+00	3.542309e+00	9.501897e-01	4.261565e-02	4.261565e-02
+4.887840e+01	4.210043e+00	4.210043e+00	5.877472e-01	2.727143e-02	2.727143e-02
+5.809209e+01	5.003645e+00	5.003645e+00	3.522312e-01	1.736717e-02	1.736717e-02
+6.904258e+01	5.946843e+00	5.946843e+00	2.218414e-01	1.140433e-02	1.140433e-02
+8.205726e+01	7.067836e+00	7.067836e+00	1.251722e-01	6.452849e-03	6.452849e-03
+9.752523e+01	8.400139e+00	8.400139e+00	6.951626e-02	3.670086e-03	3.670086e-03
+1.159090e+02	9.983584e+00	9.983584e+00	3.751489e-02	2.146711e-03	2.146711e-03
+1.377581e+02	1.186551e+01	1.186551e+01	2.007446e-02	1.180381e-03	1.180381e-03
+1.961423e+02	4.651872e+01	4.651872e+01	5.355213e-03	3.426689e-04	3.426689e-04
+6.213305e+02	3.786695e+02	3.786695e+02	1.064601e-04	1.463478e-05	1.463478e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d01-x01-y06
+Path=/REF/ATLAS_2017_I1589844/d01-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	5.026395e+00	1.138510e+00	1.138510e+00
+1.300520e+00	1.120177e-01	1.120177e-01	7.064791e+00	1.377203e+00	1.377203e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.011198e+01	1.772341e+00	1.772341e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.493136e+01	2.131044e+00	2.131044e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.935026e+01	2.498820e+00	2.498820e+00
+2.594878e+00	2.235046e-01	2.235046e-01	2.554289e+01	2.917353e+00	2.917353e+00
+3.084019e+00	2.656357e-01	2.656357e-01	3.185762e+01	3.495927e+00	3.495927e+00
+3.665363e+00	3.157087e-01	3.157087e-01	3.680790e+01	3.417445e+00	3.417445e+00
+4.356292e+00	3.752204e-01	3.752204e-01	3.925983e+01	3.263206e+00	3.263206e+00
+5.177463e+00	4.459503e-01	4.459503e-01	3.806103e+01	2.585990e+00	2.585990e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.437418e+01	2.532062e+00	2.532062e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.832551e+01	2.932608e+00	2.932608e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.125015e+01	2.458701e+00	2.458701e+00
+1.033040e+01	8.897879e-01	8.897879e-01	1.569831e+01	1.772818e+00	1.772818e+00
+1.227770e+01	1.057515e+00	1.057515e+00	1.146950e+01	1.057360e+00	1.057360e+00
+1.459207e+01	1.256859e+00	1.256859e+00	8.173606e+00	3.808644e-01	3.808644e-01
+1.734271e+01	1.493779e+00	1.493779e+00	6.084104e+00	3.673885e-01	3.673885e-01
+2.061185e+01	1.775360e+00	1.775360e+00	4.559399e+00	3.934733e-01	3.934733e-01
+2.449723e+01	2.110020e+00	2.110020e+00	3.438216e+00	3.291714e-01	3.291714e-01
+2.911501e+01	2.507763e+00	2.507763e+00	2.590863e+00	2.375422e-01	2.375422e-01
+3.460326e+01	2.980482e+00	2.980482e+00	1.894800e+00	1.602624e-01	1.602624e-01
+4.112605e+01	3.542309e+00	3.542309e+00	1.341776e+00	1.010453e-01	1.010453e-01
+4.887840e+01	4.210043e+00	4.210043e+00	9.108951e-01	6.451331e-02	6.451331e-02
+5.809209e+01	5.003645e+00	5.003645e+00	5.936520e-01	3.993185e-02	3.993185e-02
+6.904258e+01	5.946843e+00	5.946843e+00	3.875928e-01	2.014963e-02	2.014963e-02
+8.205726e+01	7.067836e+00	7.067836e+00	2.416991e-01	1.231090e-02	1.231090e-02
+9.752523e+01	8.400139e+00	8.400139e+00	1.484650e-01	7.958954e-03	7.958954e-03
+1.159090e+02	9.983584e+00	9.983584e+00	8.610534e-02	4.620871e-03	4.620871e-03
+1.377581e+02	1.186551e+01	1.186551e+01	4.948377e-02	2.979784e-03	2.979784e-03
+1.961423e+02	4.651872e+01	4.651872e+01	1.515177e-02	1.007609e-03	1.007609e-03
+6.213305e+02	3.786695e+02	3.786695e+02	4.511159e-04	4.895730e-05	4.895730e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d01-x01-y08
+Path=/REF/ATLAS_2017_I1589844/d01-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	2.140524e+00	8.120082e-01	8.120082e-01
+1.300520e+00	1.120177e-01	1.120177e-01	2.642372e+00	6.443953e-01	6.443953e-01
+1.545671e+00	1.331332e-01	1.331332e-01	3.240243e+00	7.587629e-01	7.587629e-01
+1.837033e+00	1.582291e-01	1.582291e-01	4.493157e+00	8.792785e-01	8.792785e-01
+2.183318e+00	1.880557e-01	1.880557e-01	5.409410e+00	9.191437e-01	9.191437e-01
+2.594878e+00	2.235046e-01	2.235046e-01	7.443397e+00	1.129511e+00	1.129511e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.015570e+00	1.172671e+00	1.172671e+00
+3.665363e+00	3.157087e-01	3.157087e-01	1.216738e+01	1.351261e+00	1.351261e+00
+4.356292e+00	3.752204e-01	3.752204e-01	1.514874e+01	1.504543e+00	1.504543e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.744598e+01	1.412676e+00	1.412676e+00
+6.153426e+00	5.300130e-01	5.300130e-01	1.977819e+01	1.471023e+00	1.471023e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.103805e+01	1.324354e+00	1.324354e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.107483e+01	1.223237e+00	1.223237e+00
+1.033040e+01	8.897879e-01	8.897879e-01	1.997679e+01	1.067052e+00	1.067052e+00
+1.227770e+01	1.057515e+00	1.057515e+00	1.762803e+01	8.065027e-01	8.065027e-01
+1.459207e+01	1.256859e+00	1.256859e+00	1.481611e+01	7.324409e-01	7.324409e-01
+1.734271e+01	1.493779e+00	1.493779e+00	1.153820e+01	4.853849e-01	4.853849e-01
+2.061185e+01	1.775360e+00	1.775360e+00	8.572226e+00	3.224268e-01	3.224268e-01
+2.449723e+01	2.110020e+00	2.110020e+00	6.043360e+00	2.697194e-01	2.697194e-01
+2.911501e+01	2.507763e+00	2.507763e+00	4.264073e+00	2.256532e-01	2.256532e-01
+3.460326e+01	2.980482e+00	2.980482e+00	2.947890e+00	1.660653e-01	1.660653e-01
+4.112605e+01	3.542309e+00	3.542309e+00	1.996719e+00	1.218428e-01	1.218428e-01
+4.887840e+01	4.210043e+00	4.210043e+00	1.334860e+00	7.509910e-02	7.509910e-02
+5.809209e+01	5.003645e+00	5.003645e+00	8.462506e-01	5.007346e-02	5.007346e-02
+6.904258e+01	5.946843e+00	5.946843e+00	5.250550e-01	3.429120e-02	3.429120e-02
+8.205726e+01	7.067836e+00	7.067836e+00	3.261205e-01	1.745130e-02	1.745130e-02
+9.752523e+01	8.400139e+00	8.400139e+00	1.990265e-01	1.079316e-02	1.079316e-02
+1.159090e+02	9.983584e+00	9.983584e+00	1.165856e-01	6.555164e-03	6.555164e-03
+1.377581e+02	1.186551e+01	1.186551e+01	6.653251e-02	4.147569e-03	4.147569e-03
+1.961423e+02	4.651872e+01	4.651872e+01	2.095795e-02	1.430811e-03	1.430811e-03
+6.213305e+02	3.786695e+02	3.786695e+02	5.946527e-04	6.802584e-05	6.802584e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d02-x01-y02
+Path=/REF/ATLAS_2017_I1589844/d02-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	4.251658e+01	1.566065e+00	1.566065e+00
+1.300520e+00	1.120177e-01	1.120177e-01	5.347048e+01	1.698262e+00	1.698262e+00
+1.545671e+00	1.331332e-01	1.331332e-01	6.865451e+01	2.399943e+00	2.399943e+00
+1.837033e+00	1.582291e-01	1.582291e-01	7.857296e+01	2.556877e+00	2.556877e+00
+2.183318e+00	1.880557e-01	1.880557e-01	8.720231e+01	2.750437e+00	2.750437e+00
+2.594878e+00	2.235046e-01	2.235046e-01	9.337012e+01	3.065478e+00	3.065478e+00
+3.084019e+00	2.656357e-01	2.656357e-01	8.859543e+01	2.897633e+00	2.897633e+00
+3.665363e+00	3.157087e-01	3.157087e-01	7.455953e+01	2.508455e+00	2.508455e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.829047e+01	1.991888e+00	1.991888e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.022941e+01	1.440183e+00	1.440183e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.504355e+01	9.844996e-01	9.844996e-01
+7.313361e+00	6.299216e-01	6.299216e-01	1.507121e+01	6.011462e-01	6.011462e-01
+8.691946e+00	7.486632e-01	7.486632e-01	8.787865e+00	3.656542e-01	3.656542e-01
+1.033040e+01	8.897879e-01	8.897879e-01	5.257721e+00	2.323279e-01	2.323279e-01
+1.227770e+01	1.057515e+00	1.057515e+00	3.288535e+00	1.580652e-01	1.580652e-01
+1.459207e+01	1.256859e+00	1.256859e+00	2.042152e+00	1.013971e-01	1.013971e-01
+1.734271e+01	1.493779e+00	1.493779e+00	1.274409e+00	6.704191e-02	6.704191e-02
+2.061185e+01	1.775360e+00	1.775360e+00	8.054232e-01	4.494587e-02	4.494587e-02
+2.449723e+01	2.110020e+00	2.110020e+00	4.916852e-01	2.996955e-02	2.996955e-02
+2.911501e+01	2.507763e+00	2.507763e+00	3.015235e-01	1.926580e-02	1.926580e-02
+3.460326e+01	2.980482e+00	2.980482e+00	1.787215e-01	1.213894e-02	1.213894e-02
+4.112605e+01	3.542309e+00	3.542309e+00	1.052898e-01	7.624179e-03	7.624179e-03
+4.887840e+01	4.210043e+00	4.210043e+00	6.465946e-02	5.033112e-03	5.033112e-03
+5.809209e+01	5.003645e+00	5.003645e+00	3.583416e-02	2.904991e-03	2.904991e-03
+6.904258e+01	5.946843e+00	5.946843e+00	1.924695e-02	1.704510e-03	1.704510e-03
+9.830401e+01	2.331459e+01	2.331459e+01	6.161733e-03	6.179331e-04	6.179331e-04
+3.114029e+02	1.897843e+02	1.897843e+02	2.084350e-04	5.042981e-05	5.042981e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d02-x01-y04
+Path=/REF/ATLAS_2017_I1589844/d02-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	2.213549e+01	1.257319e+00	1.257319e+00
+1.300520e+00	1.120177e-01	1.120177e-01	2.578350e+01	9.251823e-01	9.251823e-01
+1.545671e+00	1.331332e-01	1.331332e-01	3.036665e+01	1.294972e+00	1.294972e+00
+1.837033e+00	1.582291e-01	1.582291e-01	3.572293e+01	1.370832e+00	1.370832e+00
+2.183318e+00	1.880557e-01	1.880557e-01	4.079239e+01	1.416067e+00	1.416067e+00
+2.594878e+00	2.235046e-01	2.235046e-01	4.456356e+01	1.315123e+00	1.315123e+00
+3.084019e+00	2.656357e-01	2.656357e-01	4.837683e+01	1.402558e+00	1.402558e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.148847e+01	1.505844e+00	1.505844e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.019930e+01	1.479742e+00	1.479742e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.733873e+01	1.443311e+00	1.443311e+00
+6.153426e+00	5.300130e-01	5.300130e-01	4.073097e+01	1.296580e+00	1.296580e+00
+7.313361e+00	6.299216e-01	6.299216e-01	3.224517e+01	1.087139e+00	1.087139e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.355572e+01	8.613873e-01	8.613873e-01
+1.033040e+01	8.897879e-01	8.897879e-01	1.561065e+01	5.915471e-01	5.915471e-01
+1.227770e+01	1.057515e+00	1.057515e+00	9.550952e+00	3.961028e-01	3.961028e-01
+1.459207e+01	1.256859e+00	1.256859e+00	5.369347e+00	2.376030e-01	2.376030e-01
+1.734271e+01	1.493779e+00	1.493779e+00	2.976504e+00	1.412455e-01	1.412455e-01
+2.061185e+01	1.775360e+00	1.775360e+00	1.628869e+00	8.204071e-02	8.204071e-02
+2.449723e+01	2.110020e+00	2.110020e+00	9.015307e-01	4.915482e-02	4.915482e-02
+2.911501e+01	2.507763e+00	2.507763e+00	4.935663e-01	2.931522e-02	2.931522e-02
+3.460326e+01	2.980482e+00	2.980482e+00	2.769087e-01	1.751636e-02	1.751636e-02
+4.112605e+01	3.542309e+00	3.542309e+00	1.599571e-01	1.084167e-02	1.084167e-02
+4.887840e+01	4.210043e+00	4.210043e+00	9.306745e-02	6.805731e-03	6.805731e-03
+5.809209e+01	5.003645e+00	5.003645e+00	5.227408e-02	4.043149e-03	4.043149e-03
+6.904258e+01	5.946843e+00	5.946843e+00	2.779982e-02	2.358778e-03	2.358778e-03
+9.830401e+01	2.331459e+01	2.331459e+01	8.619561e-03	8.318715e-04	8.318715e-04
+3.114029e+02	1.897843e+02	1.897843e+02	2.994644e-04	5.719088e-05	5.719088e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d02-x01-y06
+Path=/REF/ATLAS_2017_I1589844/d02-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.489763e+01	2.353181e+00	2.353181e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.982360e+01	2.603555e+00	2.603555e+00
+1.545671e+00	1.331332e-01	1.331332e-01	2.587930e+01	3.219879e+00	3.219879e+00
+1.837033e+00	1.582291e-01	1.582291e-01	3.255242e+01	3.668543e+00	3.668543e+00
+2.183318e+00	1.880557e-01	1.880557e-01	4.233328e+01	3.999467e+00	3.999467e+00
+2.594878e+00	2.235046e-01	2.235046e-01	5.087246e+01	4.713882e+00	4.713882e+00
+3.084019e+00	2.656357e-01	2.656357e-01	5.801644e+01	4.864634e+00	4.864634e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.193357e+01	4.588721e+00	4.588721e+00
+4.356292e+00	3.752204e-01	3.752204e-01	6.020458e+01	3.772272e+00	3.772272e+00
+5.177463e+00	4.459503e-01	4.459503e-01	5.336661e+01	3.275211e+00	3.275211e+00
+6.153426e+00	5.300130e-01	5.300130e-01	4.188339e+01	3.227490e+00	3.227490e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.957067e+01	2.899641e+00	2.899641e+00
+8.691946e+00	7.486632e-01	7.486632e-01	1.901814e+01	2.029827e+00	2.029827e+00
+1.033040e+01	8.897879e-01	8.897879e-01	1.152678e+01	9.587638e-01	9.587638e-01
+1.227770e+01	1.057515e+00	1.057515e+00	6.944233e+00	4.382270e-01	4.382270e-01
+1.459207e+01	1.256859e+00	1.256859e+00	4.231061e+00	2.760548e-01	2.760548e-01
+1.734271e+01	1.493779e+00	1.493779e+00	2.727649e+00	2.140536e-01	2.140536e-01
+2.061185e+01	1.775360e+00	1.775360e+00	1.782786e+00	1.685825e-01	1.685825e-01
+2.449723e+01	2.110020e+00	2.110020e+00	1.175197e+00	1.042250e-01	1.042250e-01
+2.911501e+01	2.507763e+00	2.507763e+00	7.742704e-01	6.094456e-02	6.094456e-02
+3.460326e+01	2.980482e+00	2.980482e+00	5.012703e-01	3.459606e-02	3.459606e-02
+4.112605e+01	3.542309e+00	3.542309e+00	3.078006e-01	1.991102e-02	1.991102e-02
+4.887840e+01	4.210043e+00	4.210043e+00	1.839932e-01	1.264942e-02	1.264942e-02
+5.809209e+01	5.003645e+00	5.003645e+00	1.097354e-01	7.702506e-03	7.702506e-03
+6.904258e+01	5.946843e+00	5.946843e+00	6.628384e-02	4.968150e-03	4.968150e-03
+9.830401e+01	2.331459e+01	2.331459e+01	2.429788e-02	2.096348e-03	2.096348e-03
+3.114029e+02	1.897843e+02	1.897843e+02	1.114871e-03	3.088679e-04	3.088679e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d02-x01-y08
+Path=/REF/ATLAS_2017_I1589844/d02-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	8.049465e+00	1.627731e+00	1.627731e+00
+1.300520e+00	1.120177e-01	1.120177e-01	8.990596e+00	1.624231e+00	1.624231e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.076139e+01	1.909451e+00	1.909451e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.224761e+01	2.313692e+00	2.313692e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.547082e+01	2.384618e+00	2.384618e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.915081e+01	2.414434e+00	2.414434e+00
+3.084019e+00	2.656357e-01	2.656357e-01	2.210513e+01	2.659900e+00	2.659900e+00
+3.665363e+00	3.157087e-01	3.157087e-01	2.681122e+01	2.366631e+00	2.366631e+00
+4.356292e+00	3.752204e-01	3.752204e-01	3.082771e+01	2.181140e+00	2.181140e+00
+5.177463e+00	4.459503e-01	4.459503e-01	3.368383e+01	2.067661e+00	2.067661e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.408435e+01	1.837770e+00	1.837770e+00
+7.313361e+00	6.299216e-01	6.299216e-01	3.238250e+01	1.563845e+00	1.563845e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.943282e+01	1.655684e+00	1.655684e+00
+1.033040e+01	8.897879e-01	8.897879e-01	2.385918e+01	1.174033e+00	1.174033e+00
+1.227770e+01	1.057515e+00	1.057515e+00	1.797710e+01	8.721781e-01	8.721781e-01
+1.459207e+01	1.256859e+00	1.256859e+00	1.253059e+01	5.659160e-01	5.659160e-01
+1.734271e+01	1.493779e+00	1.493779e+00	7.964495e+00	3.510716e-01	3.510716e-01
+2.061185e+01	1.775360e+00	1.775360e+00	4.792676e+00	2.437191e-01	2.437191e-01
+2.449723e+01	2.110020e+00	2.110020e+00	2.751965e+00	1.694596e-01	1.694596e-01
+2.911501e+01	2.507763e+00	2.507763e+00	1.561784e+00	1.081239e-01	1.081239e-01
+3.460326e+01	2.980482e+00	2.980482e+00	9.004670e-01	5.119386e-02	5.119386e-02
+4.112605e+01	3.542309e+00	3.542309e+00	5.182805e-01	2.835630e-02	2.835630e-02
+4.887840e+01	4.210043e+00	4.210043e+00	2.938264e-01	1.749024e-02	1.749024e-02
+5.809209e+01	5.003645e+00	5.003645e+00	1.663662e-01	1.081333e-02	1.081333e-02
+6.904258e+01	5.946843e+00	5.946843e+00	9.636735e-02	6.718521e-03	6.718521e-03
+9.830401e+01	2.331459e+01	2.331459e+01	3.556128e-02	3.074905e-03	3.074905e-03
+3.114029e+02	1.897843e+02	1.897843e+02	1.537270e-03	4.326461e-04	4.326461e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d03-x01-y02
+Path=/REF/ATLAS_2017_I1589844/d03-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	6.913391e+01	2.533522e+00	2.533522e+00
+1.300520e+00	1.120177e-01	1.120177e-01	8.657180e+01	3.283696e+00	3.283696e+00
+1.545671e+00	1.331332e-01	1.331332e-01	9.881895e+01	3.335522e+00	3.335522e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.131585e+02	3.660216e+00	3.660216e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.181065e+02	3.785198e+00	3.785198e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.138350e+02	3.772396e+00	3.772396e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.572317e+01	3.226374e+00	3.226374e+00
+3.665363e+00	3.157087e-01	3.157087e-01	7.176193e+01	2.561989e+00	2.561989e+00
+4.356292e+00	3.752204e-01	3.752204e-01	4.867972e+01	1.868982e+00	1.868982e+00
+5.177463e+00	4.459503e-01	4.459503e-01	2.846156e+01	1.188777e+00	1.188777e+00
+6.153426e+00	5.300130e-01	5.300130e-01	1.549413e+01	6.935612e-01	6.935612e-01
+7.313361e+00	6.299216e-01	6.299216e-01	7.874323e+00	3.838026e-01	3.838026e-01
+8.691946e+00	7.486632e-01	7.486632e-01	4.064096e+00	2.178716e-01	2.178716e-01
+1.033040e+01	8.897879e-01	8.897879e-01	2.139051e+00	1.241570e-01	1.241570e-01
+1.227770e+01	1.057515e+00	1.057515e+00	1.134773e+00	7.093575e-02	7.093575e-02
+1.459207e+01	1.256859e+00	1.256859e+00	6.540028e-01	4.373642e-02	4.373642e-02
+1.734271e+01	1.493779e+00	1.493779e+00	3.781698e-01	2.689145e-02	2.689145e-02
+2.061185e+01	1.775360e+00	1.775360e+00	2.121876e-01	1.593806e-02	1.593806e-02
+2.449723e+01	2.110020e+00	2.110020e+00	1.083296e-01	9.433377e-03	9.433377e-03
+2.911501e+01	2.507763e+00	2.507763e+00	6.069497e-02	5.303741e-03	5.303741e-03
+4.235561e+01	1.073283e+01	1.073283e+01	1.964958e-02	1.895753e-03	1.895753e-03
+1.521385e+02	9.905010e+01	9.905010e+01	4.600536e-04	9.522037e-05	9.522037e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d03-x01-y04
+Path=/REF/ATLAS_2017_I1589844/d03-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	3.825805e+01	2.132329e+00	2.132329e+00
+1.300520e+00	1.120177e-01	1.120177e-01	4.456967e+01	1.874852e+00	1.874852e+00
+1.545671e+00	1.331332e-01	1.331332e-01	5.186146e+01	2.073565e+00	2.073565e+00
+1.837033e+00	1.582291e-01	1.582291e-01	5.725064e+01	2.240922e+00	2.240922e+00
+2.183318e+00	1.880557e-01	1.880557e-01	6.164457e+01	2.013365e+00	2.013365e+00
+2.594878e+00	2.235046e-01	2.235046e-01	6.581330e+01	1.969264e+00	1.969264e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.706655e+01	1.959374e+00	1.959374e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.342732e+01	1.889673e+00	1.889673e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.799750e+01	1.819163e+00	1.819163e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.842780e+01	1.617673e+00	1.617673e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.718619e+01	1.371325e+00	1.371325e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.584674e+01	1.036562e+00	1.036562e+00
+8.691946e+00	7.486632e-01	7.486632e-01	1.614116e+01	7.093522e-01	7.093522e-01
+1.033040e+01	8.897879e-01	8.897879e-01	9.045228e+00	4.474669e-01	4.474669e-01
+1.227770e+01	1.057515e+00	1.057515e+00	4.427789e+00	2.435580e-01	2.435580e-01
+1.459207e+01	1.256859e+00	1.256859e+00	2.019382e+00	1.234920e-01	1.234920e-01
+1.734271e+01	1.493779e+00	1.493779e+00	9.245877e-01	6.312702e-02	6.312702e-02
+2.061185e+01	1.775360e+00	1.775360e+00	4.259970e-01	3.223159e-02	3.223159e-02
+2.449723e+01	2.110020e+00	2.110020e+00	1.973009e-01	1.669273e-02	1.669273e-02
+2.911501e+01	2.507763e+00	2.507763e+00	9.582690e-02	9.407234e-03	9.407234e-03
+4.235561e+01	1.073283e+01	1.073283e+01	2.485965e-02	2.980908e-03	2.980908e-03
+1.521385e+02	9.905010e+01	9.905010e+01	6.553450e-04	2.239677e-04	2.239677e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d03-x01-y06
+Path=/REF/ATLAS_2017_I1589844/d03-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	2.881642e+01	3.184287e+00	3.184287e+00
+1.300520e+00	1.120177e-01	1.120177e-01	3.541813e+01	4.103723e+00	4.103723e+00
+1.545671e+00	1.331332e-01	1.331332e-01	4.309837e+01	4.948677e+00	4.948677e+00
+1.837033e+00	1.582291e-01	1.582291e-01	5.446910e+01	5.105418e+00	5.105418e+00
+2.183318e+00	1.880557e-01	1.880557e-01	6.478630e+01	5.780485e+00	5.780485e+00
+2.594878e+00	2.235046e-01	2.235046e-01	7.364876e+01	5.943595e+00	5.943595e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.815995e+01	5.620889e+00	5.620889e+00
+3.665363e+00	3.157087e-01	3.157087e-01	7.694848e+01	4.621943e+00	4.621943e+00
+4.356292e+00	3.752204e-01	3.752204e-01	6.738364e+01	3.852427e+00	3.852427e+00
+5.177463e+00	4.459503e-01	4.459503e-01	5.286911e+01	3.498016e+00	3.498016e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.679335e+01	3.225438e+00	3.225438e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.254818e+01	2.250628e+00	2.250628e+00
+8.691946e+00	7.486632e-01	7.486632e-01	1.275560e+01	1.281082e+00	1.281082e+00
+1.033040e+01	8.897879e-01	8.897879e-01	6.770748e+00	5.681592e-01	5.681592e-01
+1.227770e+01	1.057515e+00	1.057515e+00	3.611050e+00	2.702737e-01	2.702737e-01
+1.459207e+01	1.256859e+00	1.256859e+00	1.956713e+00	1.317371e-01	1.317371e-01
+1.734271e+01	1.493779e+00	1.493779e+00	1.102316e+00	8.512634e-02	8.512634e-02
+2.061185e+01	1.775360e+00	1.775360e+00	6.606707e-01	5.283885e-02	5.283885e-02
+2.449723e+01	2.110020e+00	2.110020e+00	3.906399e-01	3.097488e-02	3.097488e-02
+2.911501e+01	2.507763e+00	2.507763e+00	2.318652e-01	1.783598e-02	1.783598e-02
+4.235561e+01	1.073283e+01	1.073283e+01	7.602995e-02	6.518094e-03	6.518094e-03
+1.521385e+02	9.905010e+01	9.905010e+01	2.549474e-03	9.406611e-04	9.406611e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d03-x01-y08
+Path=/REF/ATLAS_2017_I1589844/d03-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.682484e+01	2.775045e+00	2.775045e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.828133e+01	2.959732e+00	2.959732e+00
+1.545671e+00	1.331332e-01	1.331332e-01	2.046424e+01	3.454675e+00	3.454675e+00
+1.837033e+00	1.582291e-01	1.582291e-01	2.362836e+01	3.753439e+00	3.753439e+00
+2.183318e+00	1.880557e-01	1.880557e-01	2.766107e+01	3.787512e+00	3.787512e+00
+2.594878e+00	2.235046e-01	2.235046e-01	3.191776e+01	3.914413e+00	3.914413e+00
+3.084019e+00	2.656357e-01	2.656357e-01	3.666802e+01	3.333615e+00	3.333615e+00
+3.665363e+00	3.157087e-01	3.157087e-01	4.147307e+01	2.770658e+00	2.770658e+00
+4.356292e+00	3.752204e-01	3.752204e-01	4.339596e+01	2.367097e+00	2.367097e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.334516e+01	2.025415e+00	2.025415e+00
+6.153426e+00	5.300130e-01	5.300130e-01	4.085062e+01	1.782907e+00	1.782907e+00
+7.313361e+00	6.299216e-01	6.299216e-01	3.558937e+01	1.627386e+00	1.627386e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.837609e+01	1.360519e+00	1.360519e+00
+1.033040e+01	8.897879e-01	8.897879e-01	2.084315e+01	1.203209e+00	1.203209e+00
+1.227770e+01	1.057515e+00	1.057515e+00	1.373487e+01	7.509009e-01	7.509009e-01
+1.459207e+01	1.256859e+00	1.256859e+00	8.163879e+00	3.989291e-01	3.989291e-01
+1.734271e+01	1.493779e+00	1.493779e+00	4.385102e+00	2.193429e-01	2.193429e-01
+2.061185e+01	1.775360e+00	1.775360e+00	2.196628e+00	1.176876e-01	1.176876e-01
+2.449723e+01	2.110020e+00	2.110020e+00	1.015347e+00	6.840886e-02	6.840886e-02
+2.911501e+01	2.507763e+00	2.507763e+00	4.771861e-01	3.368109e-02	3.368109e-02
+4.235561e+01	1.073283e+01	1.073283e+01	1.242446e-01	9.750337e-03	9.750337e-03
+1.521385e+02	9.905010e+01	9.905010e+01	3.307380e-03	1.247744e-03	1.247744e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d04-x01-y02
+Path=/REF/ATLAS_2017_I1589844/d04-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	9.885554e+01	3.200561e+00	3.200561e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.162535e+02	3.652068e+00	3.652068e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.313626e+02	3.959102e+00	3.959102e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.383518e+02	4.186373e+00	4.186373e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.331527e+02	4.168645e+00	4.168645e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.164478e+02	3.919994e+00	3.919994e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.036059e+01	3.300918e+00	3.300918e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.110676e+01	2.499161e+00	2.499161e+00
+4.356292e+00	3.752204e-01	3.752204e-01	3.596948e+01	1.632962e+00	1.632962e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.816566e+01	9.529880e-01	9.529880e-01
+6.153426e+00	5.300130e-01	5.300130e-01	8.539847e+00	5.009957e-01	5.009957e-01
+7.313361e+00	6.299216e-01	6.299216e-01	3.888558e+00	2.581566e-01	2.581566e-01
+8.691946e+00	7.486632e-01	7.486632e-01	1.786535e+00	1.344000e-01	1.344000e-01
+1.033040e+01	8.897879e-01	8.897879e-01	8.314956e-01	6.952058e-02	6.952058e-02
+1.227770e+01	1.057515e+00	1.057515e+00	4.054816e-01	3.738897e-02	3.738897e-02
+1.459207e+01	1.256859e+00	1.256859e+00	2.128298e-01	2.141584e-02	2.141584e-02
+1.734271e+01	1.493779e+00	1.493779e+00	1.053347e-01	1.161575e-02	1.161575e-02
+2.578528e+01	6.948789e+00	6.948789e+00	2.816600e-02	3.624671e-03	3.624671e-03
+1.052810e+02	7.254694e+01	7.254694e+01	4.449689e-04	2.717053e-04	2.717053e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d04-x01-y04
+Path=/REF/ATLAS_2017_I1589844/d04-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	5.882263e+01	2.292783e+00	2.292783e+00
+1.300520e+00	1.120177e-01	1.120177e-01	6.470283e+01	2.500564e+00	2.500564e+00
+1.545671e+00	1.331332e-01	1.331332e-01	7.250723e+01	2.580587e+00	2.580587e+00
+1.837033e+00	1.582291e-01	1.582291e-01	7.702788e+01	2.377931e+00	2.377931e+00
+2.183318e+00	1.880557e-01	1.880557e-01	8.054703e+01	2.292748e+00	2.292748e+00
+2.594878e+00	2.235046e-01	2.235046e-01	8.048331e+01	2.228106e+00	2.228106e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.567593e+01	2.181178e+00	2.181178e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.775227e+01	2.095443e+00	2.095443e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.645931e+01	1.913337e+00	1.913337e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.313660e+01	1.628139e+00	1.628139e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.935159e+01	1.252820e+00	1.252820e+00
+7.313361e+00	6.299216e-01	6.299216e-01	1.791051e+01	8.553304e-01	8.553304e-01
+8.691946e+00	7.486632e-01	7.486632e-01	9.604666e+00	5.329800e-01	5.329800e-01
+1.033040e+01	8.897879e-01	8.897879e-01	4.453450e+00	2.837638e-01	2.837638e-01
+1.227770e+01	1.057515e+00	1.057515e+00	1.813519e+00	1.315454e-01	1.315454e-01
+1.459207e+01	1.256859e+00	1.256859e+00	6.817703e-01	5.765197e-02	5.765197e-02
+1.734271e+01	1.493779e+00	1.493779e+00	2.490194e-01	2.471691e-02	2.471691e-02
+2.578528e+01	6.948789e+00	6.948789e+00	4.029429e-02	5.628156e-03	5.628156e-03
+1.052810e+02	7.254694e+01	7.254694e+01	5.240726e-04	3.465856e-04	3.465856e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d04-x01-y06
+Path=/REF/ATLAS_2017_I1589844/d04-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	4.435487e+01	3.889083e+00	3.889083e+00
+1.300520e+00	1.120177e-01	1.120177e-01	5.209309e+01	4.855428e+00	4.855428e+00
+1.545671e+00	1.331332e-01	1.331332e-01	6.287368e+01	5.572386e+00	5.572386e+00
+1.837033e+00	1.582291e-01	1.582291e-01	7.545967e+01	6.059383e+00	6.059383e+00
+2.183318e+00	1.880557e-01	1.880557e-01	8.598034e+01	6.488784e+00	6.488784e+00
+2.594878e+00	2.235046e-01	2.235046e-01	9.154772e+01	6.141299e+00	6.141299e+00
+3.084019e+00	2.656357e-01	2.656357e-01	8.997620e+01	5.433714e+00	5.433714e+00
+3.665363e+00	3.157087e-01	3.157087e-01	8.130906e+01	4.501465e+00	4.501465e+00
+4.356292e+00	3.752204e-01	3.752204e-01	6.498983e+01	3.862690e+00	3.862690e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.646111e+01	3.652489e+00	3.652489e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.878732e+01	2.937814e+00	2.937814e+00
+7.313361e+00	6.299216e-01	6.299216e-01	1.569215e+01	1.807114e+00	1.807114e+00
+8.691946e+00	7.486632e-01	7.486632e-01	7.814674e+00	9.384991e-01	9.384991e-01
+1.033040e+01	8.897879e-01	8.897879e-01	3.667297e+00	3.611024e-01	3.611024e-01
+1.227770e+01	1.057515e+00	1.057515e+00	1.739567e+00	1.507552e-01	1.507552e-01
+1.459207e+01	1.256859e+00	1.256859e+00	8.788418e-01	7.414731e-02	7.414731e-02
+1.734271e+01	1.493779e+00	1.493779e+00	4.568760e-01	3.994794e-02	3.994794e-02
+2.578528e+01	6.948789e+00	6.948789e+00	1.258431e-01	1.477115e-02	1.477115e-02
+1.052810e+02	7.254694e+01	7.254694e+01	2.892487e-03	1.477522e-03	1.477522e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d04-x01-y08
+Path=/REF/ATLAS_2017_I1589844/d04-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	2.776041e+01	3.719074e+00	3.719074e+00
+1.300520e+00	1.120177e-01	1.120177e-01	2.870623e+01	4.074104e+00	4.074104e+00
+1.545671e+00	1.331332e-01	1.331332e-01	3.277519e+01	4.122582e+00	4.122582e+00
+1.837033e+00	1.582291e-01	1.582291e-01	3.618779e+01	4.839969e+00	4.839969e+00
+2.183318e+00	1.880557e-01	1.880557e-01	4.078765e+01	4.392209e+00	4.392209e+00
+2.594878e+00	2.235046e-01	2.235046e-01	4.594333e+01	3.956333e+00	3.956333e+00
+3.084019e+00	2.656357e-01	2.656357e-01	5.023071e+01	3.190471e+00	3.190471e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.215694e+01	2.599895e+00	2.599895e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.091776e+01	2.394251e+00	2.394251e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.784093e+01	1.870451e+00	1.870451e+00
+6.153426e+00	5.300130e-01	5.300130e-01	4.174255e+01	1.756402e+00	1.756402e+00
+7.313361e+00	6.299216e-01	6.299216e-01	3.366862e+01	1.808922e+00	1.808922e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.424719e+01	1.453099e+00	1.453099e+00
+1.033040e+01	8.897879e-01	8.897879e-01	1.564452e+01	9.437791e-01	9.437791e-01
+1.227770e+01	1.057515e+00	1.057515e+00	9.107407e+00	5.754803e-01	5.754803e-01
+1.459207e+01	1.256859e+00	1.256859e+00	4.760648e+00	3.105451e-01	3.105451e-01
+1.734271e+01	1.493779e+00	1.493779e+00	2.128365e+00	1.355363e-01	1.355363e-01
+2.578528e+01	6.948789e+00	6.948789e+00	3.678572e-01	2.884769e-02	2.884769e-02
+1.052810e+02	7.254694e+01	7.254694e+01	3.394696e-03	1.648326e-03	1.648326e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d05-x01-y02
+Path=/REF/ATLAS_2017_I1589844/d05-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.282547e+02	4.495419e+00	4.495419e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.441616e+02	4.551329e+00	4.551329e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.554467e+02	4.930296e+00	4.930296e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.518138e+02	4.855627e+00	4.855627e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.381979e+02	4.674796e+00	4.674796e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.120464e+02	4.152741e+00	4.152741e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.927851e+01	3.243676e+00	3.243676e+00
+3.665363e+00	3.157087e-01	3.157087e-01	4.794843e+01	2.249475e+00	2.249475e+00
+4.356292e+00	3.752204e-01	3.752204e-01	2.456896e+01	1.325989e+00	1.325989e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.126478e+01	7.082665e-01	7.082665e-01
+6.153426e+00	5.300130e-01	5.300130e-01	4.576736e+00	3.390739e-01	3.390739e-01
+7.313361e+00	6.299216e-01	6.299216e-01	1.839542e+00	1.599527e-01	1.599527e-01
+8.691946e+00	7.486632e-01	7.486632e-01	7.291075e-01	7.403617e-02	7.403617e-02
+1.033040e+01	8.897879e-01	8.897879e-01	3.266208e-01	3.823044e-02	3.823044e-02
+1.470860e+01	3.488412e+00	3.488412e+00	8.094901e-02	1.213269e-02	1.213269e-02
+4.659321e+01	2.839621e+01	2.839621e+01	1.955645e-03	6.906708e-04	6.906708e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d05-x01-y04
+Path=/REF/ATLAS_2017_I1589844/d05-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	7.784720e+01	3.466123e+00	3.466123e+00
+1.300520e+00	1.120177e-01	1.120177e-01	8.471003e+01	3.403124e+00	3.403124e+00
+1.545671e+00	1.331332e-01	1.331332e-01	9.270208e+01	3.409070e+00	3.409070e+00
+1.837033e+00	1.582291e-01	1.582291e-01	9.361033e+01	2.937067e+00	2.937067e+00
+2.183318e+00	1.880557e-01	1.880557e-01	9.303931e+01	2.684748e+00	2.684748e+00
+2.594878e+00	2.235046e-01	2.235046e-01	8.780759e+01	2.532749e+00	2.532749e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.869744e+01	2.422137e+00	2.422137e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.538040e+01	2.230595e+00	2.230595e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.021120e+01	1.934217e+00	1.934217e+00
+5.177463e+00	4.459503e-01	4.459503e-01	3.455953e+01	1.504869e+00	1.504869e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.137445e+01	1.058821e+00	1.058821e+00
+7.313361e+00	6.299216e-01	6.299216e-01	1.152285e+01	6.473931e-01	6.473931e-01
+8.691946e+00	7.486632e-01	7.486632e-01	5.180351e+00	3.424252e-01	3.424252e-01
+1.033040e+01	8.897879e-01	8.897879e-01	1.953442e+00	1.476519e-01	1.476519e-01
+1.470860e+01	3.488412e+00	3.488412e+00	2.899589e-01	3.034985e-02	3.034985e-02
+4.659321e+01	2.839621e+01	2.839621e+01	2.310976e-03	1.034278e-03	1.034278e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d05-x01-y06
+Path=/REF/ATLAS_2017_I1589844/d05-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	5.975401e+01	4.780191e+00	4.780191e+00
+1.300520e+00	1.120177e-01	1.120177e-01	7.037482e+01	5.031803e+00	5.031803e+00
+1.545671e+00	1.331332e-01	1.331332e-01	8.180272e+01	6.433829e+00	6.433829e+00
+1.837033e+00	1.582291e-01	1.582291e-01	9.500909e+01	6.471448e+00	6.471448e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.031646e+02	6.682150e+00	6.682150e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.037997e+02	5.923222e+00	5.923222e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.493794e+01	5.171054e+00	5.171054e+00
+3.665363e+00	3.157087e-01	3.157087e-01	7.917580e+01	4.403367e+00	4.403367e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.899103e+01	4.399506e+00	4.399506e+00
+5.177463e+00	4.459503e-01	4.459503e-01	3.807908e+01	3.763334e+00	3.763334e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.109440e+01	2.316910e+00	2.316910e+00
+7.313361e+00	6.299216e-01	6.299216e-01	1.046011e+01	1.423077e+00	1.423077e+00
+8.691946e+00	7.486632e-01	7.486632e-01	4.573584e+00	5.710347e-01	5.710347e-01
+1.033040e+01	8.897879e-01	8.897879e-01	1.947476e+00	2.191623e-01	2.191623e-01
+1.470860e+01	3.488412e+00	3.488412e+00	4.517690e-01	4.478067e-02	4.478067e-02
+4.659321e+01	2.839621e+01	2.839621e+01	1.251025e-02	6.122581e-03	6.122581e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d05-x01-y08
+Path=/REF/ATLAS_2017_I1589844/d05-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	4.051657e+01	4.331477e+00	4.331477e+00
+1.300520e+00	1.120177e-01	1.120177e-01	4.214451e+01	4.325586e+00	4.325586e+00
+1.545671e+00	1.331332e-01	1.331332e-01	4.500144e+01	5.369061e+00	5.369061e+00
+1.837033e+00	1.582291e-01	1.582291e-01	4.997332e+01	4.513757e+00	4.513757e+00
+2.183318e+00	1.880557e-01	1.880557e-01	5.386147e+01	4.881501e+00	4.881501e+00
+2.594878e+00	2.235046e-01	2.235046e-01	5.801363e+01	4.263432e+00	4.263432e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.003854e+01	3.248399e+00	3.248399e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.921527e+01	2.602904e+00	2.602904e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.479089e+01	2.198592e+00	2.198592e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.818663e+01	1.861504e+00	1.861504e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.871403e+01	1.744075e+00	1.744075e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.857481e+01	1.653738e+00	1.653738e+00
+8.691946e+00	7.486632e-01	7.486632e-01	1.898611e+01	1.313188e+00	1.313188e+00
+1.033040e+01	8.897879e-01	8.897879e-01	1.114301e+01	8.578990e-01	8.578990e-01
+1.470860e+01	3.488412e+00	3.488412e+00	2.975518e+00	2.320256e-01	2.320256e-01
+4.659321e+01	2.839621e+01	2.839621e+01	3.408777e-02	1.255299e-02	1.255299e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d06-x01-y02
+Path=/REF/ATLAS_2017_I1589844/d06-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.540999e+02	5.400660e+00	5.400660e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.677234e+02	5.670468e+00	5.670468e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.690748e+02	5.730831e+00	5.730831e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.605293e+02	5.573070e+00	5.573070e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.361445e+02	5.074010e+00	5.074010e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.018434e+02	4.222728e+00	4.222728e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.570199e+01	3.055339e+00	3.055339e+00
+3.665363e+00	3.157087e-01	3.157087e-01	3.587913e+01	1.938509e+00	1.938509e+00
+4.356292e+00	3.752204e-01	3.752204e-01	1.653357e+01	1.050642e+00	1.050642e+00
+5.177463e+00	4.459503e-01	4.459503e-01	6.614902e+00	5.066172e-01	5.066172e-01
+6.153426e+00	5.300130e-01	5.300130e-01	2.430457e+00	2.259669e-01	2.259669e-01
+7.313361e+00	6.299216e-01	6.299216e-01	8.518671e-01	9.737783e-02	9.737783e-02
+8.691946e+00	7.486632e-01	7.486632e-01	3.119018e-01	4.348545e-02	4.348545e-02
+1.186477e+01	2.424165e+00	2.424165e+00	7.097755e-02	1.314645e-02	1.314645e-02
+3.368869e+01	1.939975e+01	1.939975e+01	1.964470e-03	6.198766e-04	6.198766e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d06-x01-y04
+Path=/REF/ATLAS_2017_I1589844/d06-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.009206e+02	4.254964e+00	4.254964e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.032097e+02	3.947937e+00	3.947937e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.078605e+02	3.754433e+00	3.754433e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.062566e+02	3.310802e+00	3.310802e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.003631e+02	3.032044e+00	3.032044e+00
+2.594878e+00	2.235046e-01	2.235046e-01	9.012799e+01	2.828788e+00	2.828788e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.600011e+01	2.605077e+00	2.605077e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.914099e+01	2.295534e+00	2.295534e+00
+4.356292e+00	3.752204e-01	3.752204e-01	4.145433e+01	1.824427e+00	1.824427e+00
+5.177463e+00	4.459503e-01	4.459503e-01	2.622124e+01	1.308172e+00	1.308172e+00
+6.153426e+00	5.300130e-01	5.300130e-01	1.445378e+01	8.218370e-01	8.218370e-01
+7.313361e+00	6.299216e-01	6.299216e-01	6.744587e+00	4.407550e-01	4.407550e-01
+8.691946e+00	7.486632e-01	7.486632e-01	2.587733e+00	2.032481e-01	2.032481e-01
+1.186477e+01	2.424165e+00	2.424165e+00	4.186745e-01	4.068445e-02	4.068445e-02
+3.368869e+01	1.939975e+01	1.939975e+01	3.066196e-03	1.368754e-03	1.368754e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d06-x01-y06
+Path=/REF/ATLAS_2017_I1589844/d06-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	7.816942e+01	4.681306e+00	4.681306e+00
+1.300520e+00	1.120177e-01	1.120177e-01	8.802211e+01	5.394644e+00	5.394644e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.004145e+02	6.234345e+00	6.234345e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.107356e+02	7.174199e+00	7.174199e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.148094e+02	7.515589e+00	7.515589e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.101778e+02	6.107253e+00	6.107253e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.611545e+01	5.241688e+00	5.241688e+00
+3.665363e+00	3.157087e-01	3.157087e-01	7.413204e+01	4.937210e+00	4.937210e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.036667e+01	4.280500e+00	4.280500e+00
+5.177463e+00	4.459503e-01	4.459503e-01	2.983214e+01	3.363562e+00	3.363562e+00
+6.153426e+00	5.300130e-01	5.300130e-01	1.521581e+01	2.055670e+00	2.055670e+00
+7.313361e+00	6.299216e-01	6.299216e-01	6.684109e+00	9.724895e-01	9.724895e-01
+8.691946e+00	7.486632e-01	7.486632e-01	2.668123e+00	3.914825e-01	3.914825e-01
+1.186477e+01	2.424165e+00	2.424165e+00	5.785726e-01	7.952577e-02	7.952577e-02
+3.368869e+01	1.939975e+01	1.939975e+01	1.434853e-02	7.286712e-03	7.286712e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d06-x01-y08
+Path=/REF/ATLAS_2017_I1589844/d06-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	5.597449e+01	4.659709e+00	4.659709e+00
+1.300520e+00	1.120177e-01	1.120177e-01	5.513408e+01	4.570877e+00	4.570877e+00
+1.545671e+00	1.331332e-01	1.331332e-01	5.921102e+01	5.020556e+00	5.020556e+00
+1.837033e+00	1.582291e-01	1.582291e-01	6.188141e+01	5.372021e+00	5.372021e+00
+2.183318e+00	1.880557e-01	1.880557e-01	6.551176e+01	5.034736e+00	5.034736e+00
+2.594878e+00	2.235046e-01	2.235046e-01	6.821726e+01	3.726074e+00	3.726074e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.693019e+01	3.234644e+00	3.234644e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.262234e+01	2.609289e+00	2.609289e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.523497e+01	2.096434e+00	2.096434e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.544519e+01	1.784346e+00	1.784346e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.403018e+01	1.687228e+00	1.687228e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.316325e+01	1.624974e+00	1.624974e+00
+8.691946e+00	7.486632e-01	7.486632e-01	1.391094e+01	9.959515e-01	9.959515e-01
+1.186477e+01	2.424165e+00	2.424165e+00	4.480744e+00	4.266110e-01	4.266110e-01
+3.368869e+01	1.939975e+01	1.939975e+01	7.725229e-02	1.697997e-02	1.697997e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d07-x01-y02
+Path=/REF/ATLAS_2017_I1589844/d07-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.759343e+02	6.050447e+00	6.050447e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.856361e+02	6.512081e+00	6.512081e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.788584e+02	6.292412e+00	6.292412e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.616639e+02	5.925943e+00	5.925943e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.290415e+02	5.183279e+00	5.183279e+00
+2.594878e+00	2.235046e-01	2.235046e-01	8.870707e+01	4.022019e+00	4.022019e+00
+3.084019e+00	2.656357e-01	2.656357e-01	5.233816e+01	2.698511e+00	2.698511e+00
+3.665363e+00	3.157087e-01	3.157087e-01	2.616244e+01	1.595399e+00	1.595399e+00
+4.356292e+00	3.752204e-01	3.752204e-01	1.072125e+01	7.762603e-01	7.762603e-01
+5.177463e+00	4.459503e-01	4.459503e-01	3.849885e+00	3.389971e-01	3.389971e-01
+6.153426e+00	5.300130e-01	5.300130e-01	1.257925e+00	1.358748e-01	1.358748e-01
+7.313361e+00	6.299216e-01	6.299216e-01	3.856912e-01	5.506100e-02	5.506100e-02
+9.982963e+00	2.039681e+00	2.039681e+00	6.705059e-02	1.281328e-02	1.281328e-02
+2.834550e+01	1.632286e+01	1.632286e+01	1.682703e-03	5.397319e-04	5.397319e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d07-x01-y04
+Path=/REF/ATLAS_2017_I1589844/d07-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.210685e+02	5.135350e+00	5.135350e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.196375e+02	4.702298e+00	4.702298e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.202971e+02	4.314884e+00	4.314884e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.146208e+02	3.834870e+00	3.834870e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.032945e+02	3.398660e+00	3.398660e+00
+2.594878e+00	2.235046e-01	2.235046e-01	8.755621e+01	3.053600e+00	3.053600e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.988633e+01	2.722166e+00	2.722166e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.045044e+01	2.194913e+00	2.194913e+00
+4.356292e+00	3.752204e-01	3.752204e-01	3.271330e+01	1.603923e+00	1.603923e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.877447e+01	1.050099e+00	1.050099e+00
+6.153426e+00	5.300130e-01	5.300130e-01	9.067463e+00	5.761428e-01	5.761428e-01
+7.313361e+00	6.299216e-01	6.299216e-01	3.727551e+00	2.805504e-01	2.805504e-01
+9.982963e+00	2.039681e+00	2.039681e+00	6.028162e-01	5.882826e-02	5.882826e-02
+2.834550e+01	1.632286e+01	1.632286e+01	3.291324e-03	1.615346e-03	1.615346e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d07-x01-y06
+Path=/REF/ATLAS_2017_I1589844/d07-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	9.608449e+01	4.827833e+00	4.827833e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.064805e+02	5.299096e+00	5.299096e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.159591e+02	6.139813e+00	6.139813e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.229112e+02	7.364774e+00	7.364774e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.235612e+02	6.966558e+00	6.966558e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.132774e+02	5.660920e+00	5.660920e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.334269e+01	5.344903e+00	5.344903e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.603497e+01	4.576720e+00	4.576720e+00
+4.356292e+00	3.752204e-01	3.752204e-01	4.177559e+01	3.924106e+00	3.924106e+00
+5.177463e+00	4.459503e-01	4.459503e-01	2.293339e+01	2.831035e+00	2.831035e+00
+6.153426e+00	5.300130e-01	5.300130e-01	1.064159e+01	1.489597e+00	1.489597e+00
+7.313361e+00	6.299216e-01	6.299216e-01	4.176034e+00	6.002895e-01	6.002895e-01
+9.982963e+00	2.039681e+00	2.039681e+00	8.215343e-01	1.300944e-01	1.300944e-01
+2.834550e+01	1.632286e+01	1.632286e+01	1.280799e-02	7.200643e-03	7.200643e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d07-x01-y08
+Path=/REF/ATLAS_2017_I1589844/d07-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	6.977532e+01	5.070344e+00	5.070344e+00
+1.300520e+00	1.120177e-01	1.120177e-01	7.012209e+01	4.888153e+00	4.888153e+00
+1.545671e+00	1.331332e-01	1.331332e-01	7.257325e+01	5.193705e+00	5.193705e+00
+1.837033e+00	1.582291e-01	1.582291e-01	7.280953e+01	6.350874e+00	6.350874e+00
+2.183318e+00	1.880557e-01	1.880557e-01	7.581119e+01	4.934556e+00	4.934556e+00
+2.594878e+00	2.235046e-01	2.235046e-01	7.507146e+01	4.540748e+00	4.540748e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.151584e+01	3.430829e+00	3.430829e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.352803e+01	2.650984e+00	2.650984e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.274429e+01	2.111299e+00	2.111299e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.103944e+01	1.991946e+00	1.991946e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.842839e+01	1.581016e+00	1.581016e+00
+7.313361e+00	6.299216e-01	6.299216e-01	1.791404e+01	1.291442e+00	1.291442e+00
+9.982963e+00	2.039681e+00	2.039681e+00	6.064214e+00	5.879142e-01	5.879142e-01
+2.834550e+01	1.632286e+01	1.632286e+01	1.141068e-01	2.082417e-02	2.082417e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d08-x01-y02
+Path=/REF/ATLAS_2017_I1589844/d08-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.978115e+02	6.660942e+00	6.660942e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.991621e+02	7.098890e+00	7.098890e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.843633e+02	6.639094e+00	6.639094e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.558113e+02	6.127222e+00	6.127222e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.178095e+02	5.225446e+00	5.225446e+00
+2.594878e+00	2.235046e-01	2.235046e-01	7.589992e+01	3.803267e+00	3.803267e+00
+3.084019e+00	2.656357e-01	2.656357e-01	4.153019e+01	2.421911e+00	2.421911e+00
+3.665363e+00	3.157087e-01	3.157087e-01	1.850972e+01	1.257970e+00	1.257970e+00
+4.356292e+00	3.752204e-01	3.752204e-01	6.719661e+00	5.417020e-01	5.417020e-01
+5.177463e+00	4.459503e-01	4.459503e-01	2.144778e+00	2.102337e-01	2.102337e-01
+7.067397e+00	1.443984e+00	1.443984e+00	3.049476e-01	4.520666e-02	4.520666e-02
+2.006708e+01	1.155570e+01	1.155570e+01	3.726200e-03	1.772634e-03	1.772634e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d08-x01-y04
+Path=/REF/ATLAS_2017_I1589844/d08-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.368852e+02	9.996343e+00	9.996343e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.328523e+02	9.398905e+00	9.398905e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.295284e+02	4.906095e+00	4.906095e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.185704e+02	4.185466e+00	4.185466e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.019678e+02	3.637688e+00	3.637688e+00
+2.594878e+00	2.235046e-01	2.235046e-01	8.251027e+01	3.222399e+00	3.222399e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.116879e+01	2.675631e+00	2.675631e+00
+3.665363e+00	3.157087e-01	3.157087e-01	4.100568e+01	2.033729e+00	2.033729e+00
+4.356292e+00	3.752204e-01	3.752204e-01	2.443362e+01	1.367747e+00	1.367747e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.289250e+01	8.075437e-01	8.075437e-01
+7.067397e+00	1.443984e+00	1.443984e+00	2.981475e+00	2.342487e-01	2.342487e-01
+2.006708e+01	1.155570e+01	1.155570e+01	2.753442e-02	7.523117e-03	7.523117e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d08-x01-y06
+Path=/REF/ATLAS_2017_I1589844/d08-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.152471e+02	6.177147e+00	6.177147e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.224623e+02	5.160137e+00	5.160137e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.295730e+02	6.490904e+00	6.490904e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.342186e+02	6.852017e+00	6.852017e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.286992e+02	6.509619e+00	6.509619e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.121986e+02	5.204103e+00	5.204103e+00
+3.084019e+00	2.656357e-01	2.656357e-01	8.570830e+01	4.833779e+00	4.833779e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.835079e+01	4.602612e+00	4.602612e+00
+4.356292e+00	3.752204e-01	3.752204e-01	3.471582e+01	3.676361e+00	3.676361e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.736571e+01	2.307098e+00	2.307098e+00
+7.067397e+00	1.443984e+00	1.443984e+00	4.033761e+00	6.721175e-01	6.721175e-01
+2.006708e+01	1.155570e+01	1.155570e+01	4.859065e-02	2.435393e-02	2.435393e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844/d08-x01-y08
+Path=/REF/ATLAS_2017_I1589844/d08-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	8.475220e+01	5.902977e+00	5.902977e+00
+1.300520e+00	1.120177e-01	1.120177e-01	8.444817e+01	5.649440e+00	5.649440e+00
+1.545671e+00	1.331332e-01	1.331332e-01	8.394995e+01	6.247410e+00	6.247410e+00
+1.837033e+00	1.582291e-01	1.582291e-01	8.274077e+01	6.867471e+00	6.867471e+00
+2.183318e+00	1.880557e-01	1.880557e-01	8.339998e+01	5.445627e+00	5.445627e+00
+2.594878e+00	2.235046e-01	2.235046e-01	7.988968e+01	5.028314e+00	5.028314e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.378467e+01	3.120918e+00	3.120918e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.239436e+01	2.439881e+00	2.439881e+00
+4.356292e+00	3.752204e-01	3.752204e-01	4.887237e+01	1.989183e+00	1.989183e+00
+5.177463e+00	4.459503e-01	4.459503e-01	3.490555e+01	1.748288e+00	1.748288e+00
+7.067397e+00	1.443984e+00	1.443984e+00	1.571370e+01	1.195915e+00	1.195915e+00
+2.006708e+01	1.155570e+01	1.155570e+01	5.534319e-01	8.594294e-02	8.594294e-02
+END YODA_SCATTER2D
+
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1589844_EL.info b/analyses/pluginATLAS/ATLAS_2017_I1589844_EL.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1589844_EL.info
@@ -0,0 +1,46 @@
+Name: ATLAS_2017_I1589844_EL
+Year: 2017
+Summary: $k_T$ splittings in $Z$ events at 8 TeV, electron mode
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1589844
+Status: VALIDATED
+Authors:
+ - Christian Gutschow <chris.g@cern.ch>
+ - Frank Siegert <frank.siegert@cern.ch>
+References:
+ - arXiv:1704.01530 [hep-ex]
+ - submitted to JHEP
+Keywords:
+ - KTSPLITTINGS
+ - QCD
+ - Z
+ - JETS
+ - TRACKS
+RunInfo:
+  '$pp \to Z(\to ee/\mu\mu) +$ jets at 8 TeV'
+Luminosity_fb: 20.2
+Beams: [p+, p+]
+Energies: [8000]
+PtCuts: [25, 25, 0.4]
+Description:
+  'A measurement of the splitting scales occuring in the $k_\text{t}$ jet-clustering algorithm is presented for final states containing
+  a $Z$ boson. The measurement is done using 20.2 fb$^{-1}$ of proton-proton collision data collected at a centre-of-mass energy of
+  $\sqrt{s} = 8$ TeV by the ATLAS experiment at the LHC in 2012. The measurement is based on charged-particle track information,
+  which is measured with excellent precision in the $p_\text{T}$ region relevant for the transition between the perturbative and the
+  non-perturbative regimes. The data distributions are corrected for detector effects, and are found to deviate from
+  state-of-the-art predictions in various regions of the observables.'
+BibKey: Aaboud:2017hox
+BibTeX: '@article{Aaboud:2017hox,
+      author         = "Aaboud, Morad and others",
+      title          = "{Measurement of the $k_\mathrm{t}$ splitting scales in $Z
+                        \to \ell\ell$ events in $pp$ collisions at $\sqrt{s} = 8$
+                        TeV with the ATLAS detector}",
+      collaboration  = "ATLAS",
+      year           = "2017",
+      eprint         = "1704.01530",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2017-033",
+      SLACcitation   = "%%CITATION = ARXIV:1704.01530;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1589844_EL.plot b/analyses/pluginATLAS/ATLAS_2017_I1589844_EL.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1589844_EL.plot
@@ -0,0 +1,63 @@
+# BEGIN PLOT /ATLAS_2017_I1589844_EL/d..
+Title=$Z \rightarrow e^+e^-$, $R=0.4$, charged particles only
+LogY=1
+LogX=1
+XTwosidedTicks=1
+YTwosidedTicks=1
+#LeftMargin=1.5
+LegendXPos=0.95
+LegendAlign=r
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_EL/d..-x01-y04
+Title=$Z \rightarrow e^+e^-$, $R=1.0$, charged particles only
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_EL/d..-x01-y06
+Title=$Z \rightarrow e^+e^-$, $R=0.4$, charged and neutral particles
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_EL/d..-x01-y08
+Title=$Z \rightarrow e^+e^-$, $R=1.0$, charged and neutral particles
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_EL/d01
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_0}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_0}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_EL/d02
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_1}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_1}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_EL/d03
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_2}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_2}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_EL/d04
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_3}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_3}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_EL/d05
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_4}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_4}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_EL/d06
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_5}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_5}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_EL/d07
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_6}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_6}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_EL/d08
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_7}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_7}$ [GeV]
+# END PLOT
+
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1589844_EL.yoda b/analyses/pluginATLAS/ATLAS_2017_I1589844_EL.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1589844_EL.yoda
@@ -0,0 +1,848 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d01-x01-y02
+Path=/REF/ATLAS_2017_I1589844_EL/d01-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.843191e+01	7.457050e-01	7.457050e-01
+1.300520e+00	1.120177e-01	1.120177e-01	2.441937e+01	8.251125e-01	8.251125e-01
+1.545671e+00	1.331332e-01	1.331332e-01	3.066112e+01	1.114318e+00	1.114318e+00
+1.837033e+00	1.582291e-01	1.582291e-01	4.064066e+01	1.394752e+00	1.394752e+00
+2.183318e+00	1.880557e-01	1.880557e-01	4.727946e+01	1.525491e+00	1.525491e+00
+2.594878e+00	2.235046e-01	2.235046e-01	5.446314e+01	1.778923e+00	1.778923e+00
+3.084019e+00	2.656357e-01	2.656357e-01	5.806647e+01	1.920201e+00	1.920201e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.538682e+01	1.723712e+00	1.723712e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.033783e+01	1.566466e+00	1.566466e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.086573e+01	1.290886e+00	1.290886e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.126881e+01	9.824325e-01	9.824325e-01
+7.313361e+00	6.299216e-01	6.299216e-01	2.267270e+01	7.502458e-01	7.502458e-01
+8.691946e+00	7.486632e-01	7.486632e-01	1.607494e+01	5.400483e-01	5.400483e-01
+1.033040e+01	8.897879e-01	8.897879e-01	1.169971e+01	4.021634e-01	4.021634e-01
+1.227770e+01	1.057515e+00	1.057515e+00	8.472988e+00	2.986058e-01	2.986058e-01
+1.459207e+01	1.256859e+00	1.256859e+00	5.892089e+00	2.098366e-01	2.098366e-01
+1.734271e+01	1.493779e+00	1.493779e+00	4.366320e+00	1.600385e-01	1.600385e-01
+2.061185e+01	1.775360e+00	1.775360e+00	3.112279e+00	1.174748e-01	1.174748e-01
+2.449723e+01	2.110020e+00	2.110020e+00	2.240750e+00	8.717211e-02	8.717211e-02
+2.911501e+01	2.507763e+00	2.507763e+00	1.534069e+00	6.318952e-02	6.318952e-02
+3.460326e+01	2.980482e+00	2.980482e+00	1.030531e+00	4.402922e-02	4.402922e-02
+4.112605e+01	3.542309e+00	3.542309e+00	6.834079e-01	2.963892e-02	2.963892e-02
+4.887840e+01	4.210043e+00	4.210043e+00	4.320688e-01	1.918555e-02	1.918555e-02
+5.809209e+01	5.003645e+00	5.003645e+00	2.666526e-01	1.245923e-02	1.245923e-02
+6.904258e+01	5.946843e+00	5.946843e+00	1.671143e-01	8.250283e-03	8.250283e-03
+8.205726e+01	7.067836e+00	7.067836e+00	9.339255e-02	4.677413e-03	4.677413e-03
+9.752523e+01	8.400139e+00	8.400139e+00	5.411575e-02	2.824555e-03	2.824555e-03
+1.159090e+02	9.983584e+00	9.983584e+00	2.782189e-02	1.487392e-03	1.487392e-03
+1.377581e+02	1.186551e+01	1.186551e+01	1.514939e-02	8.451217e-04	8.451217e-04
+1.961423e+02	4.651872e+01	4.651872e+01	4.275534e-03	2.531246e-04	2.531246e-04
+6.213305e+02	3.786695e+02	3.786695e+02	8.432581e-05	9.408547e-06	9.408547e-06
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d01-x01-y04
+Path=/REF/ATLAS_2017_I1589844_EL/d01-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	8.131834e+00	4.490677e-01	4.490677e-01
+1.300520e+00	1.120177e-01	1.120177e-01	1.009730e+01	4.073897e-01	4.073897e-01
+1.545671e+00	1.331332e-01	1.331332e-01	1.143915e+01	5.885724e-01	5.885724e-01
+1.837033e+00	1.582291e-01	1.582291e-01	1.466143e+01	5.944605e-01	5.944605e-01
+2.183318e+00	1.880557e-01	1.880557e-01	1.782742e+01	6.701411e-01	6.701411e-01
+2.594878e+00	2.235046e-01	2.235046e-01	2.082979e+01	7.277524e-01	7.277524e-01
+3.084019e+00	2.656357e-01	2.656357e-01	2.538012e+01	9.136748e-01	9.136748e-01
+3.665363e+00	3.157087e-01	3.157087e-01	2.791683e+01	9.391386e-01	9.391386e-01
+4.356292e+00	3.752204e-01	3.752204e-01	3.061612e+01	9.748082e-01	9.748082e-01
+5.177463e+00	4.459503e-01	4.459503e-01	3.145211e+01	9.928744e-01	9.928744e-01
+6.153426e+00	5.300130e-01	5.300130e-01	3.162385e+01	9.857417e-01	9.857417e-01
+7.313361e+00	6.299216e-01	6.299216e-01	2.929418e+01	9.115539e-01	9.115539e-01
+8.691946e+00	7.486632e-01	7.486632e-01	2.545845e+01	8.282911e-01	8.282911e-01
+1.033040e+01	8.897879e-01	8.897879e-01	2.103254e+01	6.742779e-01	6.742779e-01
+1.227770e+01	1.057515e+00	1.057515e+00	1.604205e+01	5.290447e-01	5.290447e-01
+1.459207e+01	1.256859e+00	1.256859e+00	1.130196e+01	3.864420e-01	3.864420e-01
+1.734271e+01	1.493779e+00	1.493779e+00	7.816633e+00	2.789999e-01	2.789999e-01
+2.061185e+01	1.775360e+00	1.775360e+00	5.245804e+00	1.959936e-01	1.959936e-01
+2.449723e+01	2.110020e+00	2.110020e+00	3.466486e+00	1.362328e-01	1.362328e-01
+2.911501e+01	2.507763e+00	2.507763e+00	2.335649e+00	9.715040e-02	9.715040e-02
+3.460326e+01	2.980482e+00	2.980482e+00	1.476691e+00	6.452457e-02	6.452457e-02
+4.112605e+01	3.542309e+00	3.542309e+00	9.501897e-01	4.261565e-02	4.261565e-02
+4.887840e+01	4.210043e+00	4.210043e+00	5.877472e-01	2.727143e-02	2.727143e-02
+5.809209e+01	5.003645e+00	5.003645e+00	3.522312e-01	1.736717e-02	1.736717e-02
+6.904258e+01	5.946843e+00	5.946843e+00	2.218414e-01	1.140433e-02	1.140433e-02
+8.205726e+01	7.067836e+00	7.067836e+00	1.251722e-01	6.452849e-03	6.452849e-03
+9.752523e+01	8.400139e+00	8.400139e+00	6.951626e-02	3.670086e-03	3.670086e-03
+1.159090e+02	9.983584e+00	9.983584e+00	3.751489e-02	2.146711e-03	2.146711e-03
+1.377581e+02	1.186551e+01	1.186551e+01	2.007446e-02	1.180381e-03	1.180381e-03
+1.961423e+02	4.651872e+01	4.651872e+01	5.355213e-03	3.426689e-04	3.426689e-04
+6.213305e+02	3.786695e+02	3.786695e+02	1.064601e-04	1.463478e-05	1.463478e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d01-x01-y06
+Path=/REF/ATLAS_2017_I1589844_EL/d01-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	5.026395e+00	1.138510e+00	1.138510e+00
+1.300520e+00	1.120177e-01	1.120177e-01	7.064791e+00	1.377203e+00	1.377203e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.011198e+01	1.772341e+00	1.772341e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.493136e+01	2.131044e+00	2.131044e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.935026e+01	2.498820e+00	2.498820e+00
+2.594878e+00	2.235046e-01	2.235046e-01	2.554289e+01	2.917353e+00	2.917353e+00
+3.084019e+00	2.656357e-01	2.656357e-01	3.185762e+01	3.495927e+00	3.495927e+00
+3.665363e+00	3.157087e-01	3.157087e-01	3.680790e+01	3.417445e+00	3.417445e+00
+4.356292e+00	3.752204e-01	3.752204e-01	3.925983e+01	3.263206e+00	3.263206e+00
+5.177463e+00	4.459503e-01	4.459503e-01	3.806103e+01	2.585990e+00	2.585990e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.437418e+01	2.532062e+00	2.532062e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.832551e+01	2.932608e+00	2.932608e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.125015e+01	2.458701e+00	2.458701e+00
+1.033040e+01	8.897879e-01	8.897879e-01	1.569831e+01	1.772818e+00	1.772818e+00
+1.227770e+01	1.057515e+00	1.057515e+00	1.146950e+01	1.057360e+00	1.057360e+00
+1.459207e+01	1.256859e+00	1.256859e+00	8.173606e+00	3.808644e-01	3.808644e-01
+1.734271e+01	1.493779e+00	1.493779e+00	6.084104e+00	3.673885e-01	3.673885e-01
+2.061185e+01	1.775360e+00	1.775360e+00	4.559399e+00	3.934733e-01	3.934733e-01
+2.449723e+01	2.110020e+00	2.110020e+00	3.438216e+00	3.291714e-01	3.291714e-01
+2.911501e+01	2.507763e+00	2.507763e+00	2.590863e+00	2.375422e-01	2.375422e-01
+3.460326e+01	2.980482e+00	2.980482e+00	1.894800e+00	1.602624e-01	1.602624e-01
+4.112605e+01	3.542309e+00	3.542309e+00	1.341776e+00	1.010453e-01	1.010453e-01
+4.887840e+01	4.210043e+00	4.210043e+00	9.108951e-01	6.451331e-02	6.451331e-02
+5.809209e+01	5.003645e+00	5.003645e+00	5.936520e-01	3.993185e-02	3.993185e-02
+6.904258e+01	5.946843e+00	5.946843e+00	3.875928e-01	2.014963e-02	2.014963e-02
+8.205726e+01	7.067836e+00	7.067836e+00	2.416991e-01	1.231090e-02	1.231090e-02
+9.752523e+01	8.400139e+00	8.400139e+00	1.484650e-01	7.958954e-03	7.958954e-03
+1.159090e+02	9.983584e+00	9.983584e+00	8.610534e-02	4.620871e-03	4.620871e-03
+1.377581e+02	1.186551e+01	1.186551e+01	4.948377e-02	2.979784e-03	2.979784e-03
+1.961423e+02	4.651872e+01	4.651872e+01	1.515177e-02	1.007609e-03	1.007609e-03
+6.213305e+02	3.786695e+02	3.786695e+02	4.511159e-04	4.895730e-05	4.895730e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d01-x01-y08
+Path=/REF/ATLAS_2017_I1589844_EL/d01-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	2.140524e+00	8.120082e-01	8.120082e-01
+1.300520e+00	1.120177e-01	1.120177e-01	2.642372e+00	6.443953e-01	6.443953e-01
+1.545671e+00	1.331332e-01	1.331332e-01	3.240243e+00	7.587629e-01	7.587629e-01
+1.837033e+00	1.582291e-01	1.582291e-01	4.493157e+00	8.792785e-01	8.792785e-01
+2.183318e+00	1.880557e-01	1.880557e-01	5.409410e+00	9.191437e-01	9.191437e-01
+2.594878e+00	2.235046e-01	2.235046e-01	7.443397e+00	1.129511e+00	1.129511e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.015570e+00	1.172671e+00	1.172671e+00
+3.665363e+00	3.157087e-01	3.157087e-01	1.216738e+01	1.351261e+00	1.351261e+00
+4.356292e+00	3.752204e-01	3.752204e-01	1.514874e+01	1.504543e+00	1.504543e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.744598e+01	1.412676e+00	1.412676e+00
+6.153426e+00	5.300130e-01	5.300130e-01	1.977819e+01	1.471023e+00	1.471023e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.103805e+01	1.324354e+00	1.324354e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.107483e+01	1.223237e+00	1.223237e+00
+1.033040e+01	8.897879e-01	8.897879e-01	1.997679e+01	1.067052e+00	1.067052e+00
+1.227770e+01	1.057515e+00	1.057515e+00	1.762803e+01	8.065027e-01	8.065027e-01
+1.459207e+01	1.256859e+00	1.256859e+00	1.481611e+01	7.324409e-01	7.324409e-01
+1.734271e+01	1.493779e+00	1.493779e+00	1.153820e+01	4.853849e-01	4.853849e-01
+2.061185e+01	1.775360e+00	1.775360e+00	8.572226e+00	3.224268e-01	3.224268e-01
+2.449723e+01	2.110020e+00	2.110020e+00	6.043360e+00	2.697194e-01	2.697194e-01
+2.911501e+01	2.507763e+00	2.507763e+00	4.264073e+00	2.256532e-01	2.256532e-01
+3.460326e+01	2.980482e+00	2.980482e+00	2.947890e+00	1.660653e-01	1.660653e-01
+4.112605e+01	3.542309e+00	3.542309e+00	1.996719e+00	1.218428e-01	1.218428e-01
+4.887840e+01	4.210043e+00	4.210043e+00	1.334860e+00	7.509910e-02	7.509910e-02
+5.809209e+01	5.003645e+00	5.003645e+00	8.462506e-01	5.007346e-02	5.007346e-02
+6.904258e+01	5.946843e+00	5.946843e+00	5.250550e-01	3.429120e-02	3.429120e-02
+8.205726e+01	7.067836e+00	7.067836e+00	3.261205e-01	1.745130e-02	1.745130e-02
+9.752523e+01	8.400139e+00	8.400139e+00	1.990265e-01	1.079316e-02	1.079316e-02
+1.159090e+02	9.983584e+00	9.983584e+00	1.165856e-01	6.555164e-03	6.555164e-03
+1.377581e+02	1.186551e+01	1.186551e+01	6.653251e-02	4.147569e-03	4.147569e-03
+1.961423e+02	4.651872e+01	4.651872e+01	2.095795e-02	1.430811e-03	1.430811e-03
+6.213305e+02	3.786695e+02	3.786695e+02	5.946527e-04	6.802584e-05	6.802584e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d02-x01-y02
+Path=/REF/ATLAS_2017_I1589844_EL/d02-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	4.251658e+01	1.566065e+00	1.566065e+00
+1.300520e+00	1.120177e-01	1.120177e-01	5.347048e+01	1.698262e+00	1.698262e+00
+1.545671e+00	1.331332e-01	1.331332e-01	6.865451e+01	2.399943e+00	2.399943e+00
+1.837033e+00	1.582291e-01	1.582291e-01	7.857296e+01	2.556877e+00	2.556877e+00
+2.183318e+00	1.880557e-01	1.880557e-01	8.720231e+01	2.750437e+00	2.750437e+00
+2.594878e+00	2.235046e-01	2.235046e-01	9.337012e+01	3.065478e+00	3.065478e+00
+3.084019e+00	2.656357e-01	2.656357e-01	8.859543e+01	2.897633e+00	2.897633e+00
+3.665363e+00	3.157087e-01	3.157087e-01	7.455953e+01	2.508455e+00	2.508455e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.829047e+01	1.991888e+00	1.991888e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.022941e+01	1.440183e+00	1.440183e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.504355e+01	9.844996e-01	9.844996e-01
+7.313361e+00	6.299216e-01	6.299216e-01	1.507121e+01	6.011462e-01	6.011462e-01
+8.691946e+00	7.486632e-01	7.486632e-01	8.787865e+00	3.656542e-01	3.656542e-01
+1.033040e+01	8.897879e-01	8.897879e-01	5.257721e+00	2.323279e-01	2.323279e-01
+1.227770e+01	1.057515e+00	1.057515e+00	3.288535e+00	1.580652e-01	1.580652e-01
+1.459207e+01	1.256859e+00	1.256859e+00	2.042152e+00	1.013971e-01	1.013971e-01
+1.734271e+01	1.493779e+00	1.493779e+00	1.274409e+00	6.704191e-02	6.704191e-02
+2.061185e+01	1.775360e+00	1.775360e+00	8.054232e-01	4.494587e-02	4.494587e-02
+2.449723e+01	2.110020e+00	2.110020e+00	4.916852e-01	2.996955e-02	2.996955e-02
+2.911501e+01	2.507763e+00	2.507763e+00	3.015235e-01	1.926580e-02	1.926580e-02
+3.460326e+01	2.980482e+00	2.980482e+00	1.787215e-01	1.213894e-02	1.213894e-02
+4.112605e+01	3.542309e+00	3.542309e+00	1.052898e-01	7.624179e-03	7.624179e-03
+4.887840e+01	4.210043e+00	4.210043e+00	6.465946e-02	5.033112e-03	5.033112e-03
+5.809209e+01	5.003645e+00	5.003645e+00	3.583416e-02	2.904991e-03	2.904991e-03
+6.904258e+01	5.946843e+00	5.946843e+00	1.924695e-02	1.704510e-03	1.704510e-03
+9.830401e+01	2.331459e+01	2.331459e+01	6.161733e-03	6.179331e-04	6.179331e-04
+3.114029e+02	1.897843e+02	1.897843e+02	2.084350e-04	5.042981e-05	5.042981e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d02-x01-y04
+Path=/REF/ATLAS_2017_I1589844_EL/d02-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	2.213549e+01	1.257319e+00	1.257319e+00
+1.300520e+00	1.120177e-01	1.120177e-01	2.578350e+01	9.251823e-01	9.251823e-01
+1.545671e+00	1.331332e-01	1.331332e-01	3.036665e+01	1.294972e+00	1.294972e+00
+1.837033e+00	1.582291e-01	1.582291e-01	3.572293e+01	1.370832e+00	1.370832e+00
+2.183318e+00	1.880557e-01	1.880557e-01	4.079239e+01	1.416067e+00	1.416067e+00
+2.594878e+00	2.235046e-01	2.235046e-01	4.456356e+01	1.315123e+00	1.315123e+00
+3.084019e+00	2.656357e-01	2.656357e-01	4.837683e+01	1.402558e+00	1.402558e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.148847e+01	1.505844e+00	1.505844e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.019930e+01	1.479742e+00	1.479742e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.733873e+01	1.443311e+00	1.443311e+00
+6.153426e+00	5.300130e-01	5.300130e-01	4.073097e+01	1.296580e+00	1.296580e+00
+7.313361e+00	6.299216e-01	6.299216e-01	3.224517e+01	1.087139e+00	1.087139e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.355572e+01	8.613873e-01	8.613873e-01
+1.033040e+01	8.897879e-01	8.897879e-01	1.561065e+01	5.915471e-01	5.915471e-01
+1.227770e+01	1.057515e+00	1.057515e+00	9.550952e+00	3.961028e-01	3.961028e-01
+1.459207e+01	1.256859e+00	1.256859e+00	5.369347e+00	2.376030e-01	2.376030e-01
+1.734271e+01	1.493779e+00	1.493779e+00	2.976504e+00	1.412455e-01	1.412455e-01
+2.061185e+01	1.775360e+00	1.775360e+00	1.628869e+00	8.204071e-02	8.204071e-02
+2.449723e+01	2.110020e+00	2.110020e+00	9.015307e-01	4.915482e-02	4.915482e-02
+2.911501e+01	2.507763e+00	2.507763e+00	4.935663e-01	2.931522e-02	2.931522e-02
+3.460326e+01	2.980482e+00	2.980482e+00	2.769087e-01	1.751636e-02	1.751636e-02
+4.112605e+01	3.542309e+00	3.542309e+00	1.599571e-01	1.084167e-02	1.084167e-02
+4.887840e+01	4.210043e+00	4.210043e+00	9.306745e-02	6.805731e-03	6.805731e-03
+5.809209e+01	5.003645e+00	5.003645e+00	5.227408e-02	4.043149e-03	4.043149e-03
+6.904258e+01	5.946843e+00	5.946843e+00	2.779982e-02	2.358778e-03	2.358778e-03
+9.830401e+01	2.331459e+01	2.331459e+01	8.619561e-03	8.318715e-04	8.318715e-04
+3.114029e+02	1.897843e+02	1.897843e+02	2.994644e-04	5.719088e-05	5.719088e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d02-x01-y06
+Path=/REF/ATLAS_2017_I1589844_EL/d02-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.489763e+01	2.353181e+00	2.353181e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.982360e+01	2.603555e+00	2.603555e+00
+1.545671e+00	1.331332e-01	1.331332e-01	2.587930e+01	3.219879e+00	3.219879e+00
+1.837033e+00	1.582291e-01	1.582291e-01	3.255242e+01	3.668543e+00	3.668543e+00
+2.183318e+00	1.880557e-01	1.880557e-01	4.233328e+01	3.999467e+00	3.999467e+00
+2.594878e+00	2.235046e-01	2.235046e-01	5.087246e+01	4.713882e+00	4.713882e+00
+3.084019e+00	2.656357e-01	2.656357e-01	5.801644e+01	4.864634e+00	4.864634e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.193357e+01	4.588721e+00	4.588721e+00
+4.356292e+00	3.752204e-01	3.752204e-01	6.020458e+01	3.772272e+00	3.772272e+00
+5.177463e+00	4.459503e-01	4.459503e-01	5.336661e+01	3.275211e+00	3.275211e+00
+6.153426e+00	5.300130e-01	5.300130e-01	4.188339e+01	3.227490e+00	3.227490e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.957067e+01	2.899641e+00	2.899641e+00
+8.691946e+00	7.486632e-01	7.486632e-01	1.901814e+01	2.029827e+00	2.029827e+00
+1.033040e+01	8.897879e-01	8.897879e-01	1.152678e+01	9.587638e-01	9.587638e-01
+1.227770e+01	1.057515e+00	1.057515e+00	6.944233e+00	4.382270e-01	4.382270e-01
+1.459207e+01	1.256859e+00	1.256859e+00	4.231061e+00	2.760548e-01	2.760548e-01
+1.734271e+01	1.493779e+00	1.493779e+00	2.727649e+00	2.140536e-01	2.140536e-01
+2.061185e+01	1.775360e+00	1.775360e+00	1.782786e+00	1.685825e-01	1.685825e-01
+2.449723e+01	2.110020e+00	2.110020e+00	1.175197e+00	1.042250e-01	1.042250e-01
+2.911501e+01	2.507763e+00	2.507763e+00	7.742704e-01	6.094456e-02	6.094456e-02
+3.460326e+01	2.980482e+00	2.980482e+00	5.012703e-01	3.459606e-02	3.459606e-02
+4.112605e+01	3.542309e+00	3.542309e+00	3.078006e-01	1.991102e-02	1.991102e-02
+4.887840e+01	4.210043e+00	4.210043e+00	1.839932e-01	1.264942e-02	1.264942e-02
+5.809209e+01	5.003645e+00	5.003645e+00	1.097354e-01	7.702506e-03	7.702506e-03
+6.904258e+01	5.946843e+00	5.946843e+00	6.628384e-02	4.968150e-03	4.968150e-03
+9.830401e+01	2.331459e+01	2.331459e+01	2.429788e-02	2.096348e-03	2.096348e-03
+3.114029e+02	1.897843e+02	1.897843e+02	1.114871e-03	3.088679e-04	3.088679e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d02-x01-y08
+Path=/REF/ATLAS_2017_I1589844_EL/d02-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	8.049465e+00	1.627731e+00	1.627731e+00
+1.300520e+00	1.120177e-01	1.120177e-01	8.990596e+00	1.624231e+00	1.624231e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.076139e+01	1.909451e+00	1.909451e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.224761e+01	2.313692e+00	2.313692e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.547082e+01	2.384618e+00	2.384618e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.915081e+01	2.414434e+00	2.414434e+00
+3.084019e+00	2.656357e-01	2.656357e-01	2.210513e+01	2.659900e+00	2.659900e+00
+3.665363e+00	3.157087e-01	3.157087e-01	2.681122e+01	2.366631e+00	2.366631e+00
+4.356292e+00	3.752204e-01	3.752204e-01	3.082771e+01	2.181140e+00	2.181140e+00
+5.177463e+00	4.459503e-01	4.459503e-01	3.368383e+01	2.067661e+00	2.067661e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.408435e+01	1.837770e+00	1.837770e+00
+7.313361e+00	6.299216e-01	6.299216e-01	3.238250e+01	1.563845e+00	1.563845e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.943282e+01	1.655684e+00	1.655684e+00
+1.033040e+01	8.897879e-01	8.897879e-01	2.385918e+01	1.174033e+00	1.174033e+00
+1.227770e+01	1.057515e+00	1.057515e+00	1.797710e+01	8.721781e-01	8.721781e-01
+1.459207e+01	1.256859e+00	1.256859e+00	1.253059e+01	5.659160e-01	5.659160e-01
+1.734271e+01	1.493779e+00	1.493779e+00	7.964495e+00	3.510716e-01	3.510716e-01
+2.061185e+01	1.775360e+00	1.775360e+00	4.792676e+00	2.437191e-01	2.437191e-01
+2.449723e+01	2.110020e+00	2.110020e+00	2.751965e+00	1.694596e-01	1.694596e-01
+2.911501e+01	2.507763e+00	2.507763e+00	1.561784e+00	1.081239e-01	1.081239e-01
+3.460326e+01	2.980482e+00	2.980482e+00	9.004670e-01	5.119386e-02	5.119386e-02
+4.112605e+01	3.542309e+00	3.542309e+00	5.182805e-01	2.835630e-02	2.835630e-02
+4.887840e+01	4.210043e+00	4.210043e+00	2.938264e-01	1.749024e-02	1.749024e-02
+5.809209e+01	5.003645e+00	5.003645e+00	1.663662e-01	1.081333e-02	1.081333e-02
+6.904258e+01	5.946843e+00	5.946843e+00	9.636735e-02	6.718521e-03	6.718521e-03
+9.830401e+01	2.331459e+01	2.331459e+01	3.556128e-02	3.074905e-03	3.074905e-03
+3.114029e+02	1.897843e+02	1.897843e+02	1.537270e-03	4.326461e-04	4.326461e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d03-x01-y02
+Path=/REF/ATLAS_2017_I1589844_EL/d03-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	6.913391e+01	2.533522e+00	2.533522e+00
+1.300520e+00	1.120177e-01	1.120177e-01	8.657180e+01	3.283696e+00	3.283696e+00
+1.545671e+00	1.331332e-01	1.331332e-01	9.881895e+01	3.335522e+00	3.335522e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.131585e+02	3.660216e+00	3.660216e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.181065e+02	3.785198e+00	3.785198e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.138350e+02	3.772396e+00	3.772396e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.572317e+01	3.226374e+00	3.226374e+00
+3.665363e+00	3.157087e-01	3.157087e-01	7.176193e+01	2.561989e+00	2.561989e+00
+4.356292e+00	3.752204e-01	3.752204e-01	4.867972e+01	1.868982e+00	1.868982e+00
+5.177463e+00	4.459503e-01	4.459503e-01	2.846156e+01	1.188777e+00	1.188777e+00
+6.153426e+00	5.300130e-01	5.300130e-01	1.549413e+01	6.935612e-01	6.935612e-01
+7.313361e+00	6.299216e-01	6.299216e-01	7.874323e+00	3.838026e-01	3.838026e-01
+8.691946e+00	7.486632e-01	7.486632e-01	4.064096e+00	2.178716e-01	2.178716e-01
+1.033040e+01	8.897879e-01	8.897879e-01	2.139051e+00	1.241570e-01	1.241570e-01
+1.227770e+01	1.057515e+00	1.057515e+00	1.134773e+00	7.093575e-02	7.093575e-02
+1.459207e+01	1.256859e+00	1.256859e+00	6.540028e-01	4.373642e-02	4.373642e-02
+1.734271e+01	1.493779e+00	1.493779e+00	3.781698e-01	2.689145e-02	2.689145e-02
+2.061185e+01	1.775360e+00	1.775360e+00	2.121876e-01	1.593806e-02	1.593806e-02
+2.449723e+01	2.110020e+00	2.110020e+00	1.083296e-01	9.433377e-03	9.433377e-03
+2.911501e+01	2.507763e+00	2.507763e+00	6.069497e-02	5.303741e-03	5.303741e-03
+4.235561e+01	1.073283e+01	1.073283e+01	1.964958e-02	1.895753e-03	1.895753e-03
+1.521385e+02	9.905010e+01	9.905010e+01	4.600536e-04	9.522037e-05	9.522037e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d03-x01-y04
+Path=/REF/ATLAS_2017_I1589844_EL/d03-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	3.825805e+01	2.132329e+00	2.132329e+00
+1.300520e+00	1.120177e-01	1.120177e-01	4.456967e+01	1.874852e+00	1.874852e+00
+1.545671e+00	1.331332e-01	1.331332e-01	5.186146e+01	2.073565e+00	2.073565e+00
+1.837033e+00	1.582291e-01	1.582291e-01	5.725064e+01	2.240922e+00	2.240922e+00
+2.183318e+00	1.880557e-01	1.880557e-01	6.164457e+01	2.013365e+00	2.013365e+00
+2.594878e+00	2.235046e-01	2.235046e-01	6.581330e+01	1.969264e+00	1.969264e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.706655e+01	1.959374e+00	1.959374e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.342732e+01	1.889673e+00	1.889673e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.799750e+01	1.819163e+00	1.819163e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.842780e+01	1.617673e+00	1.617673e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.718619e+01	1.371325e+00	1.371325e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.584674e+01	1.036562e+00	1.036562e+00
+8.691946e+00	7.486632e-01	7.486632e-01	1.614116e+01	7.093522e-01	7.093522e-01
+1.033040e+01	8.897879e-01	8.897879e-01	9.045228e+00	4.474669e-01	4.474669e-01
+1.227770e+01	1.057515e+00	1.057515e+00	4.427789e+00	2.435580e-01	2.435580e-01
+1.459207e+01	1.256859e+00	1.256859e+00	2.019382e+00	1.234920e-01	1.234920e-01
+1.734271e+01	1.493779e+00	1.493779e+00	9.245877e-01	6.312702e-02	6.312702e-02
+2.061185e+01	1.775360e+00	1.775360e+00	4.259970e-01	3.223159e-02	3.223159e-02
+2.449723e+01	2.110020e+00	2.110020e+00	1.973009e-01	1.669273e-02	1.669273e-02
+2.911501e+01	2.507763e+00	2.507763e+00	9.582690e-02	9.407234e-03	9.407234e-03
+4.235561e+01	1.073283e+01	1.073283e+01	2.485965e-02	2.980908e-03	2.980908e-03
+1.521385e+02	9.905010e+01	9.905010e+01	6.553450e-04	2.239677e-04	2.239677e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d03-x01-y06
+Path=/REF/ATLAS_2017_I1589844_EL/d03-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	2.881642e+01	3.184287e+00	3.184287e+00
+1.300520e+00	1.120177e-01	1.120177e-01	3.541813e+01	4.103723e+00	4.103723e+00
+1.545671e+00	1.331332e-01	1.331332e-01	4.309837e+01	4.948677e+00	4.948677e+00
+1.837033e+00	1.582291e-01	1.582291e-01	5.446910e+01	5.105418e+00	5.105418e+00
+2.183318e+00	1.880557e-01	1.880557e-01	6.478630e+01	5.780485e+00	5.780485e+00
+2.594878e+00	2.235046e-01	2.235046e-01	7.364876e+01	5.943595e+00	5.943595e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.815995e+01	5.620889e+00	5.620889e+00
+3.665363e+00	3.157087e-01	3.157087e-01	7.694848e+01	4.621943e+00	4.621943e+00
+4.356292e+00	3.752204e-01	3.752204e-01	6.738364e+01	3.852427e+00	3.852427e+00
+5.177463e+00	4.459503e-01	4.459503e-01	5.286911e+01	3.498016e+00	3.498016e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.679335e+01	3.225438e+00	3.225438e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.254818e+01	2.250628e+00	2.250628e+00
+8.691946e+00	7.486632e-01	7.486632e-01	1.275560e+01	1.281082e+00	1.281082e+00
+1.033040e+01	8.897879e-01	8.897879e-01	6.770748e+00	5.681592e-01	5.681592e-01
+1.227770e+01	1.057515e+00	1.057515e+00	3.611050e+00	2.702737e-01	2.702737e-01
+1.459207e+01	1.256859e+00	1.256859e+00	1.956713e+00	1.317371e-01	1.317371e-01
+1.734271e+01	1.493779e+00	1.493779e+00	1.102316e+00	8.512634e-02	8.512634e-02
+2.061185e+01	1.775360e+00	1.775360e+00	6.606707e-01	5.283885e-02	5.283885e-02
+2.449723e+01	2.110020e+00	2.110020e+00	3.906399e-01	3.097488e-02	3.097488e-02
+2.911501e+01	2.507763e+00	2.507763e+00	2.318652e-01	1.783598e-02	1.783598e-02
+4.235561e+01	1.073283e+01	1.073283e+01	7.602995e-02	6.518094e-03	6.518094e-03
+1.521385e+02	9.905010e+01	9.905010e+01	2.549474e-03	9.406611e-04	9.406611e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d03-x01-y08
+Path=/REF/ATLAS_2017_I1589844_EL/d03-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.682484e+01	2.775045e+00	2.775045e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.828133e+01	2.959732e+00	2.959732e+00
+1.545671e+00	1.331332e-01	1.331332e-01	2.046424e+01	3.454675e+00	3.454675e+00
+1.837033e+00	1.582291e-01	1.582291e-01	2.362836e+01	3.753439e+00	3.753439e+00
+2.183318e+00	1.880557e-01	1.880557e-01	2.766107e+01	3.787512e+00	3.787512e+00
+2.594878e+00	2.235046e-01	2.235046e-01	3.191776e+01	3.914413e+00	3.914413e+00
+3.084019e+00	2.656357e-01	2.656357e-01	3.666802e+01	3.333615e+00	3.333615e+00
+3.665363e+00	3.157087e-01	3.157087e-01	4.147307e+01	2.770658e+00	2.770658e+00
+4.356292e+00	3.752204e-01	3.752204e-01	4.339596e+01	2.367097e+00	2.367097e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.334516e+01	2.025415e+00	2.025415e+00
+6.153426e+00	5.300130e-01	5.300130e-01	4.085062e+01	1.782907e+00	1.782907e+00
+7.313361e+00	6.299216e-01	6.299216e-01	3.558937e+01	1.627386e+00	1.627386e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.837609e+01	1.360519e+00	1.360519e+00
+1.033040e+01	8.897879e-01	8.897879e-01	2.084315e+01	1.203209e+00	1.203209e+00
+1.227770e+01	1.057515e+00	1.057515e+00	1.373487e+01	7.509009e-01	7.509009e-01
+1.459207e+01	1.256859e+00	1.256859e+00	8.163879e+00	3.989291e-01	3.989291e-01
+1.734271e+01	1.493779e+00	1.493779e+00	4.385102e+00	2.193429e-01	2.193429e-01
+2.061185e+01	1.775360e+00	1.775360e+00	2.196628e+00	1.176876e-01	1.176876e-01
+2.449723e+01	2.110020e+00	2.110020e+00	1.015347e+00	6.840886e-02	6.840886e-02
+2.911501e+01	2.507763e+00	2.507763e+00	4.771861e-01	3.368109e-02	3.368109e-02
+4.235561e+01	1.073283e+01	1.073283e+01	1.242446e-01	9.750337e-03	9.750337e-03
+1.521385e+02	9.905010e+01	9.905010e+01	3.307380e-03	1.247744e-03	1.247744e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d04-x01-y02
+Path=/REF/ATLAS_2017_I1589844_EL/d04-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	9.885554e+01	3.200561e+00	3.200561e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.162535e+02	3.652068e+00	3.652068e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.313626e+02	3.959102e+00	3.959102e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.383518e+02	4.186373e+00	4.186373e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.331527e+02	4.168645e+00	4.168645e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.164478e+02	3.919994e+00	3.919994e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.036059e+01	3.300918e+00	3.300918e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.110676e+01	2.499161e+00	2.499161e+00
+4.356292e+00	3.752204e-01	3.752204e-01	3.596948e+01	1.632962e+00	1.632962e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.816566e+01	9.529880e-01	9.529880e-01
+6.153426e+00	5.300130e-01	5.300130e-01	8.539847e+00	5.009957e-01	5.009957e-01
+7.313361e+00	6.299216e-01	6.299216e-01	3.888558e+00	2.581566e-01	2.581566e-01
+8.691946e+00	7.486632e-01	7.486632e-01	1.786535e+00	1.344000e-01	1.344000e-01
+1.033040e+01	8.897879e-01	8.897879e-01	8.314956e-01	6.952058e-02	6.952058e-02
+1.227770e+01	1.057515e+00	1.057515e+00	4.054816e-01	3.738897e-02	3.738897e-02
+1.459207e+01	1.256859e+00	1.256859e+00	2.128298e-01	2.141584e-02	2.141584e-02
+1.734271e+01	1.493779e+00	1.493779e+00	1.053347e-01	1.161575e-02	1.161575e-02
+2.578528e+01	6.948789e+00	6.948789e+00	2.816600e-02	3.624671e-03	3.624671e-03
+1.052810e+02	7.254694e+01	7.254694e+01	4.449689e-04	2.717053e-04	2.717053e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d04-x01-y04
+Path=/REF/ATLAS_2017_I1589844_EL/d04-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	5.882263e+01	2.292783e+00	2.292783e+00
+1.300520e+00	1.120177e-01	1.120177e-01	6.470283e+01	2.500564e+00	2.500564e+00
+1.545671e+00	1.331332e-01	1.331332e-01	7.250723e+01	2.580587e+00	2.580587e+00
+1.837033e+00	1.582291e-01	1.582291e-01	7.702788e+01	2.377931e+00	2.377931e+00
+2.183318e+00	1.880557e-01	1.880557e-01	8.054703e+01	2.292748e+00	2.292748e+00
+2.594878e+00	2.235046e-01	2.235046e-01	8.048331e+01	2.228106e+00	2.228106e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.567593e+01	2.181178e+00	2.181178e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.775227e+01	2.095443e+00	2.095443e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.645931e+01	1.913337e+00	1.913337e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.313660e+01	1.628139e+00	1.628139e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.935159e+01	1.252820e+00	1.252820e+00
+7.313361e+00	6.299216e-01	6.299216e-01	1.791051e+01	8.553304e-01	8.553304e-01
+8.691946e+00	7.486632e-01	7.486632e-01	9.604666e+00	5.329800e-01	5.329800e-01
+1.033040e+01	8.897879e-01	8.897879e-01	4.453450e+00	2.837638e-01	2.837638e-01
+1.227770e+01	1.057515e+00	1.057515e+00	1.813519e+00	1.315454e-01	1.315454e-01
+1.459207e+01	1.256859e+00	1.256859e+00	6.817703e-01	5.765197e-02	5.765197e-02
+1.734271e+01	1.493779e+00	1.493779e+00	2.490194e-01	2.471691e-02	2.471691e-02
+2.578528e+01	6.948789e+00	6.948789e+00	4.029429e-02	5.628156e-03	5.628156e-03
+1.052810e+02	7.254694e+01	7.254694e+01	5.240726e-04	3.465856e-04	3.465856e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d04-x01-y06
+Path=/REF/ATLAS_2017_I1589844_EL/d04-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	4.435487e+01	3.889083e+00	3.889083e+00
+1.300520e+00	1.120177e-01	1.120177e-01	5.209309e+01	4.855428e+00	4.855428e+00
+1.545671e+00	1.331332e-01	1.331332e-01	6.287368e+01	5.572386e+00	5.572386e+00
+1.837033e+00	1.582291e-01	1.582291e-01	7.545967e+01	6.059383e+00	6.059383e+00
+2.183318e+00	1.880557e-01	1.880557e-01	8.598034e+01	6.488784e+00	6.488784e+00
+2.594878e+00	2.235046e-01	2.235046e-01	9.154772e+01	6.141299e+00	6.141299e+00
+3.084019e+00	2.656357e-01	2.656357e-01	8.997620e+01	5.433714e+00	5.433714e+00
+3.665363e+00	3.157087e-01	3.157087e-01	8.130906e+01	4.501465e+00	4.501465e+00
+4.356292e+00	3.752204e-01	3.752204e-01	6.498983e+01	3.862690e+00	3.862690e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.646111e+01	3.652489e+00	3.652489e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.878732e+01	2.937814e+00	2.937814e+00
+7.313361e+00	6.299216e-01	6.299216e-01	1.569215e+01	1.807114e+00	1.807114e+00
+8.691946e+00	7.486632e-01	7.486632e-01	7.814674e+00	9.384991e-01	9.384991e-01
+1.033040e+01	8.897879e-01	8.897879e-01	3.667297e+00	3.611024e-01	3.611024e-01
+1.227770e+01	1.057515e+00	1.057515e+00	1.739567e+00	1.507552e-01	1.507552e-01
+1.459207e+01	1.256859e+00	1.256859e+00	8.788418e-01	7.414731e-02	7.414731e-02
+1.734271e+01	1.493779e+00	1.493779e+00	4.568760e-01	3.994794e-02	3.994794e-02
+2.578528e+01	6.948789e+00	6.948789e+00	1.258431e-01	1.477115e-02	1.477115e-02
+1.052810e+02	7.254694e+01	7.254694e+01	2.892487e-03	1.477522e-03	1.477522e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d04-x01-y08
+Path=/REF/ATLAS_2017_I1589844_EL/d04-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	2.776041e+01	3.719074e+00	3.719074e+00
+1.300520e+00	1.120177e-01	1.120177e-01	2.870623e+01	4.074104e+00	4.074104e+00
+1.545671e+00	1.331332e-01	1.331332e-01	3.277519e+01	4.122582e+00	4.122582e+00
+1.837033e+00	1.582291e-01	1.582291e-01	3.618779e+01	4.839969e+00	4.839969e+00
+2.183318e+00	1.880557e-01	1.880557e-01	4.078765e+01	4.392209e+00	4.392209e+00
+2.594878e+00	2.235046e-01	2.235046e-01	4.594333e+01	3.956333e+00	3.956333e+00
+3.084019e+00	2.656357e-01	2.656357e-01	5.023071e+01	3.190471e+00	3.190471e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.215694e+01	2.599895e+00	2.599895e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.091776e+01	2.394251e+00	2.394251e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.784093e+01	1.870451e+00	1.870451e+00
+6.153426e+00	5.300130e-01	5.300130e-01	4.174255e+01	1.756402e+00	1.756402e+00
+7.313361e+00	6.299216e-01	6.299216e-01	3.366862e+01	1.808922e+00	1.808922e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.424719e+01	1.453099e+00	1.453099e+00
+1.033040e+01	8.897879e-01	8.897879e-01	1.564452e+01	9.437791e-01	9.437791e-01
+1.227770e+01	1.057515e+00	1.057515e+00	9.107407e+00	5.754803e-01	5.754803e-01
+1.459207e+01	1.256859e+00	1.256859e+00	4.760648e+00	3.105451e-01	3.105451e-01
+1.734271e+01	1.493779e+00	1.493779e+00	2.128365e+00	1.355363e-01	1.355363e-01
+2.578528e+01	6.948789e+00	6.948789e+00	3.678572e-01	2.884769e-02	2.884769e-02
+1.052810e+02	7.254694e+01	7.254694e+01	3.394696e-03	1.648326e-03	1.648326e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d05-x01-y02
+Path=/REF/ATLAS_2017_I1589844_EL/d05-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.282547e+02	4.495419e+00	4.495419e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.441616e+02	4.551329e+00	4.551329e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.554467e+02	4.930296e+00	4.930296e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.518138e+02	4.855627e+00	4.855627e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.381979e+02	4.674796e+00	4.674796e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.120464e+02	4.152741e+00	4.152741e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.927851e+01	3.243676e+00	3.243676e+00
+3.665363e+00	3.157087e-01	3.157087e-01	4.794843e+01	2.249475e+00	2.249475e+00
+4.356292e+00	3.752204e-01	3.752204e-01	2.456896e+01	1.325989e+00	1.325989e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.126478e+01	7.082665e-01	7.082665e-01
+6.153426e+00	5.300130e-01	5.300130e-01	4.576736e+00	3.390739e-01	3.390739e-01
+7.313361e+00	6.299216e-01	6.299216e-01	1.839542e+00	1.599527e-01	1.599527e-01
+8.691946e+00	7.486632e-01	7.486632e-01	7.291075e-01	7.403617e-02	7.403617e-02
+1.033040e+01	8.897879e-01	8.897879e-01	3.266208e-01	3.823044e-02	3.823044e-02
+1.470860e+01	3.488412e+00	3.488412e+00	8.094901e-02	1.213269e-02	1.213269e-02
+4.659321e+01	2.839621e+01	2.839621e+01	1.955645e-03	6.906708e-04	6.906708e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d05-x01-y04
+Path=/REF/ATLAS_2017_I1589844_EL/d05-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	7.784720e+01	3.466123e+00	3.466123e+00
+1.300520e+00	1.120177e-01	1.120177e-01	8.471003e+01	3.403124e+00	3.403124e+00
+1.545671e+00	1.331332e-01	1.331332e-01	9.270208e+01	3.409070e+00	3.409070e+00
+1.837033e+00	1.582291e-01	1.582291e-01	9.361033e+01	2.937067e+00	2.937067e+00
+2.183318e+00	1.880557e-01	1.880557e-01	9.303931e+01	2.684748e+00	2.684748e+00
+2.594878e+00	2.235046e-01	2.235046e-01	8.780759e+01	2.532749e+00	2.532749e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.869744e+01	2.422137e+00	2.422137e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.538040e+01	2.230595e+00	2.230595e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.021120e+01	1.934217e+00	1.934217e+00
+5.177463e+00	4.459503e-01	4.459503e-01	3.455953e+01	1.504869e+00	1.504869e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.137445e+01	1.058821e+00	1.058821e+00
+7.313361e+00	6.299216e-01	6.299216e-01	1.152285e+01	6.473931e-01	6.473931e-01
+8.691946e+00	7.486632e-01	7.486632e-01	5.180351e+00	3.424252e-01	3.424252e-01
+1.033040e+01	8.897879e-01	8.897879e-01	1.953442e+00	1.476519e-01	1.476519e-01
+1.470860e+01	3.488412e+00	3.488412e+00	2.899589e-01	3.034985e-02	3.034985e-02
+4.659321e+01	2.839621e+01	2.839621e+01	2.310976e-03	1.034278e-03	1.034278e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d05-x01-y06
+Path=/REF/ATLAS_2017_I1589844_EL/d05-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	5.975401e+01	4.780191e+00	4.780191e+00
+1.300520e+00	1.120177e-01	1.120177e-01	7.037482e+01	5.031803e+00	5.031803e+00
+1.545671e+00	1.331332e-01	1.331332e-01	8.180272e+01	6.433829e+00	6.433829e+00
+1.837033e+00	1.582291e-01	1.582291e-01	9.500909e+01	6.471448e+00	6.471448e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.031646e+02	6.682150e+00	6.682150e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.037997e+02	5.923222e+00	5.923222e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.493794e+01	5.171054e+00	5.171054e+00
+3.665363e+00	3.157087e-01	3.157087e-01	7.917580e+01	4.403367e+00	4.403367e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.899103e+01	4.399506e+00	4.399506e+00
+5.177463e+00	4.459503e-01	4.459503e-01	3.807908e+01	3.763334e+00	3.763334e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.109440e+01	2.316910e+00	2.316910e+00
+7.313361e+00	6.299216e-01	6.299216e-01	1.046011e+01	1.423077e+00	1.423077e+00
+8.691946e+00	7.486632e-01	7.486632e-01	4.573584e+00	5.710347e-01	5.710347e-01
+1.033040e+01	8.897879e-01	8.897879e-01	1.947476e+00	2.191623e-01	2.191623e-01
+1.470860e+01	3.488412e+00	3.488412e+00	4.517690e-01	4.478067e-02	4.478067e-02
+4.659321e+01	2.839621e+01	2.839621e+01	1.251025e-02	6.122581e-03	6.122581e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d05-x01-y08
+Path=/REF/ATLAS_2017_I1589844_EL/d05-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	4.051657e+01	4.331477e+00	4.331477e+00
+1.300520e+00	1.120177e-01	1.120177e-01	4.214451e+01	4.325586e+00	4.325586e+00
+1.545671e+00	1.331332e-01	1.331332e-01	4.500144e+01	5.369061e+00	5.369061e+00
+1.837033e+00	1.582291e-01	1.582291e-01	4.997332e+01	4.513757e+00	4.513757e+00
+2.183318e+00	1.880557e-01	1.880557e-01	5.386147e+01	4.881501e+00	4.881501e+00
+2.594878e+00	2.235046e-01	2.235046e-01	5.801363e+01	4.263432e+00	4.263432e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.003854e+01	3.248399e+00	3.248399e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.921527e+01	2.602904e+00	2.602904e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.479089e+01	2.198592e+00	2.198592e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.818663e+01	1.861504e+00	1.861504e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.871403e+01	1.744075e+00	1.744075e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.857481e+01	1.653738e+00	1.653738e+00
+8.691946e+00	7.486632e-01	7.486632e-01	1.898611e+01	1.313188e+00	1.313188e+00
+1.033040e+01	8.897879e-01	8.897879e-01	1.114301e+01	8.578990e-01	8.578990e-01
+1.470860e+01	3.488412e+00	3.488412e+00	2.975518e+00	2.320256e-01	2.320256e-01
+4.659321e+01	2.839621e+01	2.839621e+01	3.408777e-02	1.255299e-02	1.255299e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d06-x01-y02
+Path=/REF/ATLAS_2017_I1589844_EL/d06-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.540999e+02	5.400660e+00	5.400660e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.677234e+02	5.670468e+00	5.670468e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.690748e+02	5.730831e+00	5.730831e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.605293e+02	5.573070e+00	5.573070e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.361445e+02	5.074010e+00	5.074010e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.018434e+02	4.222728e+00	4.222728e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.570199e+01	3.055339e+00	3.055339e+00
+3.665363e+00	3.157087e-01	3.157087e-01	3.587913e+01	1.938509e+00	1.938509e+00
+4.356292e+00	3.752204e-01	3.752204e-01	1.653357e+01	1.050642e+00	1.050642e+00
+5.177463e+00	4.459503e-01	4.459503e-01	6.614902e+00	5.066172e-01	5.066172e-01
+6.153426e+00	5.300130e-01	5.300130e-01	2.430457e+00	2.259669e-01	2.259669e-01
+7.313361e+00	6.299216e-01	6.299216e-01	8.518671e-01	9.737783e-02	9.737783e-02
+8.691946e+00	7.486632e-01	7.486632e-01	3.119018e-01	4.348545e-02	4.348545e-02
+1.186477e+01	2.424165e+00	2.424165e+00	7.097755e-02	1.314645e-02	1.314645e-02
+3.368869e+01	1.939975e+01	1.939975e+01	1.964470e-03	6.198766e-04	6.198766e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d06-x01-y04
+Path=/REF/ATLAS_2017_I1589844_EL/d06-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.009206e+02	4.254964e+00	4.254964e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.032097e+02	3.947937e+00	3.947937e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.078605e+02	3.754433e+00	3.754433e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.062566e+02	3.310802e+00	3.310802e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.003631e+02	3.032044e+00	3.032044e+00
+2.594878e+00	2.235046e-01	2.235046e-01	9.012799e+01	2.828788e+00	2.828788e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.600011e+01	2.605077e+00	2.605077e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.914099e+01	2.295534e+00	2.295534e+00
+4.356292e+00	3.752204e-01	3.752204e-01	4.145433e+01	1.824427e+00	1.824427e+00
+5.177463e+00	4.459503e-01	4.459503e-01	2.622124e+01	1.308172e+00	1.308172e+00
+6.153426e+00	5.300130e-01	5.300130e-01	1.445378e+01	8.218370e-01	8.218370e-01
+7.313361e+00	6.299216e-01	6.299216e-01	6.744587e+00	4.407550e-01	4.407550e-01
+8.691946e+00	7.486632e-01	7.486632e-01	2.587733e+00	2.032481e-01	2.032481e-01
+1.186477e+01	2.424165e+00	2.424165e+00	4.186745e-01	4.068445e-02	4.068445e-02
+3.368869e+01	1.939975e+01	1.939975e+01	3.066196e-03	1.368754e-03	1.368754e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d06-x01-y06
+Path=/REF/ATLAS_2017_I1589844_EL/d06-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	7.816942e+01	4.681306e+00	4.681306e+00
+1.300520e+00	1.120177e-01	1.120177e-01	8.802211e+01	5.394644e+00	5.394644e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.004145e+02	6.234345e+00	6.234345e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.107356e+02	7.174199e+00	7.174199e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.148094e+02	7.515589e+00	7.515589e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.101778e+02	6.107253e+00	6.107253e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.611545e+01	5.241688e+00	5.241688e+00
+3.665363e+00	3.157087e-01	3.157087e-01	7.413204e+01	4.937210e+00	4.937210e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.036667e+01	4.280500e+00	4.280500e+00
+5.177463e+00	4.459503e-01	4.459503e-01	2.983214e+01	3.363562e+00	3.363562e+00
+6.153426e+00	5.300130e-01	5.300130e-01	1.521581e+01	2.055670e+00	2.055670e+00
+7.313361e+00	6.299216e-01	6.299216e-01	6.684109e+00	9.724895e-01	9.724895e-01
+8.691946e+00	7.486632e-01	7.486632e-01	2.668123e+00	3.914825e-01	3.914825e-01
+1.186477e+01	2.424165e+00	2.424165e+00	5.785726e-01	7.952577e-02	7.952577e-02
+3.368869e+01	1.939975e+01	1.939975e+01	1.434853e-02	7.286712e-03	7.286712e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d06-x01-y08
+Path=/REF/ATLAS_2017_I1589844_EL/d06-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	5.597449e+01	4.659709e+00	4.659709e+00
+1.300520e+00	1.120177e-01	1.120177e-01	5.513408e+01	4.570877e+00	4.570877e+00
+1.545671e+00	1.331332e-01	1.331332e-01	5.921102e+01	5.020556e+00	5.020556e+00
+1.837033e+00	1.582291e-01	1.582291e-01	6.188141e+01	5.372021e+00	5.372021e+00
+2.183318e+00	1.880557e-01	1.880557e-01	6.551176e+01	5.034736e+00	5.034736e+00
+2.594878e+00	2.235046e-01	2.235046e-01	6.821726e+01	3.726074e+00	3.726074e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.693019e+01	3.234644e+00	3.234644e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.262234e+01	2.609289e+00	2.609289e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.523497e+01	2.096434e+00	2.096434e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.544519e+01	1.784346e+00	1.784346e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.403018e+01	1.687228e+00	1.687228e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.316325e+01	1.624974e+00	1.624974e+00
+8.691946e+00	7.486632e-01	7.486632e-01	1.391094e+01	9.959515e-01	9.959515e-01
+1.186477e+01	2.424165e+00	2.424165e+00	4.480744e+00	4.266110e-01	4.266110e-01
+3.368869e+01	1.939975e+01	1.939975e+01	7.725229e-02	1.697997e-02	1.697997e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d07-x01-y02
+Path=/REF/ATLAS_2017_I1589844_EL/d07-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.759343e+02	6.050447e+00	6.050447e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.856361e+02	6.512081e+00	6.512081e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.788584e+02	6.292412e+00	6.292412e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.616639e+02	5.925943e+00	5.925943e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.290415e+02	5.183279e+00	5.183279e+00
+2.594878e+00	2.235046e-01	2.235046e-01	8.870707e+01	4.022019e+00	4.022019e+00
+3.084019e+00	2.656357e-01	2.656357e-01	5.233816e+01	2.698511e+00	2.698511e+00
+3.665363e+00	3.157087e-01	3.157087e-01	2.616244e+01	1.595399e+00	1.595399e+00
+4.356292e+00	3.752204e-01	3.752204e-01	1.072125e+01	7.762603e-01	7.762603e-01
+5.177463e+00	4.459503e-01	4.459503e-01	3.849885e+00	3.389971e-01	3.389971e-01
+6.153426e+00	5.300130e-01	5.300130e-01	1.257925e+00	1.358748e-01	1.358748e-01
+7.313361e+00	6.299216e-01	6.299216e-01	3.856912e-01	5.506100e-02	5.506100e-02
+9.982963e+00	2.039681e+00	2.039681e+00	6.705059e-02	1.281328e-02	1.281328e-02
+2.834550e+01	1.632286e+01	1.632286e+01	1.682703e-03	5.397319e-04	5.397319e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d07-x01-y04
+Path=/REF/ATLAS_2017_I1589844_EL/d07-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.210685e+02	5.135350e+00	5.135350e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.196375e+02	4.702298e+00	4.702298e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.202971e+02	4.314884e+00	4.314884e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.146208e+02	3.834870e+00	3.834870e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.032945e+02	3.398660e+00	3.398660e+00
+2.594878e+00	2.235046e-01	2.235046e-01	8.755621e+01	3.053600e+00	3.053600e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.988633e+01	2.722166e+00	2.722166e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.045044e+01	2.194913e+00	2.194913e+00
+4.356292e+00	3.752204e-01	3.752204e-01	3.271330e+01	1.603923e+00	1.603923e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.877447e+01	1.050099e+00	1.050099e+00
+6.153426e+00	5.300130e-01	5.300130e-01	9.067463e+00	5.761428e-01	5.761428e-01
+7.313361e+00	6.299216e-01	6.299216e-01	3.727551e+00	2.805504e-01	2.805504e-01
+9.982963e+00	2.039681e+00	2.039681e+00	6.028162e-01	5.882826e-02	5.882826e-02
+2.834550e+01	1.632286e+01	1.632286e+01	3.291324e-03	1.615346e-03	1.615346e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d07-x01-y06
+Path=/REF/ATLAS_2017_I1589844_EL/d07-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	9.608449e+01	4.827833e+00	4.827833e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.064805e+02	5.299096e+00	5.299096e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.159591e+02	6.139813e+00	6.139813e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.229112e+02	7.364774e+00	7.364774e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.235612e+02	6.966558e+00	6.966558e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.132774e+02	5.660920e+00	5.660920e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.334269e+01	5.344903e+00	5.344903e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.603497e+01	4.576720e+00	4.576720e+00
+4.356292e+00	3.752204e-01	3.752204e-01	4.177559e+01	3.924106e+00	3.924106e+00
+5.177463e+00	4.459503e-01	4.459503e-01	2.293339e+01	2.831035e+00	2.831035e+00
+6.153426e+00	5.300130e-01	5.300130e-01	1.064159e+01	1.489597e+00	1.489597e+00
+7.313361e+00	6.299216e-01	6.299216e-01	4.176034e+00	6.002895e-01	6.002895e-01
+9.982963e+00	2.039681e+00	2.039681e+00	8.215343e-01	1.300944e-01	1.300944e-01
+2.834550e+01	1.632286e+01	1.632286e+01	1.280799e-02	7.200643e-03	7.200643e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d07-x01-y08
+Path=/REF/ATLAS_2017_I1589844_EL/d07-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	6.977532e+01	5.070344e+00	5.070344e+00
+1.300520e+00	1.120177e-01	1.120177e-01	7.012209e+01	4.888153e+00	4.888153e+00
+1.545671e+00	1.331332e-01	1.331332e-01	7.257325e+01	5.193705e+00	5.193705e+00
+1.837033e+00	1.582291e-01	1.582291e-01	7.280953e+01	6.350874e+00	6.350874e+00
+2.183318e+00	1.880557e-01	1.880557e-01	7.581119e+01	4.934556e+00	4.934556e+00
+2.594878e+00	2.235046e-01	2.235046e-01	7.507146e+01	4.540748e+00	4.540748e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.151584e+01	3.430829e+00	3.430829e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.352803e+01	2.650984e+00	2.650984e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.274429e+01	2.111299e+00	2.111299e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.103944e+01	1.991946e+00	1.991946e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.842839e+01	1.581016e+00	1.581016e+00
+7.313361e+00	6.299216e-01	6.299216e-01	1.791404e+01	1.291442e+00	1.291442e+00
+9.982963e+00	2.039681e+00	2.039681e+00	6.064214e+00	5.879142e-01	5.879142e-01
+2.834550e+01	1.632286e+01	1.632286e+01	1.141068e-01	2.082417e-02	2.082417e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d08-x01-y02
+Path=/REF/ATLAS_2017_I1589844_EL/d08-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.978115e+02	6.660942e+00	6.660942e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.991621e+02	7.098890e+00	7.098890e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.843633e+02	6.639094e+00	6.639094e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.558113e+02	6.127222e+00	6.127222e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.178095e+02	5.225446e+00	5.225446e+00
+2.594878e+00	2.235046e-01	2.235046e-01	7.589992e+01	3.803267e+00	3.803267e+00
+3.084019e+00	2.656357e-01	2.656357e-01	4.153019e+01	2.421911e+00	2.421911e+00
+3.665363e+00	3.157087e-01	3.157087e-01	1.850972e+01	1.257970e+00	1.257970e+00
+4.356292e+00	3.752204e-01	3.752204e-01	6.719661e+00	5.417020e-01	5.417020e-01
+5.177463e+00	4.459503e-01	4.459503e-01	2.144778e+00	2.102337e-01	2.102337e-01
+7.067397e+00	1.443984e+00	1.443984e+00	3.049476e-01	4.520666e-02	4.520666e-02
+2.006708e+01	1.155570e+01	1.155570e+01	3.726200e-03	1.772634e-03	1.772634e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d08-x01-y04
+Path=/REF/ATLAS_2017_I1589844_EL/d08-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.368852e+02	9.996343e+00	9.996343e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.328523e+02	9.398905e+00	9.398905e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.295284e+02	4.906095e+00	4.906095e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.185704e+02	4.185466e+00	4.185466e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.019678e+02	3.637688e+00	3.637688e+00
+2.594878e+00	2.235046e-01	2.235046e-01	8.251027e+01	3.222399e+00	3.222399e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.116879e+01	2.675631e+00	2.675631e+00
+3.665363e+00	3.157087e-01	3.157087e-01	4.100568e+01	2.033729e+00	2.033729e+00
+4.356292e+00	3.752204e-01	3.752204e-01	2.443362e+01	1.367747e+00	1.367747e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.289250e+01	8.075437e-01	8.075437e-01
+7.067397e+00	1.443984e+00	1.443984e+00	2.981475e+00	2.342487e-01	2.342487e-01
+2.006708e+01	1.155570e+01	1.155570e+01	2.753442e-02	7.523117e-03	7.523117e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d08-x01-y06
+Path=/REF/ATLAS_2017_I1589844_EL/d08-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.152471e+02	6.177147e+00	6.177147e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.224623e+02	5.160137e+00	5.160137e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.295730e+02	6.490904e+00	6.490904e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.342186e+02	6.852017e+00	6.852017e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.286992e+02	6.509619e+00	6.509619e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.121986e+02	5.204103e+00	5.204103e+00
+3.084019e+00	2.656357e-01	2.656357e-01	8.570830e+01	4.833779e+00	4.833779e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.835079e+01	4.602612e+00	4.602612e+00
+4.356292e+00	3.752204e-01	3.752204e-01	3.471582e+01	3.676361e+00	3.676361e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.736571e+01	2.307098e+00	2.307098e+00
+7.067397e+00	1.443984e+00	1.443984e+00	4.033761e+00	6.721175e-01	6.721175e-01
+2.006708e+01	1.155570e+01	1.155570e+01	4.859065e-02	2.435393e-02	2.435393e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_EL/d08-x01-y08
+Path=/REF/ATLAS_2017_I1589844_EL/d08-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	8.475220e+01	5.902977e+00	5.902977e+00
+1.300520e+00	1.120177e-01	1.120177e-01	8.444817e+01	5.649440e+00	5.649440e+00
+1.545671e+00	1.331332e-01	1.331332e-01	8.394995e+01	6.247410e+00	6.247410e+00
+1.837033e+00	1.582291e-01	1.582291e-01	8.274077e+01	6.867471e+00	6.867471e+00
+2.183318e+00	1.880557e-01	1.880557e-01	8.339998e+01	5.445627e+00	5.445627e+00
+2.594878e+00	2.235046e-01	2.235046e-01	7.988968e+01	5.028314e+00	5.028314e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.378467e+01	3.120918e+00	3.120918e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.239436e+01	2.439881e+00	2.439881e+00
+4.356292e+00	3.752204e-01	3.752204e-01	4.887237e+01	1.989183e+00	1.989183e+00
+5.177463e+00	4.459503e-01	4.459503e-01	3.490555e+01	1.748288e+00	1.748288e+00
+7.067397e+00	1.443984e+00	1.443984e+00	1.571370e+01	1.195915e+00	1.195915e+00
+2.006708e+01	1.155570e+01	1.155570e+01	5.534319e-01	8.594294e-02	8.594294e-02
+END YODA_SCATTER2D
+
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1589844_MU.info b/analyses/pluginATLAS/ATLAS_2017_I1589844_MU.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1589844_MU.info
@@ -0,0 +1,46 @@
+Name: ATLAS_2017_I1589844_MU
+Year: 2017
+Summary: $k_T$ splittings in $Z$ events at 8 TeV, muon mode
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1589844
+Status: VALIDATED
+Authors:
+ - Christian Gutschow <chris.g@cern.ch>
+ - Frank Siegert <frank.siegert@cern.ch>
+References:
+ - arXiv:1704.01530 [hep-ex]
+ - submitted to JHEP
+Keywords:
+ - KTSPLITTINGS
+ - QCD
+ - Z
+ - JETS
+ - TRACKS
+RunInfo:
+  '$pp \to Z(\to ee/\mu\mu) +$ jets at 8 TeV'
+Luminosity_fb: 20.2
+Beams: [p+, p+]
+Energies: [8000]
+PtCuts: [25, 25, 0.4]
+Description:
+  'A measurement of the splitting scales occuring in the $k_\text{t}$ jet-clustering algorithm is presented for final states containing
+  a $Z$ boson. The measurement is done using 20.2 fb$^{-1}$ of proton-proton collision data collected at a centre-of-mass energy of
+  $\sqrt{s} = 8$ TeV by the ATLAS experiment at the LHC in 2012. The measurement is based on charged-particle track information,
+  which is measured with excellent precision in the $p_\text{T}$ region relevant for the transition between the perturbative and the
+  non-perturbative regimes. The data distributions are corrected for detector effects, and are found to deviate from
+  state-of-the-art predictions in various regions of the observables.'
+BibKey: Aaboud:2017hox
+BibTeX: '@article{Aaboud:2017hox,
+      author         = "Aaboud, Morad and others",
+      title          = "{Measurement of the $k_\mathrm{t}$ splitting scales in $Z
+                        \to \ell\ell$ events in $pp$ collisions at $\sqrt{s} = 8$
+                        TeV with the ATLAS detector}",
+      collaboration  = "ATLAS",
+      year           = "2017",
+      eprint         = "1704.01530",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2017-033",
+      SLACcitation   = "%%CITATION = ARXIV:1704.01530;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1589844_MU.plot b/analyses/pluginATLAS/ATLAS_2017_I1589844_MU.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1589844_MU.plot
@@ -0,0 +1,63 @@
+# BEGIN PLOT /ATLAS_2017_I1589844_MU/d..
+Title=$Z \rightarrow e^+e^-$, $R=0.4$, charged particles only
+LogY=1
+LogX=1
+XTwosidedTicks=1
+YTwosidedTicks=1
+#LeftMargin=1.5
+LegendXPos=0.95
+LegendAlign=r
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_MU/d..-x01-y04
+Title=$Z \rightarrow e^+e^-$, $R=1.0$, charged particles only
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_MU/d..-x01-y06
+Title=$Z \rightarrow e^+e^-$, $R=0.4$, charged and neutral particles
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_MU/d..-x01-y08
+Title=$Z \rightarrow e^+e^-$, $R=1.0$, charged and neutral particles
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_MU/d01
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_0}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_0}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_MU/d02
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_1}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_1}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_MU/d03
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_2}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_2}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_MU/d04
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_3}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_3}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_MU/d05
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_4}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_4}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_MU/d06
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_5}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_5}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_MU/d07
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_6}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_6}$ [GeV]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1589844_MU/d08
+YLabel=$\frac{\text{d}\sigma}{\text{d}\sqrt{d_7}}$ [$\text{pb}\,\text{GeV}^{-1}$]
+XLabel=$\sqrt{d_7}$ [GeV]
+# END PLOT
+
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1589844_MU.yoda b/analyses/pluginATLAS/ATLAS_2017_I1589844_MU.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1589844_MU.yoda
@@ -0,0 +1,848 @@
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d01-x01-y02
+Path=/REF/ATLAS_2017_I1589844_MU/d01-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.843191e+01	7.457050e-01	7.457050e-01
+1.300520e+00	1.120177e-01	1.120177e-01	2.441937e+01	8.251125e-01	8.251125e-01
+1.545671e+00	1.331332e-01	1.331332e-01	3.066112e+01	1.114318e+00	1.114318e+00
+1.837033e+00	1.582291e-01	1.582291e-01	4.064066e+01	1.394752e+00	1.394752e+00
+2.183318e+00	1.880557e-01	1.880557e-01	4.727946e+01	1.525491e+00	1.525491e+00
+2.594878e+00	2.235046e-01	2.235046e-01	5.446314e+01	1.778923e+00	1.778923e+00
+3.084019e+00	2.656357e-01	2.656357e-01	5.806647e+01	1.920201e+00	1.920201e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.538682e+01	1.723712e+00	1.723712e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.033783e+01	1.566466e+00	1.566466e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.086573e+01	1.290886e+00	1.290886e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.126881e+01	9.824325e-01	9.824325e-01
+7.313361e+00	6.299216e-01	6.299216e-01	2.267270e+01	7.502458e-01	7.502458e-01
+8.691946e+00	7.486632e-01	7.486632e-01	1.607494e+01	5.400483e-01	5.400483e-01
+1.033040e+01	8.897879e-01	8.897879e-01	1.169971e+01	4.021634e-01	4.021634e-01
+1.227770e+01	1.057515e+00	1.057515e+00	8.472988e+00	2.986058e-01	2.986058e-01
+1.459207e+01	1.256859e+00	1.256859e+00	5.892089e+00	2.098366e-01	2.098366e-01
+1.734271e+01	1.493779e+00	1.493779e+00	4.366320e+00	1.600385e-01	1.600385e-01
+2.061185e+01	1.775360e+00	1.775360e+00	3.112279e+00	1.174748e-01	1.174748e-01
+2.449723e+01	2.110020e+00	2.110020e+00	2.240750e+00	8.717211e-02	8.717211e-02
+2.911501e+01	2.507763e+00	2.507763e+00	1.534069e+00	6.318952e-02	6.318952e-02
+3.460326e+01	2.980482e+00	2.980482e+00	1.030531e+00	4.402922e-02	4.402922e-02
+4.112605e+01	3.542309e+00	3.542309e+00	6.834079e-01	2.963892e-02	2.963892e-02
+4.887840e+01	4.210043e+00	4.210043e+00	4.320688e-01	1.918555e-02	1.918555e-02
+5.809209e+01	5.003645e+00	5.003645e+00	2.666526e-01	1.245923e-02	1.245923e-02
+6.904258e+01	5.946843e+00	5.946843e+00	1.671143e-01	8.250283e-03	8.250283e-03
+8.205726e+01	7.067836e+00	7.067836e+00	9.339255e-02	4.677413e-03	4.677413e-03
+9.752523e+01	8.400139e+00	8.400139e+00	5.411575e-02	2.824555e-03	2.824555e-03
+1.159090e+02	9.983584e+00	9.983584e+00	2.782189e-02	1.487392e-03	1.487392e-03
+1.377581e+02	1.186551e+01	1.186551e+01	1.514939e-02	8.451217e-04	8.451217e-04
+1.961423e+02	4.651872e+01	4.651872e+01	4.275534e-03	2.531246e-04	2.531246e-04
+6.213305e+02	3.786695e+02	3.786695e+02	8.432581e-05	9.408547e-06	9.408547e-06
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d01-x01-y04
+Path=/REF/ATLAS_2017_I1589844_MU/d01-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	8.131834e+00	4.490677e-01	4.490677e-01
+1.300520e+00	1.120177e-01	1.120177e-01	1.009730e+01	4.073897e-01	4.073897e-01
+1.545671e+00	1.331332e-01	1.331332e-01	1.143915e+01	5.885724e-01	5.885724e-01
+1.837033e+00	1.582291e-01	1.582291e-01	1.466143e+01	5.944605e-01	5.944605e-01
+2.183318e+00	1.880557e-01	1.880557e-01	1.782742e+01	6.701411e-01	6.701411e-01
+2.594878e+00	2.235046e-01	2.235046e-01	2.082979e+01	7.277524e-01	7.277524e-01
+3.084019e+00	2.656357e-01	2.656357e-01	2.538012e+01	9.136748e-01	9.136748e-01
+3.665363e+00	3.157087e-01	3.157087e-01	2.791683e+01	9.391386e-01	9.391386e-01
+4.356292e+00	3.752204e-01	3.752204e-01	3.061612e+01	9.748082e-01	9.748082e-01
+5.177463e+00	4.459503e-01	4.459503e-01	3.145211e+01	9.928744e-01	9.928744e-01
+6.153426e+00	5.300130e-01	5.300130e-01	3.162385e+01	9.857417e-01	9.857417e-01
+7.313361e+00	6.299216e-01	6.299216e-01	2.929418e+01	9.115539e-01	9.115539e-01
+8.691946e+00	7.486632e-01	7.486632e-01	2.545845e+01	8.282911e-01	8.282911e-01
+1.033040e+01	8.897879e-01	8.897879e-01	2.103254e+01	6.742779e-01	6.742779e-01
+1.227770e+01	1.057515e+00	1.057515e+00	1.604205e+01	5.290447e-01	5.290447e-01
+1.459207e+01	1.256859e+00	1.256859e+00	1.130196e+01	3.864420e-01	3.864420e-01
+1.734271e+01	1.493779e+00	1.493779e+00	7.816633e+00	2.789999e-01	2.789999e-01
+2.061185e+01	1.775360e+00	1.775360e+00	5.245804e+00	1.959936e-01	1.959936e-01
+2.449723e+01	2.110020e+00	2.110020e+00	3.466486e+00	1.362328e-01	1.362328e-01
+2.911501e+01	2.507763e+00	2.507763e+00	2.335649e+00	9.715040e-02	9.715040e-02
+3.460326e+01	2.980482e+00	2.980482e+00	1.476691e+00	6.452457e-02	6.452457e-02
+4.112605e+01	3.542309e+00	3.542309e+00	9.501897e-01	4.261565e-02	4.261565e-02
+4.887840e+01	4.210043e+00	4.210043e+00	5.877472e-01	2.727143e-02	2.727143e-02
+5.809209e+01	5.003645e+00	5.003645e+00	3.522312e-01	1.736717e-02	1.736717e-02
+6.904258e+01	5.946843e+00	5.946843e+00	2.218414e-01	1.140433e-02	1.140433e-02
+8.205726e+01	7.067836e+00	7.067836e+00	1.251722e-01	6.452849e-03	6.452849e-03
+9.752523e+01	8.400139e+00	8.400139e+00	6.951626e-02	3.670086e-03	3.670086e-03
+1.159090e+02	9.983584e+00	9.983584e+00	3.751489e-02	2.146711e-03	2.146711e-03
+1.377581e+02	1.186551e+01	1.186551e+01	2.007446e-02	1.180381e-03	1.180381e-03
+1.961423e+02	4.651872e+01	4.651872e+01	5.355213e-03	3.426689e-04	3.426689e-04
+6.213305e+02	3.786695e+02	3.786695e+02	1.064601e-04	1.463478e-05	1.463478e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d01-x01-y06
+Path=/REF/ATLAS_2017_I1589844_MU/d01-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	5.026395e+00	1.138510e+00	1.138510e+00
+1.300520e+00	1.120177e-01	1.120177e-01	7.064791e+00	1.377203e+00	1.377203e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.011198e+01	1.772341e+00	1.772341e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.493136e+01	2.131044e+00	2.131044e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.935026e+01	2.498820e+00	2.498820e+00
+2.594878e+00	2.235046e-01	2.235046e-01	2.554289e+01	2.917353e+00	2.917353e+00
+3.084019e+00	2.656357e-01	2.656357e-01	3.185762e+01	3.495927e+00	3.495927e+00
+3.665363e+00	3.157087e-01	3.157087e-01	3.680790e+01	3.417445e+00	3.417445e+00
+4.356292e+00	3.752204e-01	3.752204e-01	3.925983e+01	3.263206e+00	3.263206e+00
+5.177463e+00	4.459503e-01	4.459503e-01	3.806103e+01	2.585990e+00	2.585990e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.437418e+01	2.532062e+00	2.532062e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.832551e+01	2.932608e+00	2.932608e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.125015e+01	2.458701e+00	2.458701e+00
+1.033040e+01	8.897879e-01	8.897879e-01	1.569831e+01	1.772818e+00	1.772818e+00
+1.227770e+01	1.057515e+00	1.057515e+00	1.146950e+01	1.057360e+00	1.057360e+00
+1.459207e+01	1.256859e+00	1.256859e+00	8.173606e+00	3.808644e-01	3.808644e-01
+1.734271e+01	1.493779e+00	1.493779e+00	6.084104e+00	3.673885e-01	3.673885e-01
+2.061185e+01	1.775360e+00	1.775360e+00	4.559399e+00	3.934733e-01	3.934733e-01
+2.449723e+01	2.110020e+00	2.110020e+00	3.438216e+00	3.291714e-01	3.291714e-01
+2.911501e+01	2.507763e+00	2.507763e+00	2.590863e+00	2.375422e-01	2.375422e-01
+3.460326e+01	2.980482e+00	2.980482e+00	1.894800e+00	1.602624e-01	1.602624e-01
+4.112605e+01	3.542309e+00	3.542309e+00	1.341776e+00	1.010453e-01	1.010453e-01
+4.887840e+01	4.210043e+00	4.210043e+00	9.108951e-01	6.451331e-02	6.451331e-02
+5.809209e+01	5.003645e+00	5.003645e+00	5.936520e-01	3.993185e-02	3.993185e-02
+6.904258e+01	5.946843e+00	5.946843e+00	3.875928e-01	2.014963e-02	2.014963e-02
+8.205726e+01	7.067836e+00	7.067836e+00	2.416991e-01	1.231090e-02	1.231090e-02
+9.752523e+01	8.400139e+00	8.400139e+00	1.484650e-01	7.958954e-03	7.958954e-03
+1.159090e+02	9.983584e+00	9.983584e+00	8.610534e-02	4.620871e-03	4.620871e-03
+1.377581e+02	1.186551e+01	1.186551e+01	4.948377e-02	2.979784e-03	2.979784e-03
+1.961423e+02	4.651872e+01	4.651872e+01	1.515177e-02	1.007609e-03	1.007609e-03
+6.213305e+02	3.786695e+02	3.786695e+02	4.511159e-04	4.895730e-05	4.895730e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d01-x01-y08
+Path=/REF/ATLAS_2017_I1589844_MU/d01-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	2.140524e+00	8.120082e-01	8.120082e-01
+1.300520e+00	1.120177e-01	1.120177e-01	2.642372e+00	6.443953e-01	6.443953e-01
+1.545671e+00	1.331332e-01	1.331332e-01	3.240243e+00	7.587629e-01	7.587629e-01
+1.837033e+00	1.582291e-01	1.582291e-01	4.493157e+00	8.792785e-01	8.792785e-01
+2.183318e+00	1.880557e-01	1.880557e-01	5.409410e+00	9.191437e-01	9.191437e-01
+2.594878e+00	2.235046e-01	2.235046e-01	7.443397e+00	1.129511e+00	1.129511e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.015570e+00	1.172671e+00	1.172671e+00
+3.665363e+00	3.157087e-01	3.157087e-01	1.216738e+01	1.351261e+00	1.351261e+00
+4.356292e+00	3.752204e-01	3.752204e-01	1.514874e+01	1.504543e+00	1.504543e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.744598e+01	1.412676e+00	1.412676e+00
+6.153426e+00	5.300130e-01	5.300130e-01	1.977819e+01	1.471023e+00	1.471023e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.103805e+01	1.324354e+00	1.324354e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.107483e+01	1.223237e+00	1.223237e+00
+1.033040e+01	8.897879e-01	8.897879e-01	1.997679e+01	1.067052e+00	1.067052e+00
+1.227770e+01	1.057515e+00	1.057515e+00	1.762803e+01	8.065027e-01	8.065027e-01
+1.459207e+01	1.256859e+00	1.256859e+00	1.481611e+01	7.324409e-01	7.324409e-01
+1.734271e+01	1.493779e+00	1.493779e+00	1.153820e+01	4.853849e-01	4.853849e-01
+2.061185e+01	1.775360e+00	1.775360e+00	8.572226e+00	3.224268e-01	3.224268e-01
+2.449723e+01	2.110020e+00	2.110020e+00	6.043360e+00	2.697194e-01	2.697194e-01
+2.911501e+01	2.507763e+00	2.507763e+00	4.264073e+00	2.256532e-01	2.256532e-01
+3.460326e+01	2.980482e+00	2.980482e+00	2.947890e+00	1.660653e-01	1.660653e-01
+4.112605e+01	3.542309e+00	3.542309e+00	1.996719e+00	1.218428e-01	1.218428e-01
+4.887840e+01	4.210043e+00	4.210043e+00	1.334860e+00	7.509910e-02	7.509910e-02
+5.809209e+01	5.003645e+00	5.003645e+00	8.462506e-01	5.007346e-02	5.007346e-02
+6.904258e+01	5.946843e+00	5.946843e+00	5.250550e-01	3.429120e-02	3.429120e-02
+8.205726e+01	7.067836e+00	7.067836e+00	3.261205e-01	1.745130e-02	1.745130e-02
+9.752523e+01	8.400139e+00	8.400139e+00	1.990265e-01	1.079316e-02	1.079316e-02
+1.159090e+02	9.983584e+00	9.983584e+00	1.165856e-01	6.555164e-03	6.555164e-03
+1.377581e+02	1.186551e+01	1.186551e+01	6.653251e-02	4.147569e-03	4.147569e-03
+1.961423e+02	4.651872e+01	4.651872e+01	2.095795e-02	1.430811e-03	1.430811e-03
+6.213305e+02	3.786695e+02	3.786695e+02	5.946527e-04	6.802584e-05	6.802584e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d02-x01-y02
+Path=/REF/ATLAS_2017_I1589844_MU/d02-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	4.251658e+01	1.566065e+00	1.566065e+00
+1.300520e+00	1.120177e-01	1.120177e-01	5.347048e+01	1.698262e+00	1.698262e+00
+1.545671e+00	1.331332e-01	1.331332e-01	6.865451e+01	2.399943e+00	2.399943e+00
+1.837033e+00	1.582291e-01	1.582291e-01	7.857296e+01	2.556877e+00	2.556877e+00
+2.183318e+00	1.880557e-01	1.880557e-01	8.720231e+01	2.750437e+00	2.750437e+00
+2.594878e+00	2.235046e-01	2.235046e-01	9.337012e+01	3.065478e+00	3.065478e+00
+3.084019e+00	2.656357e-01	2.656357e-01	8.859543e+01	2.897633e+00	2.897633e+00
+3.665363e+00	3.157087e-01	3.157087e-01	7.455953e+01	2.508455e+00	2.508455e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.829047e+01	1.991888e+00	1.991888e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.022941e+01	1.440183e+00	1.440183e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.504355e+01	9.844996e-01	9.844996e-01
+7.313361e+00	6.299216e-01	6.299216e-01	1.507121e+01	6.011462e-01	6.011462e-01
+8.691946e+00	7.486632e-01	7.486632e-01	8.787865e+00	3.656542e-01	3.656542e-01
+1.033040e+01	8.897879e-01	8.897879e-01	5.257721e+00	2.323279e-01	2.323279e-01
+1.227770e+01	1.057515e+00	1.057515e+00	3.288535e+00	1.580652e-01	1.580652e-01
+1.459207e+01	1.256859e+00	1.256859e+00	2.042152e+00	1.013971e-01	1.013971e-01
+1.734271e+01	1.493779e+00	1.493779e+00	1.274409e+00	6.704191e-02	6.704191e-02
+2.061185e+01	1.775360e+00	1.775360e+00	8.054232e-01	4.494587e-02	4.494587e-02
+2.449723e+01	2.110020e+00	2.110020e+00	4.916852e-01	2.996955e-02	2.996955e-02
+2.911501e+01	2.507763e+00	2.507763e+00	3.015235e-01	1.926580e-02	1.926580e-02
+3.460326e+01	2.980482e+00	2.980482e+00	1.787215e-01	1.213894e-02	1.213894e-02
+4.112605e+01	3.542309e+00	3.542309e+00	1.052898e-01	7.624179e-03	7.624179e-03
+4.887840e+01	4.210043e+00	4.210043e+00	6.465946e-02	5.033112e-03	5.033112e-03
+5.809209e+01	5.003645e+00	5.003645e+00	3.583416e-02	2.904991e-03	2.904991e-03
+6.904258e+01	5.946843e+00	5.946843e+00	1.924695e-02	1.704510e-03	1.704510e-03
+9.830401e+01	2.331459e+01	2.331459e+01	6.161733e-03	6.179331e-04	6.179331e-04
+3.114029e+02	1.897843e+02	1.897843e+02	2.084350e-04	5.042981e-05	5.042981e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d02-x01-y04
+Path=/REF/ATLAS_2017_I1589844_MU/d02-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	2.213549e+01	1.257319e+00	1.257319e+00
+1.300520e+00	1.120177e-01	1.120177e-01	2.578350e+01	9.251823e-01	9.251823e-01
+1.545671e+00	1.331332e-01	1.331332e-01	3.036665e+01	1.294972e+00	1.294972e+00
+1.837033e+00	1.582291e-01	1.582291e-01	3.572293e+01	1.370832e+00	1.370832e+00
+2.183318e+00	1.880557e-01	1.880557e-01	4.079239e+01	1.416067e+00	1.416067e+00
+2.594878e+00	2.235046e-01	2.235046e-01	4.456356e+01	1.315123e+00	1.315123e+00
+3.084019e+00	2.656357e-01	2.656357e-01	4.837683e+01	1.402558e+00	1.402558e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.148847e+01	1.505844e+00	1.505844e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.019930e+01	1.479742e+00	1.479742e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.733873e+01	1.443311e+00	1.443311e+00
+6.153426e+00	5.300130e-01	5.300130e-01	4.073097e+01	1.296580e+00	1.296580e+00
+7.313361e+00	6.299216e-01	6.299216e-01	3.224517e+01	1.087139e+00	1.087139e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.355572e+01	8.613873e-01	8.613873e-01
+1.033040e+01	8.897879e-01	8.897879e-01	1.561065e+01	5.915471e-01	5.915471e-01
+1.227770e+01	1.057515e+00	1.057515e+00	9.550952e+00	3.961028e-01	3.961028e-01
+1.459207e+01	1.256859e+00	1.256859e+00	5.369347e+00	2.376030e-01	2.376030e-01
+1.734271e+01	1.493779e+00	1.493779e+00	2.976504e+00	1.412455e-01	1.412455e-01
+2.061185e+01	1.775360e+00	1.775360e+00	1.628869e+00	8.204071e-02	8.204071e-02
+2.449723e+01	2.110020e+00	2.110020e+00	9.015307e-01	4.915482e-02	4.915482e-02
+2.911501e+01	2.507763e+00	2.507763e+00	4.935663e-01	2.931522e-02	2.931522e-02
+3.460326e+01	2.980482e+00	2.980482e+00	2.769087e-01	1.751636e-02	1.751636e-02
+4.112605e+01	3.542309e+00	3.542309e+00	1.599571e-01	1.084167e-02	1.084167e-02
+4.887840e+01	4.210043e+00	4.210043e+00	9.306745e-02	6.805731e-03	6.805731e-03
+5.809209e+01	5.003645e+00	5.003645e+00	5.227408e-02	4.043149e-03	4.043149e-03
+6.904258e+01	5.946843e+00	5.946843e+00	2.779982e-02	2.358778e-03	2.358778e-03
+9.830401e+01	2.331459e+01	2.331459e+01	8.619561e-03	8.318715e-04	8.318715e-04
+3.114029e+02	1.897843e+02	1.897843e+02	2.994644e-04	5.719088e-05	5.719088e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d02-x01-y06
+Path=/REF/ATLAS_2017_I1589844_MU/d02-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.489763e+01	2.353181e+00	2.353181e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.982360e+01	2.603555e+00	2.603555e+00
+1.545671e+00	1.331332e-01	1.331332e-01	2.587930e+01	3.219879e+00	3.219879e+00
+1.837033e+00	1.582291e-01	1.582291e-01	3.255242e+01	3.668543e+00	3.668543e+00
+2.183318e+00	1.880557e-01	1.880557e-01	4.233328e+01	3.999467e+00	3.999467e+00
+2.594878e+00	2.235046e-01	2.235046e-01	5.087246e+01	4.713882e+00	4.713882e+00
+3.084019e+00	2.656357e-01	2.656357e-01	5.801644e+01	4.864634e+00	4.864634e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.193357e+01	4.588721e+00	4.588721e+00
+4.356292e+00	3.752204e-01	3.752204e-01	6.020458e+01	3.772272e+00	3.772272e+00
+5.177463e+00	4.459503e-01	4.459503e-01	5.336661e+01	3.275211e+00	3.275211e+00
+6.153426e+00	5.300130e-01	5.300130e-01	4.188339e+01	3.227490e+00	3.227490e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.957067e+01	2.899641e+00	2.899641e+00
+8.691946e+00	7.486632e-01	7.486632e-01	1.901814e+01	2.029827e+00	2.029827e+00
+1.033040e+01	8.897879e-01	8.897879e-01	1.152678e+01	9.587638e-01	9.587638e-01
+1.227770e+01	1.057515e+00	1.057515e+00	6.944233e+00	4.382270e-01	4.382270e-01
+1.459207e+01	1.256859e+00	1.256859e+00	4.231061e+00	2.760548e-01	2.760548e-01
+1.734271e+01	1.493779e+00	1.493779e+00	2.727649e+00	2.140536e-01	2.140536e-01
+2.061185e+01	1.775360e+00	1.775360e+00	1.782786e+00	1.685825e-01	1.685825e-01
+2.449723e+01	2.110020e+00	2.110020e+00	1.175197e+00	1.042250e-01	1.042250e-01
+2.911501e+01	2.507763e+00	2.507763e+00	7.742704e-01	6.094456e-02	6.094456e-02
+3.460326e+01	2.980482e+00	2.980482e+00	5.012703e-01	3.459606e-02	3.459606e-02
+4.112605e+01	3.542309e+00	3.542309e+00	3.078006e-01	1.991102e-02	1.991102e-02
+4.887840e+01	4.210043e+00	4.210043e+00	1.839932e-01	1.264942e-02	1.264942e-02
+5.809209e+01	5.003645e+00	5.003645e+00	1.097354e-01	7.702506e-03	7.702506e-03
+6.904258e+01	5.946843e+00	5.946843e+00	6.628384e-02	4.968150e-03	4.968150e-03
+9.830401e+01	2.331459e+01	2.331459e+01	2.429788e-02	2.096348e-03	2.096348e-03
+3.114029e+02	1.897843e+02	1.897843e+02	1.114871e-03	3.088679e-04	3.088679e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d02-x01-y08
+Path=/REF/ATLAS_2017_I1589844_MU/d02-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	8.049465e+00	1.627731e+00	1.627731e+00
+1.300520e+00	1.120177e-01	1.120177e-01	8.990596e+00	1.624231e+00	1.624231e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.076139e+01	1.909451e+00	1.909451e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.224761e+01	2.313692e+00	2.313692e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.547082e+01	2.384618e+00	2.384618e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.915081e+01	2.414434e+00	2.414434e+00
+3.084019e+00	2.656357e-01	2.656357e-01	2.210513e+01	2.659900e+00	2.659900e+00
+3.665363e+00	3.157087e-01	3.157087e-01	2.681122e+01	2.366631e+00	2.366631e+00
+4.356292e+00	3.752204e-01	3.752204e-01	3.082771e+01	2.181140e+00	2.181140e+00
+5.177463e+00	4.459503e-01	4.459503e-01	3.368383e+01	2.067661e+00	2.067661e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.408435e+01	1.837770e+00	1.837770e+00
+7.313361e+00	6.299216e-01	6.299216e-01	3.238250e+01	1.563845e+00	1.563845e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.943282e+01	1.655684e+00	1.655684e+00
+1.033040e+01	8.897879e-01	8.897879e-01	2.385918e+01	1.174033e+00	1.174033e+00
+1.227770e+01	1.057515e+00	1.057515e+00	1.797710e+01	8.721781e-01	8.721781e-01
+1.459207e+01	1.256859e+00	1.256859e+00	1.253059e+01	5.659160e-01	5.659160e-01
+1.734271e+01	1.493779e+00	1.493779e+00	7.964495e+00	3.510716e-01	3.510716e-01
+2.061185e+01	1.775360e+00	1.775360e+00	4.792676e+00	2.437191e-01	2.437191e-01
+2.449723e+01	2.110020e+00	2.110020e+00	2.751965e+00	1.694596e-01	1.694596e-01
+2.911501e+01	2.507763e+00	2.507763e+00	1.561784e+00	1.081239e-01	1.081239e-01
+3.460326e+01	2.980482e+00	2.980482e+00	9.004670e-01	5.119386e-02	5.119386e-02
+4.112605e+01	3.542309e+00	3.542309e+00	5.182805e-01	2.835630e-02	2.835630e-02
+4.887840e+01	4.210043e+00	4.210043e+00	2.938264e-01	1.749024e-02	1.749024e-02
+5.809209e+01	5.003645e+00	5.003645e+00	1.663662e-01	1.081333e-02	1.081333e-02
+6.904258e+01	5.946843e+00	5.946843e+00	9.636735e-02	6.718521e-03	6.718521e-03
+9.830401e+01	2.331459e+01	2.331459e+01	3.556128e-02	3.074905e-03	3.074905e-03
+3.114029e+02	1.897843e+02	1.897843e+02	1.537270e-03	4.326461e-04	4.326461e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d03-x01-y02
+Path=/REF/ATLAS_2017_I1589844_MU/d03-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	6.913391e+01	2.533522e+00	2.533522e+00
+1.300520e+00	1.120177e-01	1.120177e-01	8.657180e+01	3.283696e+00	3.283696e+00
+1.545671e+00	1.331332e-01	1.331332e-01	9.881895e+01	3.335522e+00	3.335522e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.131585e+02	3.660216e+00	3.660216e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.181065e+02	3.785198e+00	3.785198e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.138350e+02	3.772396e+00	3.772396e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.572317e+01	3.226374e+00	3.226374e+00
+3.665363e+00	3.157087e-01	3.157087e-01	7.176193e+01	2.561989e+00	2.561989e+00
+4.356292e+00	3.752204e-01	3.752204e-01	4.867972e+01	1.868982e+00	1.868982e+00
+5.177463e+00	4.459503e-01	4.459503e-01	2.846156e+01	1.188777e+00	1.188777e+00
+6.153426e+00	5.300130e-01	5.300130e-01	1.549413e+01	6.935612e-01	6.935612e-01
+7.313361e+00	6.299216e-01	6.299216e-01	7.874323e+00	3.838026e-01	3.838026e-01
+8.691946e+00	7.486632e-01	7.486632e-01	4.064096e+00	2.178716e-01	2.178716e-01
+1.033040e+01	8.897879e-01	8.897879e-01	2.139051e+00	1.241570e-01	1.241570e-01
+1.227770e+01	1.057515e+00	1.057515e+00	1.134773e+00	7.093575e-02	7.093575e-02
+1.459207e+01	1.256859e+00	1.256859e+00	6.540028e-01	4.373642e-02	4.373642e-02
+1.734271e+01	1.493779e+00	1.493779e+00	3.781698e-01	2.689145e-02	2.689145e-02
+2.061185e+01	1.775360e+00	1.775360e+00	2.121876e-01	1.593806e-02	1.593806e-02
+2.449723e+01	2.110020e+00	2.110020e+00	1.083296e-01	9.433377e-03	9.433377e-03
+2.911501e+01	2.507763e+00	2.507763e+00	6.069497e-02	5.303741e-03	5.303741e-03
+4.235561e+01	1.073283e+01	1.073283e+01	1.964958e-02	1.895753e-03	1.895753e-03
+1.521385e+02	9.905010e+01	9.905010e+01	4.600536e-04	9.522037e-05	9.522037e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d03-x01-y04
+Path=/REF/ATLAS_2017_I1589844_MU/d03-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	3.825805e+01	2.132329e+00	2.132329e+00
+1.300520e+00	1.120177e-01	1.120177e-01	4.456967e+01	1.874852e+00	1.874852e+00
+1.545671e+00	1.331332e-01	1.331332e-01	5.186146e+01	2.073565e+00	2.073565e+00
+1.837033e+00	1.582291e-01	1.582291e-01	5.725064e+01	2.240922e+00	2.240922e+00
+2.183318e+00	1.880557e-01	1.880557e-01	6.164457e+01	2.013365e+00	2.013365e+00
+2.594878e+00	2.235046e-01	2.235046e-01	6.581330e+01	1.969264e+00	1.969264e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.706655e+01	1.959374e+00	1.959374e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.342732e+01	1.889673e+00	1.889673e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.799750e+01	1.819163e+00	1.819163e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.842780e+01	1.617673e+00	1.617673e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.718619e+01	1.371325e+00	1.371325e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.584674e+01	1.036562e+00	1.036562e+00
+8.691946e+00	7.486632e-01	7.486632e-01	1.614116e+01	7.093522e-01	7.093522e-01
+1.033040e+01	8.897879e-01	8.897879e-01	9.045228e+00	4.474669e-01	4.474669e-01
+1.227770e+01	1.057515e+00	1.057515e+00	4.427789e+00	2.435580e-01	2.435580e-01
+1.459207e+01	1.256859e+00	1.256859e+00	2.019382e+00	1.234920e-01	1.234920e-01
+1.734271e+01	1.493779e+00	1.493779e+00	9.245877e-01	6.312702e-02	6.312702e-02
+2.061185e+01	1.775360e+00	1.775360e+00	4.259970e-01	3.223159e-02	3.223159e-02
+2.449723e+01	2.110020e+00	2.110020e+00	1.973009e-01	1.669273e-02	1.669273e-02
+2.911501e+01	2.507763e+00	2.507763e+00	9.582690e-02	9.407234e-03	9.407234e-03
+4.235561e+01	1.073283e+01	1.073283e+01	2.485965e-02	2.980908e-03	2.980908e-03
+1.521385e+02	9.905010e+01	9.905010e+01	6.553450e-04	2.239677e-04	2.239677e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d03-x01-y06
+Path=/REF/ATLAS_2017_I1589844_MU/d03-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	2.881642e+01	3.184287e+00	3.184287e+00
+1.300520e+00	1.120177e-01	1.120177e-01	3.541813e+01	4.103723e+00	4.103723e+00
+1.545671e+00	1.331332e-01	1.331332e-01	4.309837e+01	4.948677e+00	4.948677e+00
+1.837033e+00	1.582291e-01	1.582291e-01	5.446910e+01	5.105418e+00	5.105418e+00
+2.183318e+00	1.880557e-01	1.880557e-01	6.478630e+01	5.780485e+00	5.780485e+00
+2.594878e+00	2.235046e-01	2.235046e-01	7.364876e+01	5.943595e+00	5.943595e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.815995e+01	5.620889e+00	5.620889e+00
+3.665363e+00	3.157087e-01	3.157087e-01	7.694848e+01	4.621943e+00	4.621943e+00
+4.356292e+00	3.752204e-01	3.752204e-01	6.738364e+01	3.852427e+00	3.852427e+00
+5.177463e+00	4.459503e-01	4.459503e-01	5.286911e+01	3.498016e+00	3.498016e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.679335e+01	3.225438e+00	3.225438e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.254818e+01	2.250628e+00	2.250628e+00
+8.691946e+00	7.486632e-01	7.486632e-01	1.275560e+01	1.281082e+00	1.281082e+00
+1.033040e+01	8.897879e-01	8.897879e-01	6.770748e+00	5.681592e-01	5.681592e-01
+1.227770e+01	1.057515e+00	1.057515e+00	3.611050e+00	2.702737e-01	2.702737e-01
+1.459207e+01	1.256859e+00	1.256859e+00	1.956713e+00	1.317371e-01	1.317371e-01
+1.734271e+01	1.493779e+00	1.493779e+00	1.102316e+00	8.512634e-02	8.512634e-02
+2.061185e+01	1.775360e+00	1.775360e+00	6.606707e-01	5.283885e-02	5.283885e-02
+2.449723e+01	2.110020e+00	2.110020e+00	3.906399e-01	3.097488e-02	3.097488e-02
+2.911501e+01	2.507763e+00	2.507763e+00	2.318652e-01	1.783598e-02	1.783598e-02
+4.235561e+01	1.073283e+01	1.073283e+01	7.602995e-02	6.518094e-03	6.518094e-03
+1.521385e+02	9.905010e+01	9.905010e+01	2.549474e-03	9.406611e-04	9.406611e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d03-x01-y08
+Path=/REF/ATLAS_2017_I1589844_MU/d03-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.682484e+01	2.775045e+00	2.775045e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.828133e+01	2.959732e+00	2.959732e+00
+1.545671e+00	1.331332e-01	1.331332e-01	2.046424e+01	3.454675e+00	3.454675e+00
+1.837033e+00	1.582291e-01	1.582291e-01	2.362836e+01	3.753439e+00	3.753439e+00
+2.183318e+00	1.880557e-01	1.880557e-01	2.766107e+01	3.787512e+00	3.787512e+00
+2.594878e+00	2.235046e-01	2.235046e-01	3.191776e+01	3.914413e+00	3.914413e+00
+3.084019e+00	2.656357e-01	2.656357e-01	3.666802e+01	3.333615e+00	3.333615e+00
+3.665363e+00	3.157087e-01	3.157087e-01	4.147307e+01	2.770658e+00	2.770658e+00
+4.356292e+00	3.752204e-01	3.752204e-01	4.339596e+01	2.367097e+00	2.367097e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.334516e+01	2.025415e+00	2.025415e+00
+6.153426e+00	5.300130e-01	5.300130e-01	4.085062e+01	1.782907e+00	1.782907e+00
+7.313361e+00	6.299216e-01	6.299216e-01	3.558937e+01	1.627386e+00	1.627386e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.837609e+01	1.360519e+00	1.360519e+00
+1.033040e+01	8.897879e-01	8.897879e-01	2.084315e+01	1.203209e+00	1.203209e+00
+1.227770e+01	1.057515e+00	1.057515e+00	1.373487e+01	7.509009e-01	7.509009e-01
+1.459207e+01	1.256859e+00	1.256859e+00	8.163879e+00	3.989291e-01	3.989291e-01
+1.734271e+01	1.493779e+00	1.493779e+00	4.385102e+00	2.193429e-01	2.193429e-01
+2.061185e+01	1.775360e+00	1.775360e+00	2.196628e+00	1.176876e-01	1.176876e-01
+2.449723e+01	2.110020e+00	2.110020e+00	1.015347e+00	6.840886e-02	6.840886e-02
+2.911501e+01	2.507763e+00	2.507763e+00	4.771861e-01	3.368109e-02	3.368109e-02
+4.235561e+01	1.073283e+01	1.073283e+01	1.242446e-01	9.750337e-03	9.750337e-03
+1.521385e+02	9.905010e+01	9.905010e+01	3.307380e-03	1.247744e-03	1.247744e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d04-x01-y02
+Path=/REF/ATLAS_2017_I1589844_MU/d04-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	9.885554e+01	3.200561e+00	3.200561e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.162535e+02	3.652068e+00	3.652068e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.313626e+02	3.959102e+00	3.959102e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.383518e+02	4.186373e+00	4.186373e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.331527e+02	4.168645e+00	4.168645e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.164478e+02	3.919994e+00	3.919994e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.036059e+01	3.300918e+00	3.300918e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.110676e+01	2.499161e+00	2.499161e+00
+4.356292e+00	3.752204e-01	3.752204e-01	3.596948e+01	1.632962e+00	1.632962e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.816566e+01	9.529880e-01	9.529880e-01
+6.153426e+00	5.300130e-01	5.300130e-01	8.539847e+00	5.009957e-01	5.009957e-01
+7.313361e+00	6.299216e-01	6.299216e-01	3.888558e+00	2.581566e-01	2.581566e-01
+8.691946e+00	7.486632e-01	7.486632e-01	1.786535e+00	1.344000e-01	1.344000e-01
+1.033040e+01	8.897879e-01	8.897879e-01	8.314956e-01	6.952058e-02	6.952058e-02
+1.227770e+01	1.057515e+00	1.057515e+00	4.054816e-01	3.738897e-02	3.738897e-02
+1.459207e+01	1.256859e+00	1.256859e+00	2.128298e-01	2.141584e-02	2.141584e-02
+1.734271e+01	1.493779e+00	1.493779e+00	1.053347e-01	1.161575e-02	1.161575e-02
+2.578528e+01	6.948789e+00	6.948789e+00	2.816600e-02	3.624671e-03	3.624671e-03
+1.052810e+02	7.254694e+01	7.254694e+01	4.449689e-04	2.717053e-04	2.717053e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d04-x01-y04
+Path=/REF/ATLAS_2017_I1589844_MU/d04-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	5.882263e+01	2.292783e+00	2.292783e+00
+1.300520e+00	1.120177e-01	1.120177e-01	6.470283e+01	2.500564e+00	2.500564e+00
+1.545671e+00	1.331332e-01	1.331332e-01	7.250723e+01	2.580587e+00	2.580587e+00
+1.837033e+00	1.582291e-01	1.582291e-01	7.702788e+01	2.377931e+00	2.377931e+00
+2.183318e+00	1.880557e-01	1.880557e-01	8.054703e+01	2.292748e+00	2.292748e+00
+2.594878e+00	2.235046e-01	2.235046e-01	8.048331e+01	2.228106e+00	2.228106e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.567593e+01	2.181178e+00	2.181178e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.775227e+01	2.095443e+00	2.095443e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.645931e+01	1.913337e+00	1.913337e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.313660e+01	1.628139e+00	1.628139e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.935159e+01	1.252820e+00	1.252820e+00
+7.313361e+00	6.299216e-01	6.299216e-01	1.791051e+01	8.553304e-01	8.553304e-01
+8.691946e+00	7.486632e-01	7.486632e-01	9.604666e+00	5.329800e-01	5.329800e-01
+1.033040e+01	8.897879e-01	8.897879e-01	4.453450e+00	2.837638e-01	2.837638e-01
+1.227770e+01	1.057515e+00	1.057515e+00	1.813519e+00	1.315454e-01	1.315454e-01
+1.459207e+01	1.256859e+00	1.256859e+00	6.817703e-01	5.765197e-02	5.765197e-02
+1.734271e+01	1.493779e+00	1.493779e+00	2.490194e-01	2.471691e-02	2.471691e-02
+2.578528e+01	6.948789e+00	6.948789e+00	4.029429e-02	5.628156e-03	5.628156e-03
+1.052810e+02	7.254694e+01	7.254694e+01	5.240726e-04	3.465856e-04	3.465856e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d04-x01-y06
+Path=/REF/ATLAS_2017_I1589844_MU/d04-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	4.435487e+01	3.889083e+00	3.889083e+00
+1.300520e+00	1.120177e-01	1.120177e-01	5.209309e+01	4.855428e+00	4.855428e+00
+1.545671e+00	1.331332e-01	1.331332e-01	6.287368e+01	5.572386e+00	5.572386e+00
+1.837033e+00	1.582291e-01	1.582291e-01	7.545967e+01	6.059383e+00	6.059383e+00
+2.183318e+00	1.880557e-01	1.880557e-01	8.598034e+01	6.488784e+00	6.488784e+00
+2.594878e+00	2.235046e-01	2.235046e-01	9.154772e+01	6.141299e+00	6.141299e+00
+3.084019e+00	2.656357e-01	2.656357e-01	8.997620e+01	5.433714e+00	5.433714e+00
+3.665363e+00	3.157087e-01	3.157087e-01	8.130906e+01	4.501465e+00	4.501465e+00
+4.356292e+00	3.752204e-01	3.752204e-01	6.498983e+01	3.862690e+00	3.862690e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.646111e+01	3.652489e+00	3.652489e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.878732e+01	2.937814e+00	2.937814e+00
+7.313361e+00	6.299216e-01	6.299216e-01	1.569215e+01	1.807114e+00	1.807114e+00
+8.691946e+00	7.486632e-01	7.486632e-01	7.814674e+00	9.384991e-01	9.384991e-01
+1.033040e+01	8.897879e-01	8.897879e-01	3.667297e+00	3.611024e-01	3.611024e-01
+1.227770e+01	1.057515e+00	1.057515e+00	1.739567e+00	1.507552e-01	1.507552e-01
+1.459207e+01	1.256859e+00	1.256859e+00	8.788418e-01	7.414731e-02	7.414731e-02
+1.734271e+01	1.493779e+00	1.493779e+00	4.568760e-01	3.994794e-02	3.994794e-02
+2.578528e+01	6.948789e+00	6.948789e+00	1.258431e-01	1.477115e-02	1.477115e-02
+1.052810e+02	7.254694e+01	7.254694e+01	2.892487e-03	1.477522e-03	1.477522e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d04-x01-y08
+Path=/REF/ATLAS_2017_I1589844_MU/d04-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	2.776041e+01	3.719074e+00	3.719074e+00
+1.300520e+00	1.120177e-01	1.120177e-01	2.870623e+01	4.074104e+00	4.074104e+00
+1.545671e+00	1.331332e-01	1.331332e-01	3.277519e+01	4.122582e+00	4.122582e+00
+1.837033e+00	1.582291e-01	1.582291e-01	3.618779e+01	4.839969e+00	4.839969e+00
+2.183318e+00	1.880557e-01	1.880557e-01	4.078765e+01	4.392209e+00	4.392209e+00
+2.594878e+00	2.235046e-01	2.235046e-01	4.594333e+01	3.956333e+00	3.956333e+00
+3.084019e+00	2.656357e-01	2.656357e-01	5.023071e+01	3.190471e+00	3.190471e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.215694e+01	2.599895e+00	2.599895e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.091776e+01	2.394251e+00	2.394251e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.784093e+01	1.870451e+00	1.870451e+00
+6.153426e+00	5.300130e-01	5.300130e-01	4.174255e+01	1.756402e+00	1.756402e+00
+7.313361e+00	6.299216e-01	6.299216e-01	3.366862e+01	1.808922e+00	1.808922e+00
+8.691946e+00	7.486632e-01	7.486632e-01	2.424719e+01	1.453099e+00	1.453099e+00
+1.033040e+01	8.897879e-01	8.897879e-01	1.564452e+01	9.437791e-01	9.437791e-01
+1.227770e+01	1.057515e+00	1.057515e+00	9.107407e+00	5.754803e-01	5.754803e-01
+1.459207e+01	1.256859e+00	1.256859e+00	4.760648e+00	3.105451e-01	3.105451e-01
+1.734271e+01	1.493779e+00	1.493779e+00	2.128365e+00	1.355363e-01	1.355363e-01
+2.578528e+01	6.948789e+00	6.948789e+00	3.678572e-01	2.884769e-02	2.884769e-02
+1.052810e+02	7.254694e+01	7.254694e+01	3.394696e-03	1.648326e-03	1.648326e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d05-x01-y02
+Path=/REF/ATLAS_2017_I1589844_MU/d05-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.282547e+02	4.495419e+00	4.495419e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.441616e+02	4.551329e+00	4.551329e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.554467e+02	4.930296e+00	4.930296e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.518138e+02	4.855627e+00	4.855627e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.381979e+02	4.674796e+00	4.674796e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.120464e+02	4.152741e+00	4.152741e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.927851e+01	3.243676e+00	3.243676e+00
+3.665363e+00	3.157087e-01	3.157087e-01	4.794843e+01	2.249475e+00	2.249475e+00
+4.356292e+00	3.752204e-01	3.752204e-01	2.456896e+01	1.325989e+00	1.325989e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.126478e+01	7.082665e-01	7.082665e-01
+6.153426e+00	5.300130e-01	5.300130e-01	4.576736e+00	3.390739e-01	3.390739e-01
+7.313361e+00	6.299216e-01	6.299216e-01	1.839542e+00	1.599527e-01	1.599527e-01
+8.691946e+00	7.486632e-01	7.486632e-01	7.291075e-01	7.403617e-02	7.403617e-02
+1.033040e+01	8.897879e-01	8.897879e-01	3.266208e-01	3.823044e-02	3.823044e-02
+1.470860e+01	3.488412e+00	3.488412e+00	8.094901e-02	1.213269e-02	1.213269e-02
+4.659321e+01	2.839621e+01	2.839621e+01	1.955645e-03	6.906708e-04	6.906708e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d05-x01-y04
+Path=/REF/ATLAS_2017_I1589844_MU/d05-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	7.784720e+01	3.466123e+00	3.466123e+00
+1.300520e+00	1.120177e-01	1.120177e-01	8.471003e+01	3.403124e+00	3.403124e+00
+1.545671e+00	1.331332e-01	1.331332e-01	9.270208e+01	3.409070e+00	3.409070e+00
+1.837033e+00	1.582291e-01	1.582291e-01	9.361033e+01	2.937067e+00	2.937067e+00
+2.183318e+00	1.880557e-01	1.880557e-01	9.303931e+01	2.684748e+00	2.684748e+00
+2.594878e+00	2.235046e-01	2.235046e-01	8.780759e+01	2.532749e+00	2.532749e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.869744e+01	2.422137e+00	2.422137e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.538040e+01	2.230595e+00	2.230595e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.021120e+01	1.934217e+00	1.934217e+00
+5.177463e+00	4.459503e-01	4.459503e-01	3.455953e+01	1.504869e+00	1.504869e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.137445e+01	1.058821e+00	1.058821e+00
+7.313361e+00	6.299216e-01	6.299216e-01	1.152285e+01	6.473931e-01	6.473931e-01
+8.691946e+00	7.486632e-01	7.486632e-01	5.180351e+00	3.424252e-01	3.424252e-01
+1.033040e+01	8.897879e-01	8.897879e-01	1.953442e+00	1.476519e-01	1.476519e-01
+1.470860e+01	3.488412e+00	3.488412e+00	2.899589e-01	3.034985e-02	3.034985e-02
+4.659321e+01	2.839621e+01	2.839621e+01	2.310976e-03	1.034278e-03	1.034278e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d05-x01-y06
+Path=/REF/ATLAS_2017_I1589844_MU/d05-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	5.975401e+01	4.780191e+00	4.780191e+00
+1.300520e+00	1.120177e-01	1.120177e-01	7.037482e+01	5.031803e+00	5.031803e+00
+1.545671e+00	1.331332e-01	1.331332e-01	8.180272e+01	6.433829e+00	6.433829e+00
+1.837033e+00	1.582291e-01	1.582291e-01	9.500909e+01	6.471448e+00	6.471448e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.031646e+02	6.682150e+00	6.682150e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.037997e+02	5.923222e+00	5.923222e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.493794e+01	5.171054e+00	5.171054e+00
+3.665363e+00	3.157087e-01	3.157087e-01	7.917580e+01	4.403367e+00	4.403367e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.899103e+01	4.399506e+00	4.399506e+00
+5.177463e+00	4.459503e-01	4.459503e-01	3.807908e+01	3.763334e+00	3.763334e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.109440e+01	2.316910e+00	2.316910e+00
+7.313361e+00	6.299216e-01	6.299216e-01	1.046011e+01	1.423077e+00	1.423077e+00
+8.691946e+00	7.486632e-01	7.486632e-01	4.573584e+00	5.710347e-01	5.710347e-01
+1.033040e+01	8.897879e-01	8.897879e-01	1.947476e+00	2.191623e-01	2.191623e-01
+1.470860e+01	3.488412e+00	3.488412e+00	4.517690e-01	4.478067e-02	4.478067e-02
+4.659321e+01	2.839621e+01	2.839621e+01	1.251025e-02	6.122581e-03	6.122581e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d05-x01-y08
+Path=/REF/ATLAS_2017_I1589844_MU/d05-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	4.051657e+01	4.331477e+00	4.331477e+00
+1.300520e+00	1.120177e-01	1.120177e-01	4.214451e+01	4.325586e+00	4.325586e+00
+1.545671e+00	1.331332e-01	1.331332e-01	4.500144e+01	5.369061e+00	5.369061e+00
+1.837033e+00	1.582291e-01	1.582291e-01	4.997332e+01	4.513757e+00	4.513757e+00
+2.183318e+00	1.880557e-01	1.880557e-01	5.386147e+01	4.881501e+00	4.881501e+00
+2.594878e+00	2.235046e-01	2.235046e-01	5.801363e+01	4.263432e+00	4.263432e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.003854e+01	3.248399e+00	3.248399e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.921527e+01	2.602904e+00	2.602904e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.479089e+01	2.198592e+00	2.198592e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.818663e+01	1.861504e+00	1.861504e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.871403e+01	1.744075e+00	1.744075e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.857481e+01	1.653738e+00	1.653738e+00
+8.691946e+00	7.486632e-01	7.486632e-01	1.898611e+01	1.313188e+00	1.313188e+00
+1.033040e+01	8.897879e-01	8.897879e-01	1.114301e+01	8.578990e-01	8.578990e-01
+1.470860e+01	3.488412e+00	3.488412e+00	2.975518e+00	2.320256e-01	2.320256e-01
+4.659321e+01	2.839621e+01	2.839621e+01	3.408777e-02	1.255299e-02	1.255299e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d06-x01-y02
+Path=/REF/ATLAS_2017_I1589844_MU/d06-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.540999e+02	5.400660e+00	5.400660e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.677234e+02	5.670468e+00	5.670468e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.690748e+02	5.730831e+00	5.730831e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.605293e+02	5.573070e+00	5.573070e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.361445e+02	5.074010e+00	5.074010e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.018434e+02	4.222728e+00	4.222728e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.570199e+01	3.055339e+00	3.055339e+00
+3.665363e+00	3.157087e-01	3.157087e-01	3.587913e+01	1.938509e+00	1.938509e+00
+4.356292e+00	3.752204e-01	3.752204e-01	1.653357e+01	1.050642e+00	1.050642e+00
+5.177463e+00	4.459503e-01	4.459503e-01	6.614902e+00	5.066172e-01	5.066172e-01
+6.153426e+00	5.300130e-01	5.300130e-01	2.430457e+00	2.259669e-01	2.259669e-01
+7.313361e+00	6.299216e-01	6.299216e-01	8.518671e-01	9.737783e-02	9.737783e-02
+8.691946e+00	7.486632e-01	7.486632e-01	3.119018e-01	4.348545e-02	4.348545e-02
+1.186477e+01	2.424165e+00	2.424165e+00	7.097755e-02	1.314645e-02	1.314645e-02
+3.368869e+01	1.939975e+01	1.939975e+01	1.964470e-03	6.198766e-04	6.198766e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d06-x01-y04
+Path=/REF/ATLAS_2017_I1589844_MU/d06-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.009206e+02	4.254964e+00	4.254964e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.032097e+02	3.947937e+00	3.947937e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.078605e+02	3.754433e+00	3.754433e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.062566e+02	3.310802e+00	3.310802e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.003631e+02	3.032044e+00	3.032044e+00
+2.594878e+00	2.235046e-01	2.235046e-01	9.012799e+01	2.828788e+00	2.828788e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.600011e+01	2.605077e+00	2.605077e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.914099e+01	2.295534e+00	2.295534e+00
+4.356292e+00	3.752204e-01	3.752204e-01	4.145433e+01	1.824427e+00	1.824427e+00
+5.177463e+00	4.459503e-01	4.459503e-01	2.622124e+01	1.308172e+00	1.308172e+00
+6.153426e+00	5.300130e-01	5.300130e-01	1.445378e+01	8.218370e-01	8.218370e-01
+7.313361e+00	6.299216e-01	6.299216e-01	6.744587e+00	4.407550e-01	4.407550e-01
+8.691946e+00	7.486632e-01	7.486632e-01	2.587733e+00	2.032481e-01	2.032481e-01
+1.186477e+01	2.424165e+00	2.424165e+00	4.186745e-01	4.068445e-02	4.068445e-02
+3.368869e+01	1.939975e+01	1.939975e+01	3.066196e-03	1.368754e-03	1.368754e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d06-x01-y06
+Path=/REF/ATLAS_2017_I1589844_MU/d06-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	7.816942e+01	4.681306e+00	4.681306e+00
+1.300520e+00	1.120177e-01	1.120177e-01	8.802211e+01	5.394644e+00	5.394644e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.004145e+02	6.234345e+00	6.234345e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.107356e+02	7.174199e+00	7.174199e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.148094e+02	7.515589e+00	7.515589e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.101778e+02	6.107253e+00	6.107253e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.611545e+01	5.241688e+00	5.241688e+00
+3.665363e+00	3.157087e-01	3.157087e-01	7.413204e+01	4.937210e+00	4.937210e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.036667e+01	4.280500e+00	4.280500e+00
+5.177463e+00	4.459503e-01	4.459503e-01	2.983214e+01	3.363562e+00	3.363562e+00
+6.153426e+00	5.300130e-01	5.300130e-01	1.521581e+01	2.055670e+00	2.055670e+00
+7.313361e+00	6.299216e-01	6.299216e-01	6.684109e+00	9.724895e-01	9.724895e-01
+8.691946e+00	7.486632e-01	7.486632e-01	2.668123e+00	3.914825e-01	3.914825e-01
+1.186477e+01	2.424165e+00	2.424165e+00	5.785726e-01	7.952577e-02	7.952577e-02
+3.368869e+01	1.939975e+01	1.939975e+01	1.434853e-02	7.286712e-03	7.286712e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d06-x01-y08
+Path=/REF/ATLAS_2017_I1589844_MU/d06-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	5.597449e+01	4.659709e+00	4.659709e+00
+1.300520e+00	1.120177e-01	1.120177e-01	5.513408e+01	4.570877e+00	4.570877e+00
+1.545671e+00	1.331332e-01	1.331332e-01	5.921102e+01	5.020556e+00	5.020556e+00
+1.837033e+00	1.582291e-01	1.582291e-01	6.188141e+01	5.372021e+00	5.372021e+00
+2.183318e+00	1.880557e-01	1.880557e-01	6.551176e+01	5.034736e+00	5.034736e+00
+2.594878e+00	2.235046e-01	2.235046e-01	6.821726e+01	3.726074e+00	3.726074e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.693019e+01	3.234644e+00	3.234644e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.262234e+01	2.609289e+00	2.609289e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.523497e+01	2.096434e+00	2.096434e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.544519e+01	1.784346e+00	1.784346e+00
+6.153426e+00	5.300130e-01	5.300130e-01	3.403018e+01	1.687228e+00	1.687228e+00
+7.313361e+00	6.299216e-01	6.299216e-01	2.316325e+01	1.624974e+00	1.624974e+00
+8.691946e+00	7.486632e-01	7.486632e-01	1.391094e+01	9.959515e-01	9.959515e-01
+1.186477e+01	2.424165e+00	2.424165e+00	4.480744e+00	4.266110e-01	4.266110e-01
+3.368869e+01	1.939975e+01	1.939975e+01	7.725229e-02	1.697997e-02	1.697997e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d07-x01-y02
+Path=/REF/ATLAS_2017_I1589844_MU/d07-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.759343e+02	6.050447e+00	6.050447e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.856361e+02	6.512081e+00	6.512081e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.788584e+02	6.292412e+00	6.292412e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.616639e+02	5.925943e+00	5.925943e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.290415e+02	5.183279e+00	5.183279e+00
+2.594878e+00	2.235046e-01	2.235046e-01	8.870707e+01	4.022019e+00	4.022019e+00
+3.084019e+00	2.656357e-01	2.656357e-01	5.233816e+01	2.698511e+00	2.698511e+00
+3.665363e+00	3.157087e-01	3.157087e-01	2.616244e+01	1.595399e+00	1.595399e+00
+4.356292e+00	3.752204e-01	3.752204e-01	1.072125e+01	7.762603e-01	7.762603e-01
+5.177463e+00	4.459503e-01	4.459503e-01	3.849885e+00	3.389971e-01	3.389971e-01
+6.153426e+00	5.300130e-01	5.300130e-01	1.257925e+00	1.358748e-01	1.358748e-01
+7.313361e+00	6.299216e-01	6.299216e-01	3.856912e-01	5.506100e-02	5.506100e-02
+9.982963e+00	2.039681e+00	2.039681e+00	6.705059e-02	1.281328e-02	1.281328e-02
+2.834550e+01	1.632286e+01	1.632286e+01	1.682703e-03	5.397319e-04	5.397319e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d07-x01-y04
+Path=/REF/ATLAS_2017_I1589844_MU/d07-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.210685e+02	5.135350e+00	5.135350e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.196375e+02	4.702298e+00	4.702298e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.202971e+02	4.314884e+00	4.314884e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.146208e+02	3.834870e+00	3.834870e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.032945e+02	3.398660e+00	3.398660e+00
+2.594878e+00	2.235046e-01	2.235046e-01	8.755621e+01	3.053600e+00	3.053600e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.988633e+01	2.722166e+00	2.722166e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.045044e+01	2.194913e+00	2.194913e+00
+4.356292e+00	3.752204e-01	3.752204e-01	3.271330e+01	1.603923e+00	1.603923e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.877447e+01	1.050099e+00	1.050099e+00
+6.153426e+00	5.300130e-01	5.300130e-01	9.067463e+00	5.761428e-01	5.761428e-01
+7.313361e+00	6.299216e-01	6.299216e-01	3.727551e+00	2.805504e-01	2.805504e-01
+9.982963e+00	2.039681e+00	2.039681e+00	6.028162e-01	5.882826e-02	5.882826e-02
+2.834550e+01	1.632286e+01	1.632286e+01	3.291324e-03	1.615346e-03	1.615346e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d07-x01-y06
+Path=/REF/ATLAS_2017_I1589844_MU/d07-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	9.608449e+01	4.827833e+00	4.827833e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.064805e+02	5.299096e+00	5.299096e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.159591e+02	6.139813e+00	6.139813e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.229112e+02	7.364774e+00	7.364774e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.235612e+02	6.966558e+00	6.966558e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.132774e+02	5.660920e+00	5.660920e+00
+3.084019e+00	2.656357e-01	2.656357e-01	9.334269e+01	5.344903e+00	5.344903e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.603497e+01	4.576720e+00	4.576720e+00
+4.356292e+00	3.752204e-01	3.752204e-01	4.177559e+01	3.924106e+00	3.924106e+00
+5.177463e+00	4.459503e-01	4.459503e-01	2.293339e+01	2.831035e+00	2.831035e+00
+6.153426e+00	5.300130e-01	5.300130e-01	1.064159e+01	1.489597e+00	1.489597e+00
+7.313361e+00	6.299216e-01	6.299216e-01	4.176034e+00	6.002895e-01	6.002895e-01
+9.982963e+00	2.039681e+00	2.039681e+00	8.215343e-01	1.300944e-01	1.300944e-01
+2.834550e+01	1.632286e+01	1.632286e+01	1.280799e-02	7.200643e-03	7.200643e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d07-x01-y08
+Path=/REF/ATLAS_2017_I1589844_MU/d07-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	6.977532e+01	5.070344e+00	5.070344e+00
+1.300520e+00	1.120177e-01	1.120177e-01	7.012209e+01	4.888153e+00	4.888153e+00
+1.545671e+00	1.331332e-01	1.331332e-01	7.257325e+01	5.193705e+00	5.193705e+00
+1.837033e+00	1.582291e-01	1.582291e-01	7.280953e+01	6.350874e+00	6.350874e+00
+2.183318e+00	1.880557e-01	1.880557e-01	7.581119e+01	4.934556e+00	4.934556e+00
+2.594878e+00	2.235046e-01	2.235046e-01	7.507146e+01	4.540748e+00	4.540748e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.151584e+01	3.430829e+00	3.430829e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.352803e+01	2.650984e+00	2.650984e+00
+4.356292e+00	3.752204e-01	3.752204e-01	5.274429e+01	2.111299e+00	2.111299e+00
+5.177463e+00	4.459503e-01	4.459503e-01	4.103944e+01	1.991946e+00	1.991946e+00
+6.153426e+00	5.300130e-01	5.300130e-01	2.842839e+01	1.581016e+00	1.581016e+00
+7.313361e+00	6.299216e-01	6.299216e-01	1.791404e+01	1.291442e+00	1.291442e+00
+9.982963e+00	2.039681e+00	2.039681e+00	6.064214e+00	5.879142e-01	5.879142e-01
+2.834550e+01	1.632286e+01	1.632286e+01	1.141068e-01	2.082417e-02	2.082417e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d08-x01-y02
+Path=/REF/ATLAS_2017_I1589844_MU/d08-x01-y02
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.978115e+02	6.660942e+00	6.660942e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.991621e+02	7.098890e+00	7.098890e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.843633e+02	6.639094e+00	6.639094e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.558113e+02	6.127222e+00	6.127222e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.178095e+02	5.225446e+00	5.225446e+00
+2.594878e+00	2.235046e-01	2.235046e-01	7.589992e+01	3.803267e+00	3.803267e+00
+3.084019e+00	2.656357e-01	2.656357e-01	4.153019e+01	2.421911e+00	2.421911e+00
+3.665363e+00	3.157087e-01	3.157087e-01	1.850972e+01	1.257970e+00	1.257970e+00
+4.356292e+00	3.752204e-01	3.752204e-01	6.719661e+00	5.417020e-01	5.417020e-01
+5.177463e+00	4.459503e-01	4.459503e-01	2.144778e+00	2.102337e-01	2.102337e-01
+7.067397e+00	1.443984e+00	1.443984e+00	3.049476e-01	4.520666e-02	4.520666e-02
+2.006708e+01	1.155570e+01	1.155570e+01	3.726200e-03	1.772634e-03	1.772634e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d08-x01-y04
+Path=/REF/ATLAS_2017_I1589844_MU/d08-x01-y04
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.368852e+02	9.996343e+00	9.996343e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.328523e+02	9.398905e+00	9.398905e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.295284e+02	4.906095e+00	4.906095e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.185704e+02	4.185466e+00	4.185466e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.019678e+02	3.637688e+00	3.637688e+00
+2.594878e+00	2.235046e-01	2.235046e-01	8.251027e+01	3.222399e+00	3.222399e+00
+3.084019e+00	2.656357e-01	2.656357e-01	6.116879e+01	2.675631e+00	2.675631e+00
+3.665363e+00	3.157087e-01	3.157087e-01	4.100568e+01	2.033729e+00	2.033729e+00
+4.356292e+00	3.752204e-01	3.752204e-01	2.443362e+01	1.367747e+00	1.367747e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.289250e+01	8.075437e-01	8.075437e-01
+7.067397e+00	1.443984e+00	1.443984e+00	2.981475e+00	2.342487e-01	2.342487e-01
+2.006708e+01	1.155570e+01	1.155570e+01	2.753442e-02	7.523117e-03	7.523117e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d08-x01-y06
+Path=/REF/ATLAS_2017_I1589844_MU/d08-x01-y06
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	1.152471e+02	6.177147e+00	6.177147e+00
+1.300520e+00	1.120177e-01	1.120177e-01	1.224623e+02	5.160137e+00	5.160137e+00
+1.545671e+00	1.331332e-01	1.331332e-01	1.295730e+02	6.490904e+00	6.490904e+00
+1.837033e+00	1.582291e-01	1.582291e-01	1.342186e+02	6.852017e+00	6.852017e+00
+2.183318e+00	1.880557e-01	1.880557e-01	1.286992e+02	6.509619e+00	6.509619e+00
+2.594878e+00	2.235046e-01	2.235046e-01	1.121986e+02	5.204103e+00	5.204103e+00
+3.084019e+00	2.656357e-01	2.656357e-01	8.570830e+01	4.833779e+00	4.833779e+00
+3.665363e+00	3.157087e-01	3.157087e-01	5.835079e+01	4.602612e+00	4.602612e+00
+4.356292e+00	3.752204e-01	3.752204e-01	3.471582e+01	3.676361e+00	3.676361e+00
+5.177463e+00	4.459503e-01	4.459503e-01	1.736571e+01	2.307098e+00	2.307098e+00
+7.067397e+00	1.443984e+00	1.443984e+00	4.033761e+00	6.721175e-01	6.721175e-01
+2.006708e+01	1.155570e+01	1.155570e+01	4.859065e-02	2.435393e-02	2.435393e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1589844_MU/d08-x01-y08
+Path=/REF/ATLAS_2017_I1589844_MU/d08-x01-y08
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.094251e+00	9.425111e-02	9.425111e-02	8.475220e+01	5.902977e+00	5.902977e+00
+1.300520e+00	1.120177e-01	1.120177e-01	8.444817e+01	5.649440e+00	5.649440e+00
+1.545671e+00	1.331332e-01	1.331332e-01	8.394995e+01	6.247410e+00	6.247410e+00
+1.837033e+00	1.582291e-01	1.582291e-01	8.274077e+01	6.867471e+00	6.867471e+00
+2.183318e+00	1.880557e-01	1.880557e-01	8.339998e+01	5.445627e+00	5.445627e+00
+2.594878e+00	2.235046e-01	2.235046e-01	7.988968e+01	5.028314e+00	5.028314e+00
+3.084019e+00	2.656357e-01	2.656357e-01	7.378467e+01	3.120918e+00	3.120918e+00
+3.665363e+00	3.157087e-01	3.157087e-01	6.239436e+01	2.439881e+00	2.439881e+00
+4.356292e+00	3.752204e-01	3.752204e-01	4.887237e+01	1.989183e+00	1.989183e+00
+5.177463e+00	4.459503e-01	4.459503e-01	3.490555e+01	1.748288e+00	1.748288e+00
+7.067397e+00	1.443984e+00	1.443984e+00	1.571370e+01	1.195915e+00	1.195915e+00
+2.006708e+01	1.155570e+01	1.155570e+01	5.534319e-01	8.594294e-02	8.594294e-02
+END YODA_SCATTER2D
+
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1591327.cc b/analyses/pluginATLAS/ATLAS_2017_I1591327.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1591327.cc
@@ -0,0 +1,187 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/IdentifiedFinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+
+namespace Rivet {
+
+
+  /// Isolated diphoton + X differential cross-sections
+  class ATLAS_2017_I1591327 : public Analysis {
+  public:
+
+    // Constructor
+    ATLAS_2017_I1591327() : Analysis("ATLAS_2017_I1591327") {
+      setNeedsCrossSection(true);
+    }
+
+
+    // Book histograms and initialise projections before the run
+    void init() {
+
+      const FinalState fs;
+      declare(fs, "FS");
+
+      FastJets fj(fs, FastJets::KT, 0.5);
+      _area_def = new fastjet::AreaDefinition(fastjet::VoronoiAreaSpec());
+      fj.useJetArea(_area_def);
+      declare(fj, "KtJetsD05");
+
+      IdentifiedFinalState photonfs(Cuts::abseta < 2.37 && Cuts::pT > 30*GeV);
+      photonfs.acceptId(PID::PHOTON);
+      declare(photonfs, "Photon");
+
+      // Histograms
+      _h_M       = bookHisto1D(2, 1, 1);
+      _h_pT      = bookHisto1D(3, 1, 1);
+      _h_at      = bookHisto1D(4, 1, 1);
+      _h_phistar = bookHisto1D(5, 1, 1);
+      _h_costh   = bookHisto1D(6, 1, 1);
+      _h_dPhi    = bookHisto1D(7, 1, 1);
+    }
+
+
+    // Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      // Require at least 2 photons in final state
+      const Particles photons = apply<IdentifiedFinalState>(event, "Photon").particlesByPt();
+      if (photons.size() < 2) vetoEvent;
+
+      // Compute the median energy density
+      _ptDensity.clear();
+      _sigma.clear();
+      _Njets.clear();
+      vector<vector<double> > ptDensities;
+      vector<double> emptyVec;
+      ptDensities.assign(ETA_BINS.size()-1, emptyVec);
+
+      // Get jets, and corresponding jet areas
+      const shared_ptr<fastjet::ClusterSequenceArea> clust_seq_area = applyProjection<FastJets>(event, "KtJetsD05").clusterSeqArea();
+      for (const fastjet::PseudoJet& jet : apply<FastJets>(event, "KtJetsD05").pseudoJets(0.0*GeV)) {
+        const double aeta = fabs(jet.eta());
+        const double pt = jet.perp();
+        const double area = clust_seq_area->area(jet);
+        if (area < 1e-3) continue;
+        const int ieta = binIndex(aeta, ETA_BINS);
+        if (ieta != -1) ptDensities[ieta].push_back(pt/area);
+      }
+
+      // Compute median jet properties over the jets in the event
+      for (size_t b = 0; b < ETA_BINS.size()-1; ++b) {
+        double median = 0.0, sigma = 0.0;
+        int Njets = 0;
+        if (ptDensities[b].size() > 0) {
+          std::sort(ptDensities[b].begin(), ptDensities[b].end());
+          int nDens = ptDensities[b].size();
+          median = (nDens % 2 == 0) ? (ptDensities[b][nDens/2]+ptDensities[b][(nDens-2)/2])/2 : ptDensities[b][(nDens-1)/2];
+          sigma = ptDensities[b][(int)(.15865*nDens)];
+          Njets = nDens;
+        }
+        _ptDensity.push_back(median);
+        _sigma.push_back(sigma);
+        _Njets.push_back(Njets);
+      }
+
+      // Loop over photons and fill vector of isolated ones
+      Particles isolated_photons;
+      for (const Particle& photon : photons) {
+        // Check if it's a prompt photon (needed for SHERPA 2->5 sample, otherwise I also get photons from hadron decays in jets)
+        if (photon.fromDecay()) continue;
+
+        // Remove photons in ECAL crack region
+        if (inRange(photon.abseta(), 1.37, 1.56))  continue;
+        const double eta_P = photon.eta();
+        const double phi_P = photon.phi();
+
+        // Compute isolation via particles within an R=0.4 cone of the photon
+        const Particles fs = apply<FinalState>(event, "FS").particles();
+        FourMomentum mom_in_EtCone;
+        for (const Particle& p : fs) {
+          // Reject if not in cone
+          if (deltaR(photon.momentum(), p.momentum()) > 0.4)  continue;
+          // Reject if in the 5x7 cell central core
+          if (fabs(eta_P - p.eta()) < 0.025 * 5 * 0.5 &&
+              fabs(phi_P - p.phi()) < PI/128. * 7 * 0.5)  continue;
+          // Sum momentum
+          mom_in_EtCone += p.momentum();
+        }
+        // Now figure out the correction (area*density)
+        const double EtCone_area = M_PI*sqr(0.4) - (7*.025)*(5*M_PI/128.); // cone area - central core rectangle
+        const double correction = _ptDensity[binIndex(fabs(eta_P), ETA_BINS)] * EtCone_area;
+
+        // Discard the photon if there is more than 11 GeV of cone activity
+        // NOTE: Shouldn't need to subtract photon itself (it's in the central core)
+        if (mom_in_EtCone.Et() - correction > 11*GeV)  continue;
+        // Add isolated photon to list
+        isolated_photons.push_back(photon);
+      }
+
+      // Require at least two isolated photons
+      if (isolated_photons.size() < 2) vetoEvent;
+
+      // Select leading pT pair
+      sortByPt(isolated_photons);
+      const FourMomentum y1 = isolated_photons[0];
+      const FourMomentum y2 = isolated_photons[1];
+
+      // Leading photon should have pT > 40 GeV, subleading > 30 GeV
+      if (y1.pT() < 40.*GeV) vetoEvent;
+      if (y2.pT() < 30.*GeV) vetoEvent;
+
+      // Require the two photons to be separated (dR>0.4)
+      if (deltaR(y1,y2) < 0.4) vetoEvent;
+
+      const FourMomentum yy = y1 + y2;
+      const double Myy = yy.mass();
+      const double pTyy = yy.pT();
+      const double dPhiyy = mapAngle0ToPi(y1.phi() - y2.phi());
+
+      // phi*
+      const double costhetastar_ = fabs(tanh(( y1.eta() - y2.eta() ) / 2.));
+      const double sinthetastar_ = sqrt(1. - pow(costhetastar_, 2));
+      const double phistar = tan(0.5 * (PI - dPhiyy)) * sinthetastar_;
+
+      // a_t
+      const Vector3 t_hat(y1.x()-y2.x(), y1.y()-y2.y(), 0.);
+      const double factor = t_hat.mod();
+      const Vector3 t_hatx(t_hat.x()/factor, t_hat.y()/factor, t_hat.z()/factor);
+      const Vector3 At(y1.x()+y2.x(), y1.y()+y2.y(), 0.);
+      // Compute a_t transverse component with respect to t_hat
+      const double at = At.cross(t_hatx).mod();
+
+      // Fill histograms
+      const double weight = event.weight();
+      _h_M->fill(Myy, weight);
+      _h_pT->fill(pTyy, weight);
+      _h_dPhi->fill(dPhiyy, weight);
+      _h_costh->fill(costhetastar_, weight);
+      _h_phistar->fill(phistar, weight);
+      _h_at->fill(at, weight);
+    }
+
+
+    // Normalise histograms etc., after the run
+    void finalize() {
+      const double sf = crossSection() / (femtobarn * sumOfWeights());
+      scale({_h_M, _h_pT, _h_dPhi, _h_costh, _h_phistar, _h_at}, sf);
+    }
+
+
+  private:
+
+    Histo1DPtr _h_M, _h_pT, _h_dPhi, _h_costh, _h_phistar, _h_at;
+
+    fastjet::AreaDefinition* _area_def;
+
+    const vector<double> ETA_BINS = {0.0, 1.5, 3.0};
+    vector<double> _ptDensity, _sigma, _Njets;
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(ATLAS_2017_I1591327);
+
+}
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1591327.info b/analyses/pluginATLAS/ATLAS_2017_I1591327.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1591327.info
@@ -0,0 +1,46 @@
+Name: ATLAS_2017_I1591327
+Year: 2017
+Summary: Inclusive diphoton cross-sections at 8 TeV
+Experiment: ATLAS
+Collider: LHC
+InspireID: 1591327
+Status: VALIDATED
+Authors:
+ - Frank Siegert <frank.siegert@cern.ch>
+References:
+ - arXiv:1704.03839 [hep-ex]
+ - submitted to PRD
+Keywords:
+ - PHOTON
+ - DIPHOTON
+RunInfo:
+  $pp \to \gamma \gamma$ at 8 TeV
+Luminosity_fb: 20.2
+Beams: [p+, p+]
+Energies: [8000]
+PtCuts: [40,30]
+Description:
+  'A measurement of the production cross section for two isolated photons in proton--proton collisions at a center-of-mass energy of
+  $\sqrt{s}=8$ TeV is presented. The results are based on an integrated luminosity of 20.2 fb$^{-1}$ recorded by the ATLAS detector
+  at the Large Hadron Collider. The measurement considers photons with pseudorapidities satisfying $|\eta^\gamma| < 1.37$ or
+  $1.56 < |\eta^\gamma| < 2.37$ and transverse energies of respectively $E^\gamma_\text{T,1}>40$ GeV and $E^\gamma_\text{T,2}> 30$ GeV
+  for the two leading photons ordered in transverse energy produced in the interaction. The background due to hadronic jets and electrons
+  is subtracted using data-driven techniques. The fiducial cross sections are corrected for detector effects and measured
+  differentially as a function of six kinematic observables. The measured cross section integrated within the fiducial volume is
+  $16.8\pm0.8$ pb. The data are compared to fixed-order QCD calculations at next-to-leading-order and next-to-next-to-leading-order
+  accuracy as well as next-to-leading-order computations including resummation of initial-state gluon radiation at next-to-next-to-leading
+  logarithm or matched to a parton shower, with relative uncertainties varying from 5% to 20%.'
+BibKey: Aaboud:2017vol
+BibTeX: '@article{Aaboud:2017vol,
+      author         = "Aaboud, Morad and others",
+      title          = "{Measurements of integrated and differential cross
+                        sections for isolated photon pair production in pp
+                        collisions at $\sqrt{s}=8$ TeV with the ATLAS detector}",
+      collaboration  = "ATLAS",
+      year           = "2017",
+      eprint         = "1704.03839",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2017-040",
+      SLACcitation   = "%%CITATION = ARXIV:1704.03839;%%"
+}'
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1591327.plot b/analyses/pluginATLAS/ATLAS_2017_I1591327.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1591327.plot
@@ -0,0 +1,49 @@
+# BEGIN PLOT /ATLAS_2017_I1591327/d.*
+XTwosidedTicks=1
+YTwosidedTicks=1
+LegendAlign=r
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1591327/d02-x01-y01
+Title=Di-photon mass
+XLabel=$m_{\gamma\gamma}$ [GeV]
+YLabel=$\mathrm{d}\sigma/\mathrm{d}m_{\gamma\gamma}$ [fb GeV$^{-1}$]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1591327/d03-x01-y01
+Title=$p_\perp$ of the di-photon system
+XLabel=$p_\text{T}^{\gamma\gamma}$ [GeV]
+YLabel=$\mathrm{d}\sigma/\mathrm{d}p_\text{T}^{\gamma\gamma}$ [fb GeV$^{-1}$]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1591327/d04-x01-y01
+Title=$a_\perp$ of the di-photon system
+XLabel=$a_\text{T}$ [GeV]
+YLabel=$\mathrm{d}\sigma/\mathrm{d}a_\text{T}$ [fb GeV$^{-1}$]
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1591327/d05-x01-y01
+Title=$\phi_{\eta}^\ast$ of the di-photon system
+XLabel=$\phi_{\eta}^\ast$
+YLabel=$\mathrm{d}\sigma/\mathrm{d}\phi_{\eta}^\ast$ [fb]
+XMin=0.004
+LogX=1
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1591327/d06-x01-y01
+Title=Polar scattering angle of the photons
+XLabel=$|\cos\theta_{\eta}^\ast|$
+YLabel=$\mathrm{d}\sigma/\mathrm{d}|\cos\theta_{\eta}^\ast|$ [fb]
+LegendYPos=0.3
+LegendXPos=0.05
+LegendAlign=l
+# END PLOT
+
+# BEGIN PLOT /ATLAS_2017_I1591327/d07-x01-y01
+Title=Azimuthal angle between the photons
+XLabel=$\Delta\phi_{\gamma\gamma}$ [rad]
+YLabel=$\mathrm{d}\sigma/\mathrm{d}\Delta\phi_{\gamma\gamma}$ [fb rad$^{-1}$]
+LegendAlign=l
+LegendXPos=0.05
+# END PLOT
+
diff --git a/analyses/pluginATLAS/ATLAS_2017_I1591327.yoda b/analyses/pluginATLAS/ATLAS_2017_I1591327.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginATLAS/ATLAS_2017_I1591327.yoda
@@ -0,0 +1,489 @@
+BEGIN YODA_SCATTER1D /REF/ATLAS_2017_I1591327/d01-x01-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1591327/d01-x01-y01
+Title=doi:10.17182/hepdata.77381.v1/t1
+Type=Scatter1D
+# xval	 xerr-	 xerr+
+1.682000e+01	7.942888e-01	7.637836e-01
+END YODA_SCATTER1D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1591327/d02-x01-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1591327/d02-x01-y01
+Title=doi:10.17182/hepdata.77381.v1/t2
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+01	1.500000e+01	1.500000e+01	5.083589e+00	7.419776e-01	6.777589e-01
+4.000000e+01	1.000000e+01	1.000000e+01	1.627168e+01	1.146201e+00	1.275226e+00
+6.000000e+01	1.000000e+01	1.000000e+01	3.021374e+01	2.107395e+00	2.081461e+00
+7.500000e+01	5.000000e+00	5.000000e+00	1.420655e+02	1.200684e+01	1.179657e+01
+8.500000e+01	5.000000e+00	5.000000e+00	2.328038e+02	1.488853e+01	1.425817e+01
+9.500000e+01	5.000000e+00	5.000000e+00	2.311499e+02	1.298149e+01	1.196410e+01
+1.050000e+02	5.000000e+00	5.000000e+00	1.850065e+02	9.194656e+00	9.194656e+00
+1.150000e+02	5.000000e+00	5.000000e+00	1.465293e+02	7.080567e+00	6.833674e+00
+1.250000e+02	5.000000e+00	5.000000e+00	1.217592e+02	6.109839e+00	5.932562e+00
+1.350000e+02	5.000000e+00	5.000000e+00	9.347860e+01	4.212764e+00	4.212764e+00
+1.450000e+02	5.000000e+00	5.000000e+00	7.016076e+01	3.534598e+00	3.534598e+00
+1.550000e+02	5.000000e+00	5.000000e+00	5.799115e+01	2.942730e+00	2.942730e+00
+1.650000e+02	5.000000e+00	5.000000e+00	4.506747e+01	2.882205e+00	2.421093e+00
+1.750000e+02	5.000000e+00	5.000000e+00	3.937208e+01	2.501909e+00	2.167253e+00
+1.850000e+02	5.000000e+00	5.000000e+00	2.903443e+01	1.929643e+00	1.813432e+00
+1.950000e+02	5.000000e+00	5.000000e+00	2.548915e+01	1.631107e+00	1.575799e+00
+2.125000e+02	1.250000e+01	1.250000e+01	1.885695e+01	1.066877e+00	9.953183e-01
+2.375000e+02	1.250000e+01	1.250000e+01	1.229343e+01	7.828317e-01	7.440317e-01
+2.625000e+02	1.250000e+01	1.250000e+01	8.681072e+00	6.173945e-01	5.128450e-01
+2.875000e+02	1.250000e+01	1.250000e+01	5.635421e+00	4.573379e-01	3.904741e-01
+3.250000e+02	2.500000e+01	2.500000e+01	3.115273e+00	2.586802e-01	2.471689e-01
+3.750000e+02	2.500000e+01	2.500000e+01	1.828655e+00	1.682959e-01	1.445332e-01
+4.500000e+02	5.000000e+01	5.000000e+01	8.004590e-01	7.076257e-02	6.180663e-02
+5.500000e+02	5.000000e+01	5.000000e+01	2.706642e-01	4.242267e-02	3.610096e-02
+6.500000e+02	5.000000e+01	5.000000e+01	1.264953e-01	1.815109e-02	1.787796e-02
+1.200000e+03	5.000000e+02	5.000000e+02	1.090941e-02	2.732432e-03	2.649842e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1591327/d02-x01-y02
+IsRef=1
+Path=/REF/ATLAS_2017_I1591327/d02-x01-y02
+Title=doi:10.17182/hepdata.77381.v1/t2
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+01	1.500000e+01	1.500000e+01	9.600000e-01	1.344000e-02	1.344000e-02
+4.000000e+01	1.000000e+01	1.000000e+01	9.600000e-01	8.640000e-03	8.640000e-03
+6.000000e+01	1.000000e+01	1.000000e+01	9.800000e-01	5.880000e-03	5.880000e-03
+7.500000e+01	5.000000e+00	5.000000e+00	9.900000e-01	4.950000e-03	4.950000e-03
+8.500000e+01	5.000000e+00	5.000000e+00	9.900000e-01	3.960000e-03	3.960000e-03
+9.500000e+01	5.000000e+00	5.000000e+00	9.900000e-01	3.960000e-03	3.960000e-03
+1.050000e+02	5.000000e+00	5.000000e+00	9.900000e-01	3.960000e-03	3.960000e-03
+1.150000e+02	5.000000e+00	5.000000e+00	9.900000e-01	4.950000e-03	4.950000e-03
+1.250000e+02	5.000000e+00	5.000000e+00	9.900000e-01	5.940000e-03	5.940000e-03
+1.350000e+02	5.000000e+00	5.000000e+00	9.900000e-01	5.940000e-03	5.940000e-03
+1.450000e+02	5.000000e+00	5.000000e+00	9.800000e-01	6.860000e-03	6.860000e-03
+1.550000e+02	5.000000e+00	5.000000e+00	9.800000e-01	7.840000e-03	7.840000e-03
+1.650000e+02	5.000000e+00	5.000000e+00	9.900000e-01	8.910000e-03	8.910000e-03
+1.750000e+02	5.000000e+00	5.000000e+00	9.900000e-01	9.900000e-03	9.900000e-03
+1.850000e+02	5.000000e+00	5.000000e+00	1.000000e+00	1.100000e-02	1.100000e-02
+1.950000e+02	5.000000e+00	5.000000e+00	9.800000e-01	1.274000e-02	1.274000e-02
+2.125000e+02	1.250000e+01	1.250000e+01	9.900000e-01	9.900000e-03	9.900000e-03
+2.375000e+02	1.250000e+01	1.250000e+01	9.800000e-01	1.176000e-02	1.176000e-02
+2.625000e+02	1.250000e+01	1.250000e+01	1.000000e+00	1.500000e-02	1.500000e-02
+2.875000e+02	1.250000e+01	1.250000e+01	1.000000e+00	1.800000e-02	1.800000e-02
+3.250000e+02	2.500000e+01	2.500000e+01	1.010000e+00	1.717000e-02	1.717000e-02
+3.750000e+02	2.500000e+01	2.500000e+01	9.900000e-01	2.277000e-02	2.277000e-02
+4.500000e+02	5.000000e+01	5.000000e+01	1.000000e+00	2.400000e-02	2.400000e-02
+5.500000e+02	5.000000e+01	5.000000e+01	1.050000e+00	4.200000e-02	4.200000e-02
+6.500000e+02	5.000000e+01	5.000000e+01	1.000000e+00	6.300000e-02	6.300000e-02
+1.200000e+03	5.000000e+02	5.000000e+02	8.600000e-01	5.676000e-02	5.676000e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1591327/d03-x01-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1591327/d03-x01-y01
+Title=doi:10.17182/hepdata.77381.v1/t3
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.000000e+00	2.000000e+00	2.000000e+00	2.267659e+02	1.533816e+01	1.514076e+01
+6.000000e+00	2.000000e+00	2.000000e+00	4.325977e+02	2.139500e+01	2.103777e+01
+1.000000e+01	2.000000e+00	2.000000e+00	4.642520e+02	2.395288e+01	2.474947e+01
+1.400000e+01	2.000000e+00	2.000000e+00	4.163692e+02	2.445615e+01	2.302488e+01
+1.800000e+01	2.000000e+00	2.000000e+00	3.497097e+02	1.933866e+01	1.904233e+01
+2.250000e+01	2.500000e+00	2.500000e+00	2.833574e+02	1.531703e+01	1.413098e+01
+2.750000e+01	2.500000e+00	2.500000e+00	2.154623e+02	1.413702e+01	1.173429e+01
+3.250000e+01	2.500000e+00	2.500000e+00	1.821154e+02	9.078412e+00	9.645242e+00
+3.750000e+01	2.500000e+00	2.500000e+00	1.485247e+02	8.727641e+00	8.132318e+00
+4.250000e+01	2.500000e+00	2.500000e+00	1.275555e+02	8.428318e+00	7.284076e+00
+4.750000e+01	2.500000e+00	2.500000e+00	1.009897e+02	6.779109e+00	6.071992e+00
+5.250000e+01	2.500000e+00	2.500000e+00	9.156868e+01	5.878966e+00	5.181525e+00
+5.750000e+01	2.500000e+00	2.500000e+00	7.887503e+01	5.556073e+00	5.616766e+00
+6.250000e+01	2.500000e+00	2.500000e+00	6.789839e+01	5.692542e+00	5.523608e+00
+6.750000e+01	2.500000e+00	2.500000e+00	6.845398e+01	5.568806e+00	5.682093e+00
+7.250000e+01	2.500000e+00	2.500000e+00	6.504924e+01	5.503489e+00	5.659284e+00
+7.750000e+01	2.500000e+00	2.500000e+00	6.028371e+01	4.983534e+00	5.169657e+00
+8.500000e+01	5.000000e+00	5.000000e+00	4.594265e+01	3.097638e+00	2.877198e+00
+9.500000e+01	5.000000e+00	5.000000e+00	3.319286e+01	2.173309e+00	2.052060e+00
+1.050000e+02	5.000000e+00	5.000000e+00	2.558861e+01	1.626035e+00	1.459897e+00
+1.150000e+02	5.000000e+00	5.000000e+00	1.710376e+01	1.242586e+00	1.171327e+00
+1.250000e+02	5.000000e+00	5.000000e+00	1.150670e+01	9.298380e-01	8.924184e-01
+1.350000e+02	5.000000e+00	5.000000e+00	1.029925e+01	7.718944e-01	7.355859e-01
+1.450000e+02	5.000000e+00	5.000000e+00	6.473959e+00	6.122257e-01	5.469634e-01
+1.625000e+02	1.250000e+01	1.250000e+01	4.615489e+00	3.257437e-01	3.067478e-01
+1.875000e+02	1.250000e+01	1.250000e+01	2.354144e+00	2.390355e-01	2.237056e-01
+2.125000e+02	1.250000e+01	1.250000e+01	1.383554e+00	1.612597e-01	1.380646e-01
+2.375000e+02	1.250000e+01	1.250000e+01	9.765645e-01	9.402445e-02	9.275306e-02
+2.750000e+02	2.500000e+01	2.500000e+01	4.309888e-01	6.013800e-02	5.385291e-02
+3.500000e+02	5.000000e+01	5.000000e+01	1.121906e-01	2.003883e-02	1.909977e-02
+5.750000e+02	1.750000e+02	1.750000e+02	1.272330e-02	3.396502e-03	3.317196e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1591327/d03-x01-y02
+IsRef=1
+Path=/REF/ATLAS_2017_I1591327/d03-x01-y02
+Title=doi:10.17182/hepdata.77381.v1/t3
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.000000e+00	2.000000e+00	2.000000e+00	9.700000e-01	5.820000e-03	5.820000e-03
+6.000000e+00	2.000000e+00	2.000000e+00	9.900000e-01	4.950000e-03	4.950000e-03
+1.000000e+01	2.000000e+00	2.000000e+00	1.010000e+00	5.050000e-03	5.050000e-03
+1.400000e+01	2.000000e+00	2.000000e+00	9.900000e-01	4.950000e-03	4.950000e-03
+1.800000e+01	2.000000e+00	2.000000e+00	1.000000e+00	5.000000e-03	5.000000e-03
+2.250000e+01	2.500000e+00	2.500000e+00	9.900000e-01	4.950000e-03	4.950000e-03
+2.750000e+01	2.500000e+00	2.500000e+00	9.800000e-01	5.880000e-03	5.880000e-03
+3.250000e+01	2.500000e+00	2.500000e+00	9.900000e-01	5.940000e-03	5.940000e-03
+3.750000e+01	2.500000e+00	2.500000e+00	9.800000e-01	6.860000e-03	6.860000e-03
+4.250000e+01	2.500000e+00	2.500000e+00	9.800000e-01	7.840000e-03	7.840000e-03
+4.750000e+01	2.500000e+00	2.500000e+00	9.900000e-01	7.920000e-03	7.920000e-03
+5.250000e+01	2.500000e+00	2.500000e+00	9.900000e-01	7.920000e-03	7.920000e-03
+5.750000e+01	2.500000e+00	2.500000e+00	1.000000e+00	9.000000e-03	9.000000e-03
+6.250000e+01	2.500000e+00	2.500000e+00	9.800000e-01	8.820000e-03	8.820000e-03
+6.750000e+01	2.500000e+00	2.500000e+00	9.800000e-01	9.800000e-03	9.800000e-03
+7.250000e+01	2.500000e+00	2.500000e+00	9.900000e-01	9.900000e-03	9.900000e-03
+7.750000e+01	2.500000e+00	2.500000e+00	9.800000e-01	9.800000e-03	9.800000e-03
+8.500000e+01	5.000000e+00	5.000000e+00	9.800000e-01	7.840000e-03	7.840000e-03
+9.500000e+01	5.000000e+00	5.000000e+00	9.700000e-01	8.730000e-03	8.730000e-03
+1.050000e+02	5.000000e+00	5.000000e+00	9.600000e-01	1.056000e-02	1.056000e-02
+1.150000e+02	5.000000e+00	5.000000e+00	9.600000e-01	1.248000e-02	1.248000e-02
+1.250000e+02	5.000000e+00	5.000000e+00	9.700000e-01	1.455000e-02	1.455000e-02
+1.350000e+02	5.000000e+00	5.000000e+00	9.400000e-01	1.692000e-02	1.692000e-02
+1.450000e+02	5.000000e+00	5.000000e+00	9.600000e-01	1.920000e-02	1.920000e-02
+1.625000e+02	1.250000e+01	1.250000e+01	9.800000e-01	1.568000e-02	1.568000e-02
+1.875000e+02	1.250000e+01	1.250000e+01	9.700000e-01	2.134000e-02	2.134000e-02
+2.125000e+02	1.250000e+01	1.250000e+01	9.900000e-01	2.772000e-02	2.772000e-02
+2.375000e+02	1.250000e+01	1.250000e+01	9.800000e-01	3.528000e-02	3.528000e-02
+2.750000e+02	2.500000e+01	2.500000e+01	9.300000e-01	3.255000e-02	3.255000e-02
+3.500000e+02	5.000000e+01	5.000000e+01	9.600000e-01	4.224000e-02	4.224000e-02
+5.750000e+02	1.750000e+02	1.750000e+02	9.100000e-01	6.279000e-02	6.279000e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1591327/d04-x01-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1591327/d04-x01-y01
+Title=doi:10.17182/hepdata.77381.v1/t4
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+00	1.000000e+00	1.000000e+00	9.243954e+02	5.497628e+01	5.247115e+01
+3.000000e+00	1.000000e+00	1.000000e+00	8.142786e+02	4.889063e+01	5.036035e+01
+5.000000e+00	1.000000e+00	1.000000e+00	7.019589e+02	4.277920e+01	4.214677e+01
+7.000000e+00	1.000000e+00	1.000000e+00	5.808716e+02	3.855693e+01	3.698926e+01
+9.000000e+00	1.000000e+00	1.000000e+00	4.888635e+02	2.682074e+01	2.764565e+01
+1.100000e+01	1.000000e+00	1.000000e+00	4.324628e+02	2.777879e+01	2.339300e+01
+1.300000e+01	1.000000e+00	1.000000e+00	3.727964e+02	2.424897e+01	2.208642e+01
+1.500000e+01	1.000000e+00	1.000000e+00	3.238929e+02	1.818710e+01	1.968299e+01
+1.700000e+01	1.000000e+00	1.000000e+00	2.916441e+02	1.711034e+01	1.643331e+01
+1.900000e+01	1.000000e+00	1.000000e+00	2.623929e+02	1.567564e+01	1.546560e+01
+2.250000e+01	2.500000e+00	2.500000e+00	2.112361e+02	1.214562e+01	1.123927e+01
+2.750000e+01	2.500000e+00	2.500000e+00	1.630069e+02	9.219622e+00	9.219622e+00
+3.250000e+01	2.500000e+00	2.500000e+00	1.321662e+02	7.684986e+00	7.684986e+00
+3.750000e+01	2.500000e+00	2.500000e+00	1.097094e+02	7.074344e+00	6.639913e+00
+4.250000e+01	2.500000e+00	2.500000e+00	9.025072e+01	6.012351e+00	5.467436e+00
+4.750000e+01	2.500000e+00	2.500000e+00	8.362474e+01	5.363078e+00	5.363078e+00
+5.250000e+01	2.500000e+00	2.500000e+00	7.595339e+01	4.695615e+00	4.695615e+00
+5.750000e+01	2.500000e+00	2.500000e+00	7.658821e+01	4.933850e+00	5.428046e+00
+6.250000e+01	2.500000e+00	2.500000e+00	7.885721e+01	4.981130e+00	4.870031e+00
+6.750000e+01	2.500000e+00	2.500000e+00	6.029006e+01	4.337115e+00	4.252480e+00
+7.250000e+01	2.500000e+00	2.500000e+00	4.759017e+01	4.453433e+00	4.378554e+00
+7.750000e+01	2.500000e+00	2.500000e+00	3.278361e+01	3.461893e+00	3.337816e+00
+8.500000e+01	5.000000e+00	5.000000e+00	2.344160e+01	2.164892e+00	2.004633e+00
+9.500000e+01	5.000000e+00	5.000000e+00	1.458110e+01	1.256854e+00	1.210671e+00
+1.050000e+02	5.000000e+00	5.000000e+00	8.243495e+00	7.397589e-01	7.011334e-01
+1.150000e+02	5.000000e+00	5.000000e+00	5.080698e+00	5.389852e-01	5.172590e-01
+1.250000e+02	5.000000e+00	5.000000e+00	3.148308e+00	4.036469e-01	3.807110e-01
+1.400000e+02	1.000000e+01	1.000000e+01	2.032226e+00	1.664193e-01	1.540476e-01
+1.750000e+02	2.500000e+01	2.500000e+01	6.383636e-01	8.223996e-02	6.314962e-02
+3.250000e+02	1.250000e+02	1.250000e+02	5.102054e-02	7.501061e-03	7.539828e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1591327/d04-x01-y02
+IsRef=1
+Path=/REF/ATLAS_2017_I1591327/d04-x01-y02
+Title=doi:10.17182/hepdata.77381.v1/t4
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+00	1.000000e+00	1.000000e+00	9.800000e-01	4.900000e-03	4.900000e-03
+3.000000e+00	1.000000e+00	1.000000e+00	9.800000e-01	4.900000e-03	4.900000e-03
+5.000000e+00	1.000000e+00	1.000000e+00	1.000000e+00	5.000000e-03	5.000000e-03
+7.000000e+00	1.000000e+00	1.000000e+00	1.000000e+00	6.000000e-03	6.000000e-03
+9.000000e+00	1.000000e+00	1.000000e+00	9.900000e-01	5.940000e-03	5.940000e-03
+1.100000e+01	1.000000e+00	1.000000e+00	9.800000e-01	6.860000e-03	6.860000e-03
+1.300000e+01	1.000000e+00	1.000000e+00	9.900000e-01	6.930000e-03	6.930000e-03
+1.500000e+01	1.000000e+00	1.000000e+00	9.900000e-01	7.920000e-03	7.920000e-03
+1.700000e+01	1.000000e+00	1.000000e+00	1.000000e+00	8.000000e-03	8.000000e-03
+1.900000e+01	1.000000e+00	1.000000e+00	9.800000e-01	8.820000e-03	8.820000e-03
+2.250000e+01	2.500000e+00	2.500000e+00	9.800000e-01	5.880000e-03	5.880000e-03
+2.750000e+01	2.500000e+00	2.500000e+00	1.010000e+00	7.070000e-03	7.070000e-03
+3.250000e+01	2.500000e+00	2.500000e+00	9.900000e-01	6.930000e-03	6.930000e-03
+3.750000e+01	2.500000e+00	2.500000e+00	9.900000e-01	7.920000e-03	7.920000e-03
+4.250000e+01	2.500000e+00	2.500000e+00	9.800000e-01	7.840000e-03	7.840000e-03
+4.750000e+01	2.500000e+00	2.500000e+00	9.900000e-01	8.910000e-03	8.910000e-03
+5.250000e+01	2.500000e+00	2.500000e+00	9.900000e-01	8.910000e-03	8.910000e-03
+5.750000e+01	2.500000e+00	2.500000e+00	9.900000e-01	8.910000e-03	8.910000e-03
+6.250000e+01	2.500000e+00	2.500000e+00	9.600000e-01	8.640000e-03	8.640000e-03
+6.750000e+01	2.500000e+00	2.500000e+00	9.800000e-01	9.800000e-03	9.800000e-03
+7.250000e+01	2.500000e+00	2.500000e+00	9.900000e-01	1.089000e-02	1.089000e-02
+7.750000e+01	2.500000e+00	2.500000e+00	9.800000e-01	1.274000e-02	1.274000e-02
+8.500000e+01	5.000000e+00	5.000000e+00	9.800000e-01	1.078000e-02	1.078000e-02
+9.500000e+01	5.000000e+00	5.000000e+00	9.600000e-01	1.440000e-02	1.440000e-02
+1.050000e+02	5.000000e+00	5.000000e+00	9.800000e-01	1.862000e-02	1.862000e-02
+1.150000e+02	5.000000e+00	5.000000e+00	9.700000e-01	2.231000e-02	2.231000e-02
+1.250000e+02	5.000000e+00	5.000000e+00	9.600000e-01	2.784000e-02	2.784000e-02
+1.400000e+02	1.000000e+01	1.000000e+01	9.800000e-01	2.646000e-02	2.646000e-02
+1.750000e+02	2.500000e+01	2.500000e+01	9.900000e-01	2.970000e-02	2.970000e-02
+3.250000e+02	1.250000e+02	1.250000e+02	1.000000e+00	4.900000e-02	4.900000e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1591327/d05-x01-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1591327/d05-x01-y01
+Title=doi:10.17182/hepdata.77381.v1/t5
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.000000e-03	2.000000e-03	2.000000e-03	1.137931e+05	8.821722e+03	7.305839e+03
+6.000000e-03	2.000000e-03	2.000000e-03	1.111596e+05	7.879800e+03	7.084629e+03
+1.000000e-02	2.000000e-03	2.000000e-03	1.049118e+05	7.552190e+03	6.919407e+03
+1.400000e-02	2.000000e-03	2.000000e-03	1.073555e+05	7.361485e+03	7.516416e+03
+1.800000e-02	2.000000e-03	2.000000e-03	9.321431e+04	7.910046e+03	6.802729e+03
+2.200000e-02	2.000000e-03	2.000000e-03	1.002933e+05	7.616348e+03	7.697141e+03
+2.650000e-02	2.500000e-03	2.500000e-03	9.348238e+04	7.216331e+03	6.981826e+03
+3.150000e-02	2.500000e-03	2.500000e-03	8.841783e+04	6.477473e+03	6.406480e+03
+3.650000e-02	2.500000e-03	2.500000e-03	8.557741e+04	6.143719e+03	6.143719e+03
+4.200000e-02	3.000000e-03	3.000000e-03	7.720056e+04	5.883980e+03	5.275121e+03
+4.800000e-02	3.000000e-03	3.000000e-03	7.323147e+04	5.158532e+03	5.620247e+03
+5.400000e-02	3.000000e-03	3.000000e-03	7.074416e+04	6.660855e+03	4.862857e+03
+6.050000e-02	3.500000e-03	3.500000e-03	6.694276e+04	4.229066e+03	4.333736e+03
+6.800000e-02	4.000000e-03	4.000000e-03	6.206764e+04	4.605151e+03	4.052023e+03
+7.650000e-02	4.500000e-03	4.500000e-03	5.781295e+04	3.665997e+03	3.575533e+03
+8.600000e-02	5.000000e-03	5.000000e-03	4.860846e+04	3.768332e+03	3.044147e+03
+9.650000e-02	5.500000e-03	5.500000e-03	4.739119e+04	3.118470e+03	2.967915e+03
+1.080000e-01	6.000000e-03	6.000000e-03	4.516339e+04	2.604248e+03	2.604248e+03
+1.210000e-01	7.000000e-03	7.000000e-03	3.844010e+04	2.700400e+03	2.296776e+03
+1.365000e-01	8.500000e-03	8.500000e-03	3.478090e+04	2.022383e+03	2.105897e+03
+1.550000e-01	1.000000e-02	1.000000e-02	2.978351e+04	1.678215e+03	1.794441e+03
+1.770000e-01	1.200000e-02	1.200000e-02	2.646524e+04	1.880709e+03	1.504334e+03
+2.040000e-01	1.500000e-02	1.500000e-02	2.091760e+04	1.300597e+03	1.167269e+03
+2.385000e-01	1.950000e-02	1.950000e-02	1.751927e+04	9.476612e+02	9.619657e+02
+2.850000e-01	2.700000e-02	2.700000e-02	1.366604e+04	8.133306e+02	7.107657e+02
+3.515000e-01	3.950000e-02	3.950000e-02	9.480589e+03	5.122151e+02	4.965331e+02
+4.575000e-01	6.650000e-02	6.650000e-02	6.059427e+03	3.530104e+02	3.074823e+02
+6.095000e-01	8.550000e-02	8.550000e-02	3.411558e+03	1.877907e+02	1.797150e+02
+8.065000e-01	1.115000e-01	1.115000e-01	2.011442e+03	1.127485e+02	1.111765e+02
+1.035500e+00	1.175000e-01	1.175000e-01	1.177325e+03	7.147824e+01	7.413406e+01
+1.324500e+00	1.715000e-01	1.715000e-01	7.579146e+02	5.361945e+01	4.832263e+01
+1.721500e+00	2.255000e-01	2.255000e-01	4.840170e+02	3.227708e+01	3.560076e+01
+2.234500e+00	2.875000e-01	2.875000e-01	3.052858e+02	2.614608e+01	2.713955e+01
+2.899500e+00	3.775000e-01	3.775000e-01	1.782433e+02	1.979785e+01	2.055757e+01
+4.138500e+00	8.615000e-01	8.615000e-01	1.084740e+02	1.246554e+01	1.246554e+01
+7.500000e+00	2.500000e+00	2.500000e+00	2.906466e+01	4.278532e+00	3.695901e+00
+1.500000e+01	5.000000e+00	5.000000e+00	6.371029e+00	8.813461e-01	8.708756e-01
+3.500000e+01	1.500000e+01	1.500000e+01	1.338096e+00	2.002052e-01	1.853685e-01
+7.500000e+01	2.500000e+01	2.500000e+01	2.863376e-01	6.142393e-02	5.559450e-02
+2.505000e+04	2.495000e+04	2.495000e+04	2.013400e-04	5.036519e-05	4.674862e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1591327/d05-x01-y02
+IsRef=1
+Path=/REF/ATLAS_2017_I1591327/d05-x01-y02
+Title=doi:10.17182/hepdata.77381.v1/t5
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.000000e-03	2.000000e-03	2.000000e-03	9.900000e-01	8.910000e-03	8.910000e-03
+6.000000e-03	2.000000e-03	2.000000e-03	9.900000e-01	8.910000e-03	8.910000e-03
+1.000000e-02	2.000000e-03	2.000000e-03	9.700000e-01	8.730000e-03	8.730000e-03
+1.400000e-02	2.000000e-03	2.000000e-03	9.800000e-01	9.800000e-03	9.800000e-03
+1.800000e-02	2.000000e-03	2.000000e-03	9.700000e-01	9.700000e-03	9.700000e-03
+2.200000e-02	2.000000e-03	2.000000e-03	9.600000e-01	9.600000e-03	9.600000e-03
+2.650000e-02	2.500000e-03	2.500000e-03	1.000000e+00	9.000000e-03	9.000000e-03
+3.150000e-02	2.500000e-03	2.500000e-03	9.800000e-01	8.820000e-03	8.820000e-03
+3.650000e-02	2.500000e-03	2.500000e-03	1.010000e+00	1.010000e-02	1.010000e-02
+4.200000e-02	3.000000e-03	3.000000e-03	9.900000e-01	8.910000e-03	8.910000e-03
+4.800000e-02	3.000000e-03	3.000000e-03	1.000000e+00	9.000000e-03	9.000000e-03
+5.400000e-02	3.000000e-03	3.000000e-03	1.000000e+00	1.000000e-02	1.000000e-02
+6.050000e-02	3.500000e-03	3.500000e-03	9.900000e-01	8.910000e-03	8.910000e-03
+6.800000e-02	4.000000e-03	4.000000e-03	9.800000e-01	8.820000e-03	8.820000e-03
+7.650000e-02	4.500000e-03	4.500000e-03	1.000000e+00	9.000000e-03	9.000000e-03
+8.600000e-02	5.000000e-03	5.000000e-03	9.900000e-01	8.910000e-03	8.910000e-03
+9.650000e-02	5.500000e-03	5.500000e-03	9.700000e-01	8.730000e-03	8.730000e-03
+1.080000e-01	6.000000e-03	6.000000e-03	1.000000e+00	9.000000e-03	9.000000e-03
+1.210000e-01	7.000000e-03	7.000000e-03	1.000000e+00	9.000000e-03	9.000000e-03
+1.365000e-01	8.500000e-03	8.500000e-03	1.000000e+00	8.000000e-03	8.000000e-03
+1.550000e-01	1.000000e-02	1.000000e-02	9.900000e-01	7.920000e-03	7.920000e-03
+1.770000e-01	1.200000e-02	1.200000e-02	9.900000e-01	7.920000e-03	7.920000e-03
+2.040000e-01	1.500000e-02	1.500000e-02	9.800000e-01	7.840000e-03	7.840000e-03
+2.385000e-01	1.950000e-02	1.950000e-02	9.900000e-01	6.930000e-03	6.930000e-03
+2.850000e-01	2.700000e-02	2.700000e-02	1.000000e+00	7.000000e-03	7.000000e-03
+3.515000e-01	3.950000e-02	3.950000e-02	9.800000e-01	6.860000e-03	6.860000e-03
+4.575000e-01	6.650000e-02	6.650000e-02	1.000000e+00	6.000000e-03	6.000000e-03
+6.095000e-01	8.550000e-02	8.550000e-02	9.900000e-01	6.930000e-03	6.930000e-03
+8.065000e-01	1.115000e-01	1.115000e-01	1.000000e+00	8.000000e-03	8.000000e-03
+1.035500e+00	1.175000e-01	1.175000e-01	9.800000e-01	8.820000e-03	8.820000e-03
+1.324500e+00	1.715000e-01	1.715000e-01	9.500000e-01	9.500000e-03	9.500000e-03
+1.721500e+00	2.255000e-01	2.255000e-01	9.900000e-01	1.089000e-02	1.089000e-02
+2.234500e+00	2.875000e-01	2.875000e-01	9.700000e-01	1.261000e-02	1.261000e-02
+2.899500e+00	3.775000e-01	3.775000e-01	9.700000e-01	1.358000e-02	1.358000e-02
+4.138500e+00	8.615000e-01	8.615000e-01	9.700000e-01	1.164000e-02	1.164000e-02
+7.500000e+00	2.500000e+00	2.500000e+00	9.700000e-01	1.358000e-02	1.358000e-02
+1.500000e+01	5.000000e+00	5.000000e+00	9.600000e-01	2.112000e-02	2.112000e-02
+3.500000e+01	1.500000e+01	1.500000e+01	9.800000e-01	2.842000e-02	2.842000e-02
+7.500000e+01	2.500000e+01	2.500000e+01	9.200000e-01	4.692000e-02	4.692000e-02
+2.505000e+04	2.495000e+04	2.495000e+04	1.010000e+00	5.050000e-02	5.050000e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1591327/d06-x01-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1591327/d06-x01-y01
+Title=doi:10.17182/hepdata.77381.v1/t6
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.000000e-02	2.000000e-02	2.000000e-02	2.511600e+04	1.599359e+03	1.466008e+03
+6.000000e-02	2.000000e-02	2.000000e-02	2.415055e+04	1.224316e+03	1.224316e+03
+1.000000e-01	2.000000e-02	2.000000e-02	2.189917e+04	1.257058e+03	1.275803e+03
+1.400000e-01	2.000000e-02	2.000000e-02	2.346856e+04	1.440021e+03	1.297792e+03
+1.800000e-01	2.000000e-02	2.000000e-02	2.276464e+04	1.376838e+03	1.317402e+03
+2.200000e-01	2.000000e-02	2.000000e-02	2.150488e+04	1.225967e+03	1.189202e+03
+2.600000e-01	2.000000e-02	2.000000e-02	2.164055e+04	1.252351e+03	1.196705e+03
+3.000000e-01	2.000000e-02	2.000000e-02	2.019112e+04	1.184412e+03	1.150185e+03
+3.400000e-01	2.000000e-02	2.000000e-02	1.974476e+04	1.091691e+03	1.042927e+03
+3.800000e-01	2.000000e-02	2.000000e-02	1.900935e+04	1.164080e+03	1.019617e+03
+4.200000e-01	2.000000e-02	2.000000e-02	1.925738e+04	1.032921e+03	1.048776e+03
+4.600000e-01	2.000000e-02	2.000000e-02	1.967500e+04	9.983974e+02	1.129386e+03
+5.000000e-01	2.000000e-02	2.000000e-02	1.903219e+04	1.124350e+03	1.045039e+03
+5.400000e-01	2.000000e-02	2.000000e-02	1.923166e+04	1.007233e+03	9.450949e+02
+5.800000e-01	2.000000e-02	2.000000e-02	1.807252e+04	8.738584e+02	9.170804e+02
+6.200000e-01	2.000000e-02	2.000000e-02	1.691445e+04	1.010630e+03	9.721029e+02
+6.600000e-01	2.000000e-02	2.000000e-02	1.556497e+04	8.367529e+02	8.618554e+02
+7.000000e-01	2.000000e-02	2.000000e-02	1.436835e+04	8.140654e+02	7.681356e+02
+7.400000e-01	2.000000e-02	2.000000e-02	1.355049e+04	7.962568e+02	7.962568e+02
+7.800000e-01	2.000000e-02	2.000000e-02	1.215190e+04	7.397701e+02	7.101325e+02
+8.200000e-01	2.000000e-02	2.000000e-02	1.089966e+04	7.748734e+02	6.681770e+02
+8.600000e-01	2.000000e-02	2.000000e-02	8.251364e+03	7.008804e+02	5.605465e+02
+9.000000e-01	2.000000e-02	2.000000e-02	7.310637e+03	5.762897e+02	5.025764e+02
+9.400000e-01	2.000000e-02	2.000000e-02	4.230555e+03	4.327797e+02	3.423875e+02
+9.800000e-01	2.000000e-02	2.000000e-02	1.114201e+03	2.194298e+02	1.763714e+02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1591327/d06-x01-y02
+IsRef=1
+Path=/REF/ATLAS_2017_I1591327/d06-x01-y02
+Title=doi:10.17182/hepdata.77381.v1/t6
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.000000e-02	2.000000e-02	2.000000e-02	9.800000e-01	5.880000e-03	5.880000e-03
+6.000000e-02	2.000000e-02	2.000000e-02	9.800000e-01	5.880000e-03	5.880000e-03
+1.000000e-01	2.000000e-02	2.000000e-02	9.900000e-01	5.940000e-03	5.940000e-03
+1.400000e-01	2.000000e-02	2.000000e-02	9.900000e-01	5.940000e-03	5.940000e-03
+1.800000e-01	2.000000e-02	2.000000e-02	9.800000e-01	5.880000e-03	5.880000e-03
+2.200000e-01	2.000000e-02	2.000000e-02	9.700000e-01	5.820000e-03	5.820000e-03
+2.600000e-01	2.000000e-02	2.000000e-02	9.900000e-01	5.940000e-03	5.940000e-03
+3.000000e-01	2.000000e-02	2.000000e-02	9.900000e-01	5.940000e-03	5.940000e-03
+3.400000e-01	2.000000e-02	2.000000e-02	9.900000e-01	6.930000e-03	6.930000e-03
+3.800000e-01	2.000000e-02	2.000000e-02	9.800000e-01	6.860000e-03	6.860000e-03
+4.200000e-01	2.000000e-02	2.000000e-02	9.900000e-01	6.930000e-03	6.930000e-03
+4.600000e-01	2.000000e-02	2.000000e-02	9.900000e-01	6.930000e-03	6.930000e-03
+5.000000e-01	2.000000e-02	2.000000e-02	1.000000e+00	7.000000e-03	7.000000e-03
+5.400000e-01	2.000000e-02	2.000000e-02	9.800000e-01	6.860000e-03	6.860000e-03
+5.800000e-01	2.000000e-02	2.000000e-02	1.000000e+00	7.000000e-03	7.000000e-03
+6.200000e-01	2.000000e-02	2.000000e-02	9.900000e-01	7.920000e-03	7.920000e-03
+6.600000e-01	2.000000e-02	2.000000e-02	1.000000e+00	8.000000e-03	8.000000e-03
+7.000000e-01	2.000000e-02	2.000000e-02	9.900000e-01	7.920000e-03	7.920000e-03
+7.400000e-01	2.000000e-02	2.000000e-02	1.010000e+00	9.090000e-03	9.090000e-03
+7.800000e-01	2.000000e-02	2.000000e-02	1.000000e+00	9.000000e-03	9.000000e-03
+8.200000e-01	2.000000e-02	2.000000e-02	1.000000e+00	1.000000e-02	1.000000e-02
+8.600000e-01	2.000000e-02	2.000000e-02	1.010000e+00	1.212000e-02	1.212000e-02
+9.000000e-01	2.000000e-02	2.000000e-02	9.800000e-01	1.372000e-02	1.372000e-02
+9.400000e-01	2.000000e-02	2.000000e-02	9.700000e-01	1.940000e-02	1.940000e-02
+9.800000e-01	2.000000e-02	2.000000e-02	9.400000e-01	3.760000e-02	3.760000e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1591327/d07-x01-y01
+IsRef=1
+Path=/REF/ATLAS_2017_I1591327/d07-x01-y01
+Title=doi:10.17182/hepdata.77381.v1/t7
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e-01	1.250000e-01	1.250000e-01	7.881606e+02	9.487437e+01	7.934237e+01
+3.750000e-01	1.250000e-01	1.250000e-01	9.204854e+02	1.143738e+02	1.075945e+02
+6.250000e-01	1.250000e-01	1.250000e-01	9.958000e+02	1.080156e+02	1.107489e+02
+8.750000e-01	1.250000e-01	1.250000e-01	1.040426e+03	9.884043e+01	9.973986e+01
+1.125000e+00	1.250000e-01	1.250000e-01	1.111119e+03	8.192947e+01	8.277648e+01
+1.375000e+00	1.250000e-01	1.250000e-01	1.240615e+03	8.002686e+01	7.624484e+01
+1.562500e+00	6.250000e-02	6.250000e-02	1.486501e+03	1.024500e+02	9.589948e+01
+1.687500e+00	6.250000e-02	6.250000e-02	1.720401e+03	1.097691e+02	1.120112e+02
+1.812500e+00	6.250000e-02	6.250000e-02	2.008349e+03	1.186457e+02	1.172608e+02
+1.937500e+00	6.250000e-02	6.250000e-02	2.204421e+03	1.392455e+02	1.346142e+02
+2.062500e+00	6.250000e-02	6.250000e-02	2.705967e+03	1.619742e+02	1.679009e+02
+2.187500e+00	6.250000e-02	6.250000e-02	3.370186e+03	2.057470e+02	1.899003e+02
+2.275000e+00	2.500000e-02	2.500000e-02	4.015759e+03	3.507760e+02	2.696845e+02
+2.325000e+00	2.500000e-02	2.500000e-02	4.287123e+03	3.168703e+02	3.103060e+02
+2.375000e+00	2.500000e-02	2.500000e-02	4.753248e+03	3.418706e+02	2.841234e+02
+2.425000e+00	2.500000e-02	2.500000e-02	5.270972e+03	3.806430e+02	3.155107e+02
+2.475000e+00	2.500000e-02	2.500000e-02	5.883029e+03	3.679128e+02	3.679128e+02
+2.525000e+00	2.500000e-02	2.500000e-02	6.897595e+03	4.527787e+02	3.980337e+02
+2.575000e+00	2.500000e-02	2.500000e-02	7.344693e+03	5.204896e+02	5.032589e+02
+2.625000e+00	2.500000e-02	2.500000e-02	8.392701e+03	5.590446e+02	5.256002e+02
+2.662500e+00	1.250000e-02	1.250000e-02	9.238900e+03	7.169530e+02	6.812397e+02
+2.687500e+00	1.250000e-02	1.250000e-02	1.120731e+04	7.613548e+02	6.738379e+02
+2.712500e+00	1.250000e-02	1.250000e-02	1.086299e+04	8.029062e+02	7.379638e+02
+2.737500e+00	1.250000e-02	1.250000e-02	1.136255e+04	9.128307e+02	7.424015e+02
+2.762500e+00	1.250000e-02	1.250000e-02	1.220147e+04	1.054846e+03	1.015732e+03
+2.787500e+00	1.250000e-02	1.250000e-02	1.379431e+04	9.558970e+02	9.558970e+02
+2.812500e+00	1.250000e-02	1.250000e-02	1.404641e+04	1.066695e+03	9.264241e+02
+2.837500e+00	1.250000e-02	1.250000e-02	1.561859e+04	1.207086e+03	1.074169e+03
+2.862500e+00	1.250000e-02	1.250000e-02	1.765998e+04	1.196455e+03	1.196455e+03
+2.887500e+00	1.250000e-02	1.250000e-02	1.777247e+04	1.424239e+03	1.146428e+03
+2.912500e+00	1.250000e-02	1.250000e-02	2.142216e+04	1.263544e+03	1.183853e+03
+2.937500e+00	1.250000e-02	1.250000e-02	2.189890e+04	1.330797e+03	1.262752e+03
+2.962500e+00	1.250000e-02	1.250000e-02	2.329515e+04	1.495614e+03	1.305776e+03
+2.987500e+00	1.250000e-02	1.250000e-02	2.732877e+04	1.650848e+03	1.561571e+03
+3.012500e+00	1.250000e-02	1.250000e-02	3.132652e+04	1.720109e+03	1.720109e+03
+3.037500e+00	1.250000e-02	1.250000e-02	3.249470e+04	1.962906e+03	1.909461e+03
+3.062500e+00	1.250000e-02	1.250000e-02	3.650367e+04	2.034404e+03	2.218631e+03
+3.087500e+00	1.250000e-02	1.250000e-02	4.080399e+04	2.432205e+03	2.291209e+03
+3.110000e+00	1.000000e-02	1.000000e-02	4.632980e+04	2.620400e+03	2.582029e+03
+3.131000e+00	1.100000e-02	1.100000e-02	4.718318e+04	3.031863e+03	2.737438e+03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ATLAS_2017_I1591327/d07-x01-y02
+IsRef=1
+Path=/REF/ATLAS_2017_I1591327/d07-x01-y02
+Title=doi:10.17182/hepdata.77381.v1/t7
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.250000e-01	1.250000e-01	1.250000e-01	9.700000e-01	1.261000e-02	1.261000e-02
+3.750000e-01	1.250000e-01	1.250000e-01	9.700000e-01	1.067000e-02	1.067000e-02
+6.250000e-01	1.250000e-01	1.250000e-01	9.800000e-01	1.078000e-02	1.078000e-02
+8.750000e-01	1.250000e-01	1.250000e-01	9.800000e-01	9.800000e-03	9.800000e-03
+1.125000e+00	1.250000e-01	1.250000e-01	9.700000e-01	9.700000e-03	9.700000e-03
+1.375000e+00	1.250000e-01	1.250000e-01	9.600000e-01	8.640000e-03	8.640000e-03
+1.562500e+00	6.250000e-02	6.250000e-02	9.900000e-01	1.188000e-02	1.188000e-02
+1.687500e+00	6.250000e-02	6.250000e-02	1.000000e+00	1.100000e-02	1.100000e-02
+1.812500e+00	6.250000e-02	6.250000e-02	1.000000e+00	1.100000e-02	1.100000e-02
+1.937500e+00	6.250000e-02	6.250000e-02	9.900000e-01	9.900000e-03	9.900000e-03
+2.062500e+00	6.250000e-02	6.250000e-02	9.800000e-01	8.820000e-03	8.820000e-03
+2.187500e+00	6.250000e-02	6.250000e-02	9.900000e-01	8.910000e-03	8.910000e-03
+2.275000e+00	2.500000e-02	2.500000e-02	9.900000e-01	1.287000e-02	1.287000e-02
+2.325000e+00	2.500000e-02	2.500000e-02	1.000000e+00	1.200000e-02	1.200000e-02
+2.375000e+00	2.500000e-02	2.500000e-02	1.000000e+00	1.200000e-02	1.200000e-02
+2.425000e+00	2.500000e-02	2.500000e-02	9.900000e-01	1.089000e-02	1.089000e-02
+2.475000e+00	2.500000e-02	2.500000e-02	1.000000e+00	1.100000e-02	1.100000e-02
+2.525000e+00	2.500000e-02	2.500000e-02	9.800000e-01	9.800000e-03	9.800000e-03
+2.575000e+00	2.500000e-02	2.500000e-02	1.000000e+00	1.000000e-02	1.000000e-02
+2.625000e+00	2.500000e-02	2.500000e-02	9.900000e-01	8.910000e-03	8.910000e-03
+2.662500e+00	1.250000e-02	1.250000e-02	9.900000e-01	1.287000e-02	1.287000e-02
+2.687500e+00	1.250000e-02	1.250000e-02	9.800000e-01	1.176000e-02	1.176000e-02
+2.712500e+00	1.250000e-02	1.250000e-02	1.010000e+00	1.212000e-02	1.212000e-02
+2.737500e+00	1.250000e-02	1.250000e-02	9.800000e-01	1.176000e-02	1.176000e-02
+2.762500e+00	1.250000e-02	1.250000e-02	9.900000e-01	1.089000e-02	1.089000e-02
+2.787500e+00	1.250000e-02	1.250000e-02	1.000000e+00	1.100000e-02	1.100000e-02
+2.812500e+00	1.250000e-02	1.250000e-02	1.000000e+00	1.000000e-02	1.000000e-02
+2.837500e+00	1.250000e-02	1.250000e-02	9.900000e-01	9.900000e-03	9.900000e-03
+2.862500e+00	1.250000e-02	1.250000e-02	9.700000e-01	9.700000e-03	9.700000e-03
+2.887500e+00	1.250000e-02	1.250000e-02	1.000000e+00	9.000000e-03	9.000000e-03
+2.912500e+00	1.250000e-02	1.250000e-02	9.800000e-01	8.820000e-03	8.820000e-03
+2.937500e+00	1.250000e-02	1.250000e-02	9.900000e-01	7.920000e-03	7.920000e-03
+2.962500e+00	1.250000e-02	1.250000e-02	1.000000e+00	8.000000e-03	8.000000e-03
+2.987500e+00	1.250000e-02	1.250000e-02	9.900000e-01	7.920000e-03	7.920000e-03
+3.012500e+00	1.250000e-02	1.250000e-02	9.900000e-01	6.930000e-03	6.930000e-03
+3.037500e+00	1.250000e-02	1.250000e-02	1.000000e+00	7.000000e-03	7.000000e-03
+3.062500e+00	1.250000e-02	1.250000e-02	9.900000e-01	5.940000e-03	5.940000e-03
+3.087500e+00	1.250000e-02	1.250000e-02	9.800000e-01	5.880000e-03	5.880000e-03
+3.110000e+00	1.000000e-02	1.000000e-02	9.700000e-01	6.790000e-03	6.790000e-03
+3.131000e+00	1.100000e-02	1.100000e-02	9.800000e-01	5.880000e-03	5.880000e-03
+END YODA_SCATTER2D
+
diff --git a/src/Analyses/CDF_1988_S1865951.cc b/analyses/pluginCDF/CDF_1988_S1865951.cc
rename from src/Analyses/CDF_1988_S1865951.cc
rename to analyses/pluginCDF/CDF_1988_S1865951.cc
diff --git a/data/anainfo/CDF_1988_S1865951.info b/analyses/pluginCDF/CDF_1988_S1865951.info
rename from data/anainfo/CDF_1988_S1865951.info
rename to analyses/pluginCDF/CDF_1988_S1865951.info
diff --git a/data/plotinfo/CDF_1988_S1865951.plot b/analyses/pluginCDF/CDF_1988_S1865951.plot
rename from data/plotinfo/CDF_1988_S1865951.plot
rename to analyses/pluginCDF/CDF_1988_S1865951.plot
diff --git a/data/refdata/CDF_1988_S1865951.yoda b/analyses/pluginCDF/CDF_1988_S1865951.yoda
rename from data/refdata/CDF_1988_S1865951.yoda
rename to analyses/pluginCDF/CDF_1988_S1865951.yoda
diff --git a/src/Analyses/CDF_1990_S2089246.cc b/analyses/pluginCDF/CDF_1990_S2089246.cc
rename from src/Analyses/CDF_1990_S2089246.cc
rename to analyses/pluginCDF/CDF_1990_S2089246.cc
diff --git a/data/anainfo/CDF_1990_S2089246.info b/analyses/pluginCDF/CDF_1990_S2089246.info
rename from data/anainfo/CDF_1990_S2089246.info
rename to analyses/pluginCDF/CDF_1990_S2089246.info
diff --git a/data/plotinfo/CDF_1990_S2089246.plot b/analyses/pluginCDF/CDF_1990_S2089246.plot
rename from data/plotinfo/CDF_1990_S2089246.plot
rename to analyses/pluginCDF/CDF_1990_S2089246.plot
diff --git a/data/refdata/CDF_1990_S2089246.yoda b/analyses/pluginCDF/CDF_1990_S2089246.yoda
rename from data/refdata/CDF_1990_S2089246.yoda
rename to analyses/pluginCDF/CDF_1990_S2089246.yoda
diff --git a/src/Analyses/CDF_1993_S2742446.cc b/analyses/pluginCDF/CDF_1993_S2742446.cc
rename from src/Analyses/CDF_1993_S2742446.cc
rename to analyses/pluginCDF/CDF_1993_S2742446.cc
diff --git a/data/anainfo/CDF_1993_S2742446.info b/analyses/pluginCDF/CDF_1993_S2742446.info
rename from data/anainfo/CDF_1993_S2742446.info
rename to analyses/pluginCDF/CDF_1993_S2742446.info
diff --git a/data/plotinfo/CDF_1993_S2742446.plot b/analyses/pluginCDF/CDF_1993_S2742446.plot
rename from data/plotinfo/CDF_1993_S2742446.plot
rename to analyses/pluginCDF/CDF_1993_S2742446.plot
diff --git a/data/refdata/CDF_1993_S2742446.yoda b/analyses/pluginCDF/CDF_1993_S2742446.yoda
rename from data/refdata/CDF_1993_S2742446.yoda
rename to analyses/pluginCDF/CDF_1993_S2742446.yoda
diff --git a/src/Analyses/CDF_1994_S2952106.cc b/analyses/pluginCDF/CDF_1994_S2952106.cc
rename from src/Analyses/CDF_1994_S2952106.cc
rename to analyses/pluginCDF/CDF_1994_S2952106.cc
diff --git a/data/anainfo/CDF_1994_S2952106.info b/analyses/pluginCDF/CDF_1994_S2952106.info
rename from data/anainfo/CDF_1994_S2952106.info
rename to analyses/pluginCDF/CDF_1994_S2952106.info
diff --git a/data/plotinfo/CDF_1994_S2952106.plot b/analyses/pluginCDF/CDF_1994_S2952106.plot
rename from data/plotinfo/CDF_1994_S2952106.plot
rename to analyses/pluginCDF/CDF_1994_S2952106.plot
diff --git a/data/refdata/CDF_1994_S2952106.yoda b/analyses/pluginCDF/CDF_1994_S2952106.yoda
rename from data/refdata/CDF_1994_S2952106.yoda
rename to analyses/pluginCDF/CDF_1994_S2952106.yoda
diff --git a/src/Analyses/CDF_1996_S3108457.cc b/analyses/pluginCDF/CDF_1996_S3108457.cc
rename from src/Analyses/CDF_1996_S3108457.cc
rename to analyses/pluginCDF/CDF_1996_S3108457.cc
diff --git a/data/anainfo/CDF_1996_S3108457.info b/analyses/pluginCDF/CDF_1996_S3108457.info
rename from data/anainfo/CDF_1996_S3108457.info
rename to analyses/pluginCDF/CDF_1996_S3108457.info
diff --git a/data/plotinfo/CDF_1996_S3108457.plot b/analyses/pluginCDF/CDF_1996_S3108457.plot
rename from data/plotinfo/CDF_1996_S3108457.plot
rename to analyses/pluginCDF/CDF_1996_S3108457.plot
diff --git a/data/refdata/CDF_1996_S3108457.yoda b/analyses/pluginCDF/CDF_1996_S3108457.yoda
rename from data/refdata/CDF_1996_S3108457.yoda
rename to analyses/pluginCDF/CDF_1996_S3108457.yoda
diff --git a/src/Analyses/CDF_1996_S3349578.cc b/analyses/pluginCDF/CDF_1996_S3349578.cc
rename from src/Analyses/CDF_1996_S3349578.cc
rename to analyses/pluginCDF/CDF_1996_S3349578.cc
diff --git a/data/anainfo/CDF_1996_S3349578.info b/analyses/pluginCDF/CDF_1996_S3349578.info
rename from data/anainfo/CDF_1996_S3349578.info
rename to analyses/pluginCDF/CDF_1996_S3349578.info
diff --git a/data/plotinfo/CDF_1996_S3349578.plot b/analyses/pluginCDF/CDF_1996_S3349578.plot
rename from data/plotinfo/CDF_1996_S3349578.plot
rename to analyses/pluginCDF/CDF_1996_S3349578.plot
diff --git a/data/refdata/CDF_1996_S3349578.yoda b/analyses/pluginCDF/CDF_1996_S3349578.yoda
rename from data/refdata/CDF_1996_S3349578.yoda
rename to analyses/pluginCDF/CDF_1996_S3349578.yoda
diff --git a/src/Analyses/CDF_1996_S3418421.cc b/analyses/pluginCDF/CDF_1996_S3418421.cc
rename from src/Analyses/CDF_1996_S3418421.cc
rename to analyses/pluginCDF/CDF_1996_S3418421.cc
diff --git a/data/anainfo/CDF_1996_S3418421.info b/analyses/pluginCDF/CDF_1996_S3418421.info
rename from data/anainfo/CDF_1996_S3418421.info
rename to analyses/pluginCDF/CDF_1996_S3418421.info
diff --git a/data/plotinfo/CDF_1996_S3418421.plot b/analyses/pluginCDF/CDF_1996_S3418421.plot
rename from data/plotinfo/CDF_1996_S3418421.plot
rename to analyses/pluginCDF/CDF_1996_S3418421.plot
diff --git a/data/refdata/CDF_1996_S3418421.yoda b/analyses/pluginCDF/CDF_1996_S3418421.yoda
rename from data/refdata/CDF_1996_S3418421.yoda
rename to analyses/pluginCDF/CDF_1996_S3418421.yoda
diff --git a/src/Analyses/CDF_1997_S3541940.cc b/analyses/pluginCDF/CDF_1997_S3541940.cc
rename from src/Analyses/CDF_1997_S3541940.cc
rename to analyses/pluginCDF/CDF_1997_S3541940.cc
diff --git a/data/anainfo/CDF_1997_S3541940.info b/analyses/pluginCDF/CDF_1997_S3541940.info
rename from data/anainfo/CDF_1997_S3541940.info
rename to analyses/pluginCDF/CDF_1997_S3541940.info
diff --git a/data/plotinfo/CDF_1997_S3541940.plot b/analyses/pluginCDF/CDF_1997_S3541940.plot
rename from data/plotinfo/CDF_1997_S3541940.plot
rename to analyses/pluginCDF/CDF_1997_S3541940.plot
diff --git a/data/refdata/CDF_1997_S3541940.yoda b/analyses/pluginCDF/CDF_1997_S3541940.yoda
rename from data/refdata/CDF_1997_S3541940.yoda
rename to analyses/pluginCDF/CDF_1997_S3541940.yoda
diff --git a/src/Analyses/CDF_1998_S3618439.cc b/analyses/pluginCDF/CDF_1998_S3618439.cc
rename from src/Analyses/CDF_1998_S3618439.cc
rename to analyses/pluginCDF/CDF_1998_S3618439.cc
diff --git a/data/anainfo/CDF_1998_S3618439.info b/analyses/pluginCDF/CDF_1998_S3618439.info
rename from data/anainfo/CDF_1998_S3618439.info
rename to analyses/pluginCDF/CDF_1998_S3618439.info
diff --git a/data/plotinfo/CDF_1998_S3618439.plot b/analyses/pluginCDF/CDF_1998_S3618439.plot
rename from data/plotinfo/CDF_1998_S3618439.plot
rename to analyses/pluginCDF/CDF_1998_S3618439.plot
diff --git a/data/refdata/CDF_1998_S3618439.yoda b/analyses/pluginCDF/CDF_1998_S3618439.yoda
rename from data/refdata/CDF_1998_S3618439.yoda
rename to analyses/pluginCDF/CDF_1998_S3618439.yoda
diff --git a/src/Analyses/CDF_2000_S4155203.cc b/analyses/pluginCDF/CDF_2000_S4155203.cc
rename from src/Analyses/CDF_2000_S4155203.cc
rename to analyses/pluginCDF/CDF_2000_S4155203.cc
diff --git a/data/anainfo/CDF_2000_S4155203.info b/analyses/pluginCDF/CDF_2000_S4155203.info
rename from data/anainfo/CDF_2000_S4155203.info
rename to analyses/pluginCDF/CDF_2000_S4155203.info
diff --git a/data/plotinfo/CDF_2000_S4155203.plot b/analyses/pluginCDF/CDF_2000_S4155203.plot
rename from data/plotinfo/CDF_2000_S4155203.plot
rename to analyses/pluginCDF/CDF_2000_S4155203.plot
diff --git a/data/refdata/CDF_2000_S4155203.yoda b/analyses/pluginCDF/CDF_2000_S4155203.yoda
rename from data/refdata/CDF_2000_S4155203.yoda
rename to analyses/pluginCDF/CDF_2000_S4155203.yoda
diff --git a/src/Analyses/CDF_2000_S4266730.cc b/analyses/pluginCDF/CDF_2000_S4266730.cc
rename from src/Analyses/CDF_2000_S4266730.cc
rename to analyses/pluginCDF/CDF_2000_S4266730.cc
diff --git a/data/anainfo/CDF_2000_S4266730.info b/analyses/pluginCDF/CDF_2000_S4266730.info
rename from data/anainfo/CDF_2000_S4266730.info
rename to analyses/pluginCDF/CDF_2000_S4266730.info
diff --git a/data/plotinfo/CDF_2000_S4266730.plot b/analyses/pluginCDF/CDF_2000_S4266730.plot
rename from data/plotinfo/CDF_2000_S4266730.plot
rename to analyses/pluginCDF/CDF_2000_S4266730.plot
diff --git a/data/refdata/CDF_2000_S4266730.yoda b/analyses/pluginCDF/CDF_2000_S4266730.yoda
rename from data/refdata/CDF_2000_S4266730.yoda
rename to analyses/pluginCDF/CDF_2000_S4266730.yoda
diff --git a/src/Analyses/CDF_2001_S4517016.cc b/analyses/pluginCDF/CDF_2001_S4517016.cc
rename from src/Analyses/CDF_2001_S4517016.cc
rename to analyses/pluginCDF/CDF_2001_S4517016.cc
diff --git a/data/anainfo/CDF_2001_S4517016.info b/analyses/pluginCDF/CDF_2001_S4517016.info
rename from data/anainfo/CDF_2001_S4517016.info
rename to analyses/pluginCDF/CDF_2001_S4517016.info
diff --git a/data/plotinfo/CDF_2001_S4517016.plot b/analyses/pluginCDF/CDF_2001_S4517016.plot
rename from data/plotinfo/CDF_2001_S4517016.plot
rename to analyses/pluginCDF/CDF_2001_S4517016.plot
diff --git a/data/refdata/CDF_2001_S4517016.yoda b/analyses/pluginCDF/CDF_2001_S4517016.yoda
rename from data/refdata/CDF_2001_S4517016.yoda
rename to analyses/pluginCDF/CDF_2001_S4517016.yoda
diff --git a/src/Analyses/CDF_2001_S4563131.cc b/analyses/pluginCDF/CDF_2001_S4563131.cc
rename from src/Analyses/CDF_2001_S4563131.cc
rename to analyses/pluginCDF/CDF_2001_S4563131.cc
diff --git a/data/anainfo/CDF_2001_S4563131.info b/analyses/pluginCDF/CDF_2001_S4563131.info
rename from data/anainfo/CDF_2001_S4563131.info
rename to analyses/pluginCDF/CDF_2001_S4563131.info
diff --git a/data/plotinfo/CDF_2001_S4563131.plot b/analyses/pluginCDF/CDF_2001_S4563131.plot
rename from data/plotinfo/CDF_2001_S4563131.plot
rename to analyses/pluginCDF/CDF_2001_S4563131.plot
diff --git a/data/refdata/CDF_2001_S4563131.yoda b/analyses/pluginCDF/CDF_2001_S4563131.yoda
rename from data/refdata/CDF_2001_S4563131.yoda
rename to analyses/pluginCDF/CDF_2001_S4563131.yoda
diff --git a/src/Analyses/CDF_2001_S4751469.cc b/analyses/pluginCDF/CDF_2001_S4751469.cc
rename from src/Analyses/CDF_2001_S4751469.cc
rename to analyses/pluginCDF/CDF_2001_S4751469.cc
diff --git a/data/anainfo/CDF_2001_S4751469.info b/analyses/pluginCDF/CDF_2001_S4751469.info
rename from data/anainfo/CDF_2001_S4751469.info
rename to analyses/pluginCDF/CDF_2001_S4751469.info
diff --git a/data/plotinfo/CDF_2001_S4751469.plot b/analyses/pluginCDF/CDF_2001_S4751469.plot
rename from data/plotinfo/CDF_2001_S4751469.plot
rename to analyses/pluginCDF/CDF_2001_S4751469.plot
diff --git a/data/refdata/CDF_2001_S4751469.yoda b/analyses/pluginCDF/CDF_2001_S4751469.yoda
rename from data/refdata/CDF_2001_S4751469.yoda
rename to analyses/pluginCDF/CDF_2001_S4751469.yoda
diff --git a/src/Analyses/CDF_2002_S4796047.cc b/analyses/pluginCDF/CDF_2002_S4796047.cc
rename from src/Analyses/CDF_2002_S4796047.cc
rename to analyses/pluginCDF/CDF_2002_S4796047.cc
diff --git a/data/refdata/CDF_2002_S4796047.dat b/analyses/pluginCDF/CDF_2002_S4796047.dat
rename from data/refdata/CDF_2002_S4796047.dat
rename to analyses/pluginCDF/CDF_2002_S4796047.dat
diff --git a/data/anainfo/CDF_2002_S4796047.info b/analyses/pluginCDF/CDF_2002_S4796047.info
rename from data/anainfo/CDF_2002_S4796047.info
rename to analyses/pluginCDF/CDF_2002_S4796047.info
diff --git a/data/plotinfo/CDF_2002_S4796047.plot b/analyses/pluginCDF/CDF_2002_S4796047.plot
rename from data/plotinfo/CDF_2002_S4796047.plot
rename to analyses/pluginCDF/CDF_2002_S4796047.plot
diff --git a/data/refdata/CDF_2002_S4796047.yoda b/analyses/pluginCDF/CDF_2002_S4796047.yoda
rename from data/refdata/CDF_2002_S4796047.yoda
rename to analyses/pluginCDF/CDF_2002_S4796047.yoda
diff --git a/src/Analyses/CDF_2004_S5839831.cc b/analyses/pluginCDF/CDF_2004_S5839831.cc
rename from src/Analyses/CDF_2004_S5839831.cc
rename to analyses/pluginCDF/CDF_2004_S5839831.cc
diff --git a/data/anainfo/CDF_2004_S5839831.info b/analyses/pluginCDF/CDF_2004_S5839831.info
rename from data/anainfo/CDF_2004_S5839831.info
rename to analyses/pluginCDF/CDF_2004_S5839831.info
diff --git a/data/plotinfo/CDF_2004_S5839831.plot b/analyses/pluginCDF/CDF_2004_S5839831.plot
rename from data/plotinfo/CDF_2004_S5839831.plot
rename to analyses/pluginCDF/CDF_2004_S5839831.plot
diff --git a/data/refdata/CDF_2004_S5839831.yoda b/analyses/pluginCDF/CDF_2004_S5839831.yoda
rename from data/refdata/CDF_2004_S5839831.yoda
rename to analyses/pluginCDF/CDF_2004_S5839831.yoda
diff --git a/src/Analyses/CDF_2005_S6080774.cc b/analyses/pluginCDF/CDF_2005_S6080774.cc
rename from src/Analyses/CDF_2005_S6080774.cc
rename to analyses/pluginCDF/CDF_2005_S6080774.cc
diff --git a/data/anainfo/CDF_2005_S6080774.info b/analyses/pluginCDF/CDF_2005_S6080774.info
rename from data/anainfo/CDF_2005_S6080774.info
rename to analyses/pluginCDF/CDF_2005_S6080774.info
diff --git a/data/plotinfo/CDF_2005_S6080774.plot b/analyses/pluginCDF/CDF_2005_S6080774.plot
rename from data/plotinfo/CDF_2005_S6080774.plot
rename to analyses/pluginCDF/CDF_2005_S6080774.plot
diff --git a/data/refdata/CDF_2005_S6080774.yoda b/analyses/pluginCDF/CDF_2005_S6080774.yoda
rename from data/refdata/CDF_2005_S6080774.yoda
rename to analyses/pluginCDF/CDF_2005_S6080774.yoda
diff --git a/src/Analyses/CDF_2005_S6217184.cc b/analyses/pluginCDF/CDF_2005_S6217184.cc
rename from src/Analyses/CDF_2005_S6217184.cc
rename to analyses/pluginCDF/CDF_2005_S6217184.cc
diff --git a/data/anainfo/CDF_2005_S6217184.info b/analyses/pluginCDF/CDF_2005_S6217184.info
rename from data/anainfo/CDF_2005_S6217184.info
rename to analyses/pluginCDF/CDF_2005_S6217184.info
diff --git a/data/plotinfo/CDF_2005_S6217184.plot b/analyses/pluginCDF/CDF_2005_S6217184.plot
rename from data/plotinfo/CDF_2005_S6217184.plot
rename to analyses/pluginCDF/CDF_2005_S6217184.plot
diff --git a/data/refdata/CDF_2005_S6217184.yoda b/analyses/pluginCDF/CDF_2005_S6217184.yoda
rename from data/refdata/CDF_2005_S6217184.yoda
rename to analyses/pluginCDF/CDF_2005_S6217184.yoda
diff --git a/src/Analyses/CDF_2006_S6450792.cc b/analyses/pluginCDF/CDF_2006_S6450792.cc
rename from src/Analyses/CDF_2006_S6450792.cc
rename to analyses/pluginCDF/CDF_2006_S6450792.cc
diff --git a/data/anainfo/CDF_2006_S6450792.info b/analyses/pluginCDF/CDF_2006_S6450792.info
rename from data/anainfo/CDF_2006_S6450792.info
rename to analyses/pluginCDF/CDF_2006_S6450792.info
diff --git a/data/plotinfo/CDF_2006_S6450792.plot b/analyses/pluginCDF/CDF_2006_S6450792.plot
rename from data/plotinfo/CDF_2006_S6450792.plot
rename to analyses/pluginCDF/CDF_2006_S6450792.plot
diff --git a/data/refdata/CDF_2006_S6450792.yoda b/analyses/pluginCDF/CDF_2006_S6450792.yoda
rename from data/refdata/CDF_2006_S6450792.yoda
rename to analyses/pluginCDF/CDF_2006_S6450792.yoda
diff --git a/src/Analyses/CDF_2006_S6653332.cc b/analyses/pluginCDF/CDF_2006_S6653332.cc
rename from src/Analyses/CDF_2006_S6653332.cc
rename to analyses/pluginCDF/CDF_2006_S6653332.cc
diff --git a/data/anainfo/CDF_2006_S6653332.info b/analyses/pluginCDF/CDF_2006_S6653332.info
rename from data/anainfo/CDF_2006_S6653332.info
rename to analyses/pluginCDF/CDF_2006_S6653332.info
diff --git a/data/plotinfo/CDF_2006_S6653332.plot b/analyses/pluginCDF/CDF_2006_S6653332.plot
rename from data/plotinfo/CDF_2006_S6653332.plot
rename to analyses/pluginCDF/CDF_2006_S6653332.plot
diff --git a/data/refdata/CDF_2006_S6653332.yoda b/analyses/pluginCDF/CDF_2006_S6653332.yoda
rename from data/refdata/CDF_2006_S6653332.yoda
rename to analyses/pluginCDF/CDF_2006_S6653332.yoda
diff --git a/src/Analyses/CDF_2007_S7057202.cc b/analyses/pluginCDF/CDF_2007_S7057202.cc
rename from src/Analyses/CDF_2007_S7057202.cc
rename to analyses/pluginCDF/CDF_2007_S7057202.cc
diff --git a/data/anainfo/CDF_2007_S7057202.info b/analyses/pluginCDF/CDF_2007_S7057202.info
rename from data/anainfo/CDF_2007_S7057202.info
rename to analyses/pluginCDF/CDF_2007_S7057202.info
diff --git a/data/plotinfo/CDF_2007_S7057202.plot b/analyses/pluginCDF/CDF_2007_S7057202.plot
rename from data/plotinfo/CDF_2007_S7057202.plot
rename to analyses/pluginCDF/CDF_2007_S7057202.plot
diff --git a/data/refdata/CDF_2007_S7057202.yoda b/analyses/pluginCDF/CDF_2007_S7057202.yoda
rename from data/refdata/CDF_2007_S7057202.yoda
rename to analyses/pluginCDF/CDF_2007_S7057202.yoda
diff --git a/src/Analyses/CDF_2008_S7540469.cc b/analyses/pluginCDF/CDF_2008_S7540469.cc
rename from src/Analyses/CDF_2008_S7540469.cc
rename to analyses/pluginCDF/CDF_2008_S7540469.cc
diff --git a/data/anainfo/CDF_2008_S7540469.info b/analyses/pluginCDF/CDF_2008_S7540469.info
rename from data/anainfo/CDF_2008_S7540469.info
rename to analyses/pluginCDF/CDF_2008_S7540469.info
diff --git a/data/plotinfo/CDF_2008_S7540469.plot b/analyses/pluginCDF/CDF_2008_S7540469.plot
rename from data/plotinfo/CDF_2008_S7540469.plot
rename to analyses/pluginCDF/CDF_2008_S7540469.plot
diff --git a/data/refdata/CDF_2008_S7540469.yoda b/analyses/pluginCDF/CDF_2008_S7540469.yoda
rename from data/refdata/CDF_2008_S7540469.yoda
rename to analyses/pluginCDF/CDF_2008_S7540469.yoda
diff --git a/src/Analyses/CDF_2008_S7541902.cc b/analyses/pluginCDF/CDF_2008_S7541902.cc
rename from src/Analyses/CDF_2008_S7541902.cc
rename to analyses/pluginCDF/CDF_2008_S7541902.cc
diff --git a/data/anainfo/CDF_2008_S7541902.info b/analyses/pluginCDF/CDF_2008_S7541902.info
rename from data/anainfo/CDF_2008_S7541902.info
rename to analyses/pluginCDF/CDF_2008_S7541902.info
diff --git a/data/plotinfo/CDF_2008_S7541902.plot b/analyses/pluginCDF/CDF_2008_S7541902.plot
rename from data/plotinfo/CDF_2008_S7541902.plot
rename to analyses/pluginCDF/CDF_2008_S7541902.plot
diff --git a/data/refdata/CDF_2008_S7541902.yoda b/analyses/pluginCDF/CDF_2008_S7541902.yoda
rename from data/refdata/CDF_2008_S7541902.yoda
rename to analyses/pluginCDF/CDF_2008_S7541902.yoda
diff --git a/src/Analyses/CDF_2008_S7782535.cc b/analyses/pluginCDF/CDF_2008_S7782535.cc
rename from src/Analyses/CDF_2008_S7782535.cc
rename to analyses/pluginCDF/CDF_2008_S7782535.cc
diff --git a/data/anainfo/CDF_2008_S7782535.info b/analyses/pluginCDF/CDF_2008_S7782535.info
rename from data/anainfo/CDF_2008_S7782535.info
rename to analyses/pluginCDF/CDF_2008_S7782535.info
diff --git a/data/plotinfo/CDF_2008_S7782535.plot b/analyses/pluginCDF/CDF_2008_S7782535.plot
rename from data/plotinfo/CDF_2008_S7782535.plot
rename to analyses/pluginCDF/CDF_2008_S7782535.plot
diff --git a/data/refdata/CDF_2008_S7782535.yoda b/analyses/pluginCDF/CDF_2008_S7782535.yoda
rename from data/refdata/CDF_2008_S7782535.yoda
rename to analyses/pluginCDF/CDF_2008_S7782535.yoda
diff --git a/src/Analyses/CDF_2008_S7828950.cc b/analyses/pluginCDF/CDF_2008_S7828950.cc
rename from src/Analyses/CDF_2008_S7828950.cc
rename to analyses/pluginCDF/CDF_2008_S7828950.cc
diff --git a/data/anainfo/CDF_2008_S7828950.info b/analyses/pluginCDF/CDF_2008_S7828950.info
rename from data/anainfo/CDF_2008_S7828950.info
rename to analyses/pluginCDF/CDF_2008_S7828950.info
diff --git a/data/plotinfo/CDF_2008_S7828950.plot b/analyses/pluginCDF/CDF_2008_S7828950.plot
rename from data/plotinfo/CDF_2008_S7828950.plot
rename to analyses/pluginCDF/CDF_2008_S7828950.plot
diff --git a/data/refdata/CDF_2008_S7828950.yoda b/analyses/pluginCDF/CDF_2008_S7828950.yoda
rename from data/refdata/CDF_2008_S7828950.yoda
rename to analyses/pluginCDF/CDF_2008_S7828950.yoda
diff --git a/src/Analyses/CDF_2008_S8093652.cc b/analyses/pluginCDF/CDF_2008_S8093652.cc
rename from src/Analyses/CDF_2008_S8093652.cc
rename to analyses/pluginCDF/CDF_2008_S8093652.cc
diff --git a/data/anainfo/CDF_2008_S8093652.info b/analyses/pluginCDF/CDF_2008_S8093652.info
rename from data/anainfo/CDF_2008_S8093652.info
rename to analyses/pluginCDF/CDF_2008_S8093652.info
diff --git a/data/plotinfo/CDF_2008_S8093652.plot b/analyses/pluginCDF/CDF_2008_S8093652.plot
rename from data/plotinfo/CDF_2008_S8093652.plot
rename to analyses/pluginCDF/CDF_2008_S8093652.plot
diff --git a/data/refdata/CDF_2008_S8093652.yoda b/analyses/pluginCDF/CDF_2008_S8093652.yoda
rename from data/refdata/CDF_2008_S8093652.yoda
rename to analyses/pluginCDF/CDF_2008_S8093652.yoda
diff --git a/src/Analyses/CDF_2008_S8095620.cc b/analyses/pluginCDF/CDF_2008_S8095620.cc
rename from src/Analyses/CDF_2008_S8095620.cc
rename to analyses/pluginCDF/CDF_2008_S8095620.cc
diff --git a/data/anainfo/CDF_2008_S8095620.info b/analyses/pluginCDF/CDF_2008_S8095620.info
rename from data/anainfo/CDF_2008_S8095620.info
rename to analyses/pluginCDF/CDF_2008_S8095620.info
diff --git a/data/plotinfo/CDF_2008_S8095620.plot b/analyses/pluginCDF/CDF_2008_S8095620.plot
rename from data/plotinfo/CDF_2008_S8095620.plot
rename to analyses/pluginCDF/CDF_2008_S8095620.plot
diff --git a/data/refdata/CDF_2008_S8095620.yoda b/analyses/pluginCDF/CDF_2008_S8095620.yoda
rename from data/refdata/CDF_2008_S8095620.yoda
rename to analyses/pluginCDF/CDF_2008_S8095620.yoda
diff --git a/src/Analyses/CDF_2009_I856131.cc b/analyses/pluginCDF/CDF_2009_I856131.cc
rename from src/Analyses/CDF_2009_I856131.cc
rename to analyses/pluginCDF/CDF_2009_I856131.cc
diff --git a/data/anainfo/CDF_2009_I856131.info b/analyses/pluginCDF/CDF_2009_I856131.info
rename from data/anainfo/CDF_2009_I856131.info
rename to analyses/pluginCDF/CDF_2009_I856131.info
diff --git a/data/plotinfo/CDF_2009_I856131.plot b/analyses/pluginCDF/CDF_2009_I856131.plot
rename from data/plotinfo/CDF_2009_I856131.plot
rename to analyses/pluginCDF/CDF_2009_I856131.plot
diff --git a/data/refdata/CDF_2009_I856131.yoda b/analyses/pluginCDF/CDF_2009_I856131.yoda
rename from data/refdata/CDF_2009_I856131.yoda
rename to analyses/pluginCDF/CDF_2009_I856131.yoda
diff --git a/src/Analyses/CDF_2009_NOTE_9936.cc b/analyses/pluginCDF/CDF_2009_NOTE_9936.cc
rename from src/Analyses/CDF_2009_NOTE_9936.cc
rename to analyses/pluginCDF/CDF_2009_NOTE_9936.cc
diff --git a/data/anainfo/CDF_2009_NOTE_9936.info b/analyses/pluginCDF/CDF_2009_NOTE_9936.info
rename from data/anainfo/CDF_2009_NOTE_9936.info
rename to analyses/pluginCDF/CDF_2009_NOTE_9936.info
diff --git a/data/plotinfo/CDF_2009_NOTE_9936.plot b/analyses/pluginCDF/CDF_2009_NOTE_9936.plot
rename from data/plotinfo/CDF_2009_NOTE_9936.plot
rename to analyses/pluginCDF/CDF_2009_NOTE_9936.plot
diff --git a/data/refdata/CDF_2009_NOTE_9936.yoda b/analyses/pluginCDF/CDF_2009_NOTE_9936.yoda
rename from data/refdata/CDF_2009_NOTE_9936.yoda
rename to analyses/pluginCDF/CDF_2009_NOTE_9936.yoda
diff --git a/src/Analyses/CDF_2009_S8233977.cc b/analyses/pluginCDF/CDF_2009_S8233977.cc
rename from src/Analyses/CDF_2009_S8233977.cc
rename to analyses/pluginCDF/CDF_2009_S8233977.cc
diff --git a/data/anainfo/CDF_2009_S8233977.info b/analyses/pluginCDF/CDF_2009_S8233977.info
rename from data/anainfo/CDF_2009_S8233977.info
rename to analyses/pluginCDF/CDF_2009_S8233977.info
diff --git a/data/plotinfo/CDF_2009_S8233977.plot b/analyses/pluginCDF/CDF_2009_S8233977.plot
rename from data/plotinfo/CDF_2009_S8233977.plot
rename to analyses/pluginCDF/CDF_2009_S8233977.plot
diff --git a/data/refdata/CDF_2009_S8233977.yoda b/analyses/pluginCDF/CDF_2009_S8233977.yoda
rename from data/refdata/CDF_2009_S8233977.yoda
rename to analyses/pluginCDF/CDF_2009_S8233977.yoda
diff --git a/src/Analyses/CDF_2009_S8436959.cc b/analyses/pluginCDF/CDF_2009_S8436959.cc
rename from src/Analyses/CDF_2009_S8436959.cc
rename to analyses/pluginCDF/CDF_2009_S8436959.cc
diff --git a/data/anainfo/CDF_2009_S8436959.info b/analyses/pluginCDF/CDF_2009_S8436959.info
rename from data/anainfo/CDF_2009_S8436959.info
rename to analyses/pluginCDF/CDF_2009_S8436959.info
diff --git a/data/plotinfo/CDF_2009_S8436959.plot b/analyses/pluginCDF/CDF_2009_S8436959.plot
rename from data/plotinfo/CDF_2009_S8436959.plot
rename to analyses/pluginCDF/CDF_2009_S8436959.plot
diff --git a/data/refdata/CDF_2009_S8436959.yoda b/analyses/pluginCDF/CDF_2009_S8436959.yoda
rename from data/refdata/CDF_2009_S8436959.yoda
rename to analyses/pluginCDF/CDF_2009_S8436959.yoda
diff --git a/src/Analyses/CDF_2010_S8591881_DY.cc b/analyses/pluginCDF/CDF_2010_S8591881_DY.cc
rename from src/Analyses/CDF_2010_S8591881_DY.cc
rename to analyses/pluginCDF/CDF_2010_S8591881_DY.cc
diff --git a/data/anainfo/CDF_2010_S8591881_DY.info b/analyses/pluginCDF/CDF_2010_S8591881_DY.info
rename from data/anainfo/CDF_2010_S8591881_DY.info
rename to analyses/pluginCDF/CDF_2010_S8591881_DY.info
diff --git a/data/plotinfo/CDF_2010_S8591881_DY.plot b/analyses/pluginCDF/CDF_2010_S8591881_DY.plot
rename from data/plotinfo/CDF_2010_S8591881_DY.plot
rename to analyses/pluginCDF/CDF_2010_S8591881_DY.plot
diff --git a/data/refdata/CDF_2010_S8591881_DY.yoda b/analyses/pluginCDF/CDF_2010_S8591881_DY.yoda
rename from data/refdata/CDF_2010_S8591881_DY.yoda
rename to analyses/pluginCDF/CDF_2010_S8591881_DY.yoda
diff --git a/src/Analyses/CDF_2010_S8591881_QCD.cc b/analyses/pluginCDF/CDF_2010_S8591881_QCD.cc
rename from src/Analyses/CDF_2010_S8591881_QCD.cc
rename to analyses/pluginCDF/CDF_2010_S8591881_QCD.cc
diff --git a/data/anainfo/CDF_2010_S8591881_QCD.info b/analyses/pluginCDF/CDF_2010_S8591881_QCD.info
rename from data/anainfo/CDF_2010_S8591881_QCD.info
rename to analyses/pluginCDF/CDF_2010_S8591881_QCD.info
diff --git a/data/plotinfo/CDF_2010_S8591881_QCD.plot b/analyses/pluginCDF/CDF_2010_S8591881_QCD.plot
rename from data/plotinfo/CDF_2010_S8591881_QCD.plot
rename to analyses/pluginCDF/CDF_2010_S8591881_QCD.plot
diff --git a/data/refdata/CDF_2010_S8591881_QCD.yoda b/analyses/pluginCDF/CDF_2010_S8591881_QCD.yoda
rename from data/refdata/CDF_2010_S8591881_QCD.yoda
rename to analyses/pluginCDF/CDF_2010_S8591881_QCD.yoda
diff --git a/src/Analyses/CDF_2012_I1124333.cc b/analyses/pluginCDF/CDF_2012_I1124333.cc
rename from src/Analyses/CDF_2012_I1124333.cc
rename to analyses/pluginCDF/CDF_2012_I1124333.cc
--- a/src/Analyses/CDF_2012_I1124333.cc
+++ b/analyses/pluginCDF/CDF_2012_I1124333.cc
@@ -1,86 +1,84 @@
 // -*- C++ -*-
 #include "Rivet/Analysis.hh"
 #include "Rivet/Projections/ZFinder.hh"
 
 namespace Rivet {
 
-  using namespace Cuts;
-
   /// @ CDF Run II Z \f$ p_\perp \f$ in Drell-Yan events
   /// @author Simone Amoroso
   class CDF_2012_I1124333 : public Analysis {
   public:
 
     /// Constructor
     CDF_2012_I1124333()
       : Analysis("CDF_2012_I1124333")
     {    }
 
 
     /// @name Analysis methods
     //@{
 
     /// Book histograms and initialise projections before the run
     void init() {
 
       ///  Initialise and register projections here
       ZFinder zfinder(FinalState(), Cuts::open(), PID::ELECTRON, 66*GeV, 116*GeV, 0.0, ZFinder::NOCLUSTER);
       declare(zfinder, "ZFinder");
 
 
       ///  Book histograms here, e.g.:
       //      _hist_z_xs = bookHisto1D(1, 1, 1);
       _hist_zpt = bookHisto1D(2, 1, 1);
     }
 
 
     /// Perform the per-event analysis
     void analyze(const Event& event) {
       const double weight = event.weight();
 
       /// @todo Do the event by event analysis here
       const ZFinder& zfinder = apply<ZFinder>(event, "ZFinder");
       if (zfinder.bosons().size() != 1) {
         MSG_DEBUG("Num e+ e- pairs found = " << zfinder.bosons().size());
 	vetoEvent;
       }
       const FourMomentum& pZ = zfinder.bosons()[0].momentum();
       if (pZ.mass2() < 0) {
 	MSG_DEBUG("Negative Z mass**2 = " << pZ.mass2()/GeV2 << "!");
 	vetoEvent;
       }
 
       MSG_DEBUG("Dilepton mass = " << pZ.mass()/GeV << " GeV");
       _hist_zpt->fill(pZ.pT(), weight);
       //      _hist_z_xs->fill(1, weight);
     }
 
 
     /// Normalise histograms etc., after the run
     void finalize() {
       scale(_hist_zpt, crossSection()/picobarn/sumOfWeights());
     }
 
     //@}
 
 
   private:
 
     // Data members like post-cuts event weight counters go here
 
 
     /// @name Histograms
     //@{
     Histo1DPtr _hist_zpt;
     //    Histo1DPtr _hist_z_xs;
     //@}
 
 
   };
 
 
 
   // The hook for the plugin system
   DECLARE_RIVET_PLUGIN(CDF_2012_I1124333);
 
 }
diff --git a/data/anainfo/CDF_2012_I1124333.info b/analyses/pluginCDF/CDF_2012_I1124333.info
rename from data/anainfo/CDF_2012_I1124333.info
rename to analyses/pluginCDF/CDF_2012_I1124333.info
diff --git a/data/plotinfo/CDF_2012_I1124333.plot b/analyses/pluginCDF/CDF_2012_I1124333.plot
rename from data/plotinfo/CDF_2012_I1124333.plot
rename to analyses/pluginCDF/CDF_2012_I1124333.plot
diff --git a/data/refdata/CDF_2012_I1124333.yoda b/analyses/pluginCDF/CDF_2012_I1124333.yoda
rename from data/refdata/CDF_2012_I1124333.yoda
rename to analyses/pluginCDF/CDF_2012_I1124333.yoda
diff --git a/src/Analyses/CDF_2012_NOTE10874.cc b/analyses/pluginCDF/CDF_2012_NOTE10874.cc
rename from src/Analyses/CDF_2012_NOTE10874.cc
rename to analyses/pluginCDF/CDF_2012_NOTE10874.cc
diff --git a/data/refdata/CDF_2012_NOTE10874.dat b/analyses/pluginCDF/CDF_2012_NOTE10874.dat
rename from data/refdata/CDF_2012_NOTE10874.dat
rename to analyses/pluginCDF/CDF_2012_NOTE10874.dat
diff --git a/data/anainfo/CDF_2012_NOTE10874.info b/analyses/pluginCDF/CDF_2012_NOTE10874.info
rename from data/anainfo/CDF_2012_NOTE10874.info
rename to analyses/pluginCDF/CDF_2012_NOTE10874.info
diff --git a/data/plotinfo/CDF_2012_NOTE10874.plot b/analyses/pluginCDF/CDF_2012_NOTE10874.plot
rename from data/plotinfo/CDF_2012_NOTE10874.plot
rename to analyses/pluginCDF/CDF_2012_NOTE10874.plot
diff --git a/data/refdata/CDF_2012_NOTE10874.yoda b/analyses/pluginCDF/CDF_2012_NOTE10874.yoda
rename from data/refdata/CDF_2012_NOTE10874.yoda
rename to analyses/pluginCDF/CDF_2012_NOTE10874.yoda
diff --git a/src/Analyses/CDF_2015_1388868.cc b/analyses/pluginCDF/CDF_2015_1388868.cc
rename from src/Analyses/CDF_2015_1388868.cc
rename to analyses/pluginCDF/CDF_2015_1388868.cc
diff --git a/data/anainfo/CDF_2015_1388868.info b/analyses/pluginCDF/CDF_2015_1388868.info
rename from data/anainfo/CDF_2015_1388868.info
rename to analyses/pluginCDF/CDF_2015_1388868.info
--- a/data/anainfo/CDF_2015_1388868.info
+++ b/analyses/pluginCDF/CDF_2015_1388868.info
@@ -1,48 +1,48 @@
 Name: CDF_2015_I1388868
 Year: 2015
 Summary: Studies of the underlying event at 300, 900 and 1960 GeV with leading charged particles
 Experiment: CDF
 Collider: Tevatron
 InspireID:
 Status: VALIDATED
 Authors:
  - Oreste Tumbarell Aranda
  - Hannes Jung (hannes.jung@cern.ch)
  - Paolo Gunnellini (paolo.gunnellini@desy.de)
  - Andy Buckley (cleaining/integration)
 References:
  - 'Phys. Rev. D 92, 092009 (2015)'
  - 'arXiv:1508.05340'
 RunInfo:
   'Minimum bias proton-antiproton collision events at 300, 900 and 1960 GeV.
   Set particles with c*tau > 10 mm stable.'
 NumEvents: 1000000
 Beams: [p+, p-]
-Energies: [300], [900], [1960]
+Energies: [300, 900, 1960]
 Description:
   'We study charged particle production in proton--antiproton collisions at 300 GeV,
   900 GeV, and 1.96 TeV. We use the direction of the charged particle with the largest
   transverse momentum in each event to define three regions of $\eta$--$\phi$ space;
   toward, away, and transverse. The average number and the average scalar pT sum of
   charged particles in the transverse region are sensitive to the modeling of the
   underlying event. The transverse region is divided into a MAX and MIN transverse
   region, which helps separate the hard component (initial and final-state radiation)
   from the beam-beam remnant and multiple parton interaction components of the scattering.'
-BibKey: :2015aoa
-BibTeX: @article{Aaltonen:2015aoa,
+BibKey: Aaltonen:2015aoa
+BibTeX: '@article{Aaltonen:2015aoa,
       author         = "Aaltonen, Timo Antero and others",
       title          = "{Study of the energy dependence of the underlying event
                         in proton-antiproton collisions}",
       collaboration  = "CDF",
       journal        = "Phys. Rev.",
       volume         = "D92",
       year           = "2015",
       number         = "9",
       pages          = "092009",
       doi            = "10.1103/PhysRevD.92.092009",
       eprint         = "1508.05340",
       archivePrefix  = "arXiv",
       primaryClass   = "hep-ex",
       reportNumber   = "FERMILAB-PUB-15-361-E",
       SLACcitation   = "%%CITATION = ARXIV:1508.05340;%%"
-}
+}'
diff --git a/data/plotinfo/CDF_2015_1388868.plot b/analyses/pluginCDF/CDF_2015_1388868.plot
rename from data/plotinfo/CDF_2015_1388868.plot
rename to analyses/pluginCDF/CDF_2015_1388868.plot
diff --git a/data/refdata/CDF_2015_1388868.yoda b/analyses/pluginCDF/CDF_2015_1388868.yoda
rename from data/refdata/CDF_2015_1388868.yoda
rename to analyses/pluginCDF/CDF_2015_1388868.yoda
diff --git a/src/Analyses/CMS_2010_PAS_QCD_10_024.cc b/analyses/pluginCMS/CMS_2010_PAS_QCD_10_024.cc
rename from src/Analyses/CMS_2010_PAS_QCD_10_024.cc
rename to analyses/pluginCMS/CMS_2010_PAS_QCD_10_024.cc
diff --git a/data/anainfo/CMS_2010_PAS_QCD_10_024.info b/analyses/pluginCMS/CMS_2010_PAS_QCD_10_024.info
rename from data/anainfo/CMS_2010_PAS_QCD_10_024.info
rename to analyses/pluginCMS/CMS_2010_PAS_QCD_10_024.info
diff --git a/data/plotinfo/CMS_2010_PAS_QCD_10_024.plot b/analyses/pluginCMS/CMS_2010_PAS_QCD_10_024.plot
rename from data/plotinfo/CMS_2010_PAS_QCD_10_024.plot
rename to analyses/pluginCMS/CMS_2010_PAS_QCD_10_024.plot
diff --git a/data/refdata/CMS_2010_PAS_QCD_10_024.yoda b/analyses/pluginCMS/CMS_2010_PAS_QCD_10_024.yoda
rename from data/refdata/CMS_2010_PAS_QCD_10_024.yoda
rename to analyses/pluginCMS/CMS_2010_PAS_QCD_10_024.yoda
diff --git a/src/Analyses/CMS_2010_S8547297.cc b/analyses/pluginCMS/CMS_2010_S8547297.cc
rename from src/Analyses/CMS_2010_S8547297.cc
rename to analyses/pluginCMS/CMS_2010_S8547297.cc
diff --git a/data/anainfo/CMS_2010_S8547297.info b/analyses/pluginCMS/CMS_2010_S8547297.info
rename from data/anainfo/CMS_2010_S8547297.info
rename to analyses/pluginCMS/CMS_2010_S8547297.info
diff --git a/data/plotinfo/CMS_2010_S8547297.plot b/analyses/pluginCMS/CMS_2010_S8547297.plot
rename from data/plotinfo/CMS_2010_S8547297.plot
rename to analyses/pluginCMS/CMS_2010_S8547297.plot
diff --git a/data/refdata/CMS_2010_S8547297.yoda b/analyses/pluginCMS/CMS_2010_S8547297.yoda
rename from data/refdata/CMS_2010_S8547297.yoda
rename to analyses/pluginCMS/CMS_2010_S8547297.yoda
diff --git a/src/Analyses/CMS_2010_S8656010.cc b/analyses/pluginCMS/CMS_2010_S8656010.cc
rename from src/Analyses/CMS_2010_S8656010.cc
rename to analyses/pluginCMS/CMS_2010_S8656010.cc
diff --git a/data/anainfo/CMS_2010_S8656010.info b/analyses/pluginCMS/CMS_2010_S8656010.info
rename from data/anainfo/CMS_2010_S8656010.info
rename to analyses/pluginCMS/CMS_2010_S8656010.info
diff --git a/data/plotinfo/CMS_2010_S8656010.plot b/analyses/pluginCMS/CMS_2010_S8656010.plot
rename from data/plotinfo/CMS_2010_S8656010.plot
rename to analyses/pluginCMS/CMS_2010_S8656010.plot
diff --git a/data/refdata/CMS_2010_S8656010.yoda b/analyses/pluginCMS/CMS_2010_S8656010.yoda
rename from data/refdata/CMS_2010_S8656010.yoda
rename to analyses/pluginCMS/CMS_2010_S8656010.yoda
diff --git a/src/Analyses/CMS_2011_I954992.cc b/analyses/pluginCMS/CMS_2011_I954992.cc
rename from src/Analyses/CMS_2011_I954992.cc
rename to analyses/pluginCMS/CMS_2011_I954992.cc
diff --git a/data/anainfo/CMS_2011_I954992.info b/analyses/pluginCMS/CMS_2011_I954992.info
rename from data/anainfo/CMS_2011_I954992.info
rename to analyses/pluginCMS/CMS_2011_I954992.info
diff --git a/data/plotinfo/CMS_2011_I954992.plot b/analyses/pluginCMS/CMS_2011_I954992.plot
rename from data/plotinfo/CMS_2011_I954992.plot
rename to analyses/pluginCMS/CMS_2011_I954992.plot
diff --git a/data/refdata/CMS_2011_I954992.yoda b/analyses/pluginCMS/CMS_2011_I954992.yoda
rename from data/refdata/CMS_2011_I954992.yoda
rename to analyses/pluginCMS/CMS_2011_I954992.yoda
diff --git a/src/Analyses/CMS_2011_S8884919.cc b/analyses/pluginCMS/CMS_2011_S8884919.cc
rename from src/Analyses/CMS_2011_S8884919.cc
rename to analyses/pluginCMS/CMS_2011_S8884919.cc
diff --git a/data/anainfo/CMS_2011_S8884919.info b/analyses/pluginCMS/CMS_2011_S8884919.info
rename from data/anainfo/CMS_2011_S8884919.info
rename to analyses/pluginCMS/CMS_2011_S8884919.info
diff --git a/data/plotinfo/CMS_2011_S8884919.plot b/analyses/pluginCMS/CMS_2011_S8884919.plot
rename from data/plotinfo/CMS_2011_S8884919.plot
rename to analyses/pluginCMS/CMS_2011_S8884919.plot
diff --git a/data/refdata/CMS_2011_S8884919.yoda b/analyses/pluginCMS/CMS_2011_S8884919.yoda
rename from data/refdata/CMS_2011_S8884919.yoda
rename to analyses/pluginCMS/CMS_2011_S8884919.yoda
diff --git a/src/Analyses/CMS_2011_S8941262.cc b/analyses/pluginCMS/CMS_2011_S8941262.cc
rename from src/Analyses/CMS_2011_S8941262.cc
rename to analyses/pluginCMS/CMS_2011_S8941262.cc
diff --git a/data/anainfo/CMS_2011_S8941262.info b/analyses/pluginCMS/CMS_2011_S8941262.info
rename from data/anainfo/CMS_2011_S8941262.info
rename to analyses/pluginCMS/CMS_2011_S8941262.info
diff --git a/data/plotinfo/CMS_2011_S8941262.plot b/analyses/pluginCMS/CMS_2011_S8941262.plot
rename from data/plotinfo/CMS_2011_S8941262.plot
rename to analyses/pluginCMS/CMS_2011_S8941262.plot
diff --git a/data/refdata/CMS_2011_S8941262.yoda b/analyses/pluginCMS/CMS_2011_S8941262.yoda
rename from data/refdata/CMS_2011_S8941262.yoda
rename to analyses/pluginCMS/CMS_2011_S8941262.yoda
diff --git a/src/Analyses/CMS_2011_S8950903.cc b/analyses/pluginCMS/CMS_2011_S8950903.cc
rename from src/Analyses/CMS_2011_S8950903.cc
rename to analyses/pluginCMS/CMS_2011_S8950903.cc
diff --git a/data/anainfo/CMS_2011_S8950903.info b/analyses/pluginCMS/CMS_2011_S8950903.info
rename from data/anainfo/CMS_2011_S8950903.info
rename to analyses/pluginCMS/CMS_2011_S8950903.info
diff --git a/data/plotinfo/CMS_2011_S8950903.plot b/analyses/pluginCMS/CMS_2011_S8950903.plot
rename from data/plotinfo/CMS_2011_S8950903.plot
rename to analyses/pluginCMS/CMS_2011_S8950903.plot
diff --git a/data/refdata/CMS_2011_S8950903.yoda b/analyses/pluginCMS/CMS_2011_S8950903.yoda
rename from data/refdata/CMS_2011_S8950903.yoda
rename to analyses/pluginCMS/CMS_2011_S8950903.yoda
diff --git a/src/Analyses/CMS_2011_S8957746.cc b/analyses/pluginCMS/CMS_2011_S8957746.cc
rename from src/Analyses/CMS_2011_S8957746.cc
rename to analyses/pluginCMS/CMS_2011_S8957746.cc
diff --git a/data/anainfo/CMS_2011_S8957746.info b/analyses/pluginCMS/CMS_2011_S8957746.info
rename from data/anainfo/CMS_2011_S8957746.info
rename to analyses/pluginCMS/CMS_2011_S8957746.info
diff --git a/data/plotinfo/CMS_2011_S8957746.plot b/analyses/pluginCMS/CMS_2011_S8957746.plot
rename from data/plotinfo/CMS_2011_S8957746.plot
rename to analyses/pluginCMS/CMS_2011_S8957746.plot
diff --git a/data/refdata/CMS_2011_S8957746.yoda b/analyses/pluginCMS/CMS_2011_S8957746.yoda
rename from data/refdata/CMS_2011_S8957746.yoda
rename to analyses/pluginCMS/CMS_2011_S8957746.yoda
diff --git a/src/Analyses/CMS_2011_S8968497.cc b/analyses/pluginCMS/CMS_2011_S8968497.cc
rename from src/Analyses/CMS_2011_S8968497.cc
rename to analyses/pluginCMS/CMS_2011_S8968497.cc
diff --git a/data/anainfo/CMS_2011_S8968497.info b/analyses/pluginCMS/CMS_2011_S8968497.info
rename from data/anainfo/CMS_2011_S8968497.info
rename to analyses/pluginCMS/CMS_2011_S8968497.info
--- a/data/anainfo/CMS_2011_S8968497.info
+++ b/analyses/pluginCMS/CMS_2011_S8968497.info
@@ -1,39 +1,39 @@
 Name: CMS_2011_S8968497
 Year: 2011
 Summary: Measurement of dijet angular distributions and search for quark compositeness in $pp$ collisions at $\sqrt{s} = 7$ TeV
 Experiment: CMS
 Collider: LHC
 SpiresID: 8968497
 InspireID: 889175
 Status: VALIDATED
 Authors:
  - A. Hinzmann
 References:
  - Phys.Rev.Lett.106:201804,2011
  - doi:10.1103/PhysRevLett.106.201804
  - arXiv:hep-ex/1102.2020
 Beams: [p+, p+]
 Energies: [7000]
-#RunInfo:
+RunInfo: QCD dijet events
 Description:
    Measurement of dijet angular distributions in proton-proton collisions at a
    center-of-mass energy of 7 TeV. The data sample, collected with single jet
    triggers, has a total integrated luminosity of 36 pb$^{-1}$, with jets being
    reconstructed using the anti-$k_t$ clustering algorithm with $R=0.5$. The data
    are presented for the variable $\chi$ defined as $\chi = \exp(|y_1 - y_2|)$
    where $y_1$ and $y_2$ are the rapidities of the two leading (highest $\pT$) jets.'
 BibKey: Khachatryan:2011as
 BibTeX: '@Article{Khachatryan:2011as,
      author    = "Khachatryan, Vardan and others",
      collaboration = "CMS",
      title     = "{Measurement of Dijet Angular Distributions and Search for Quark Compositeness in pp Collisions at 7 TeV}",
      journal   = "Phys. Rev. Lett.",
      volume    = "106",
      year      = "2011",
      pages     = "201804",
      eprint    = "1102.2020",
      archivePrefix = "arXiv",
      primaryClass  =  "hep-ex",
      doi       = "10.1103/PhysRevLett.106.201804",
      SLACcitation  = "%%CITATION = 1102.2020;%%"
 }'
diff --git a/data/plotinfo/CMS_2011_S8968497.plot b/analyses/pluginCMS/CMS_2011_S8968497.plot
rename from data/plotinfo/CMS_2011_S8968497.plot
rename to analyses/pluginCMS/CMS_2011_S8968497.plot
diff --git a/data/refdata/CMS_2011_S8968497.yoda b/analyses/pluginCMS/CMS_2011_S8968497.yoda
rename from data/refdata/CMS_2011_S8968497.yoda
rename to analyses/pluginCMS/CMS_2011_S8968497.yoda
diff --git a/src/Analyses/CMS_2011_S8973270.cc b/analyses/pluginCMS/CMS_2011_S8973270.cc
rename from src/Analyses/CMS_2011_S8973270.cc
rename to analyses/pluginCMS/CMS_2011_S8973270.cc
diff --git a/data/anainfo/CMS_2011_S8973270.info b/analyses/pluginCMS/CMS_2011_S8973270.info
rename from data/anainfo/CMS_2011_S8973270.info
rename to analyses/pluginCMS/CMS_2011_S8973270.info
diff --git a/data/plotinfo/CMS_2011_S8973270.plot b/analyses/pluginCMS/CMS_2011_S8973270.plot
rename from data/plotinfo/CMS_2011_S8973270.plot
rename to analyses/pluginCMS/CMS_2011_S8973270.plot
diff --git a/data/refdata/CMS_2011_S8973270.yoda b/analyses/pluginCMS/CMS_2011_S8973270.yoda
rename from data/refdata/CMS_2011_S8973270.yoda
rename to analyses/pluginCMS/CMS_2011_S8973270.yoda
diff --git a/src/Analyses/CMS_2011_S8978280.cc b/analyses/pluginCMS/CMS_2011_S8978280.cc
rename from src/Analyses/CMS_2011_S8978280.cc
rename to analyses/pluginCMS/CMS_2011_S8978280.cc
diff --git a/data/anainfo/CMS_2011_S8978280.info b/analyses/pluginCMS/CMS_2011_S8978280.info
rename from data/anainfo/CMS_2011_S8978280.info
rename to analyses/pluginCMS/CMS_2011_S8978280.info
diff --git a/data/plotinfo/CMS_2011_S8978280.plot b/analyses/pluginCMS/CMS_2011_S8978280.plot
rename from data/plotinfo/CMS_2011_S8978280.plot
rename to analyses/pluginCMS/CMS_2011_S8978280.plot
diff --git a/data/refdata/CMS_2011_S8978280.yoda b/analyses/pluginCMS/CMS_2011_S8978280.yoda
rename from data/refdata/CMS_2011_S8978280.yoda
rename to analyses/pluginCMS/CMS_2011_S8978280.yoda
diff --git a/src/Analyses/CMS_2011_S9086218.cc b/analyses/pluginCMS/CMS_2011_S9086218.cc
rename from src/Analyses/CMS_2011_S9086218.cc
rename to analyses/pluginCMS/CMS_2011_S9086218.cc
diff --git a/data/anainfo/CMS_2011_S9086218.info b/analyses/pluginCMS/CMS_2011_S9086218.info
rename from data/anainfo/CMS_2011_S9086218.info
rename to analyses/pluginCMS/CMS_2011_S9086218.info
diff --git a/data/plotinfo/CMS_2011_S9086218.plot b/analyses/pluginCMS/CMS_2011_S9086218.plot
rename from data/plotinfo/CMS_2011_S9086218.plot
rename to analyses/pluginCMS/CMS_2011_S9086218.plot
diff --git a/data/refdata/CMS_2011_S9086218.yoda b/analyses/pluginCMS/CMS_2011_S9086218.yoda
rename from data/refdata/CMS_2011_S9086218.yoda
rename to analyses/pluginCMS/CMS_2011_S9086218.yoda
diff --git a/src/Analyses/CMS_2011_S9088458.cc b/analyses/pluginCMS/CMS_2011_S9088458.cc
rename from src/Analyses/CMS_2011_S9088458.cc
rename to analyses/pluginCMS/CMS_2011_S9088458.cc
diff --git a/data/anainfo/CMS_2011_S9088458.info b/analyses/pluginCMS/CMS_2011_S9088458.info
rename from data/anainfo/CMS_2011_S9088458.info
rename to analyses/pluginCMS/CMS_2011_S9088458.info
diff --git a/data/plotinfo/CMS_2011_S9088458.plot b/analyses/pluginCMS/CMS_2011_S9088458.plot
rename from data/plotinfo/CMS_2011_S9088458.plot
rename to analyses/pluginCMS/CMS_2011_S9088458.plot
diff --git a/data/refdata/CMS_2011_S9088458.yoda b/analyses/pluginCMS/CMS_2011_S9088458.yoda
rename from data/refdata/CMS_2011_S9088458.yoda
rename to analyses/pluginCMS/CMS_2011_S9088458.yoda
diff --git a/src/Analyses/CMS_2011_S9120041.cc b/analyses/pluginCMS/CMS_2011_S9120041.cc
rename from src/Analyses/CMS_2011_S9120041.cc
rename to analyses/pluginCMS/CMS_2011_S9120041.cc
diff --git a/data/anainfo/CMS_2011_S9120041.info b/analyses/pluginCMS/CMS_2011_S9120041.info
rename from data/anainfo/CMS_2011_S9120041.info
rename to analyses/pluginCMS/CMS_2011_S9120041.info
diff --git a/data/plotinfo/CMS_2011_S9120041.plot b/analyses/pluginCMS/CMS_2011_S9120041.plot
rename from data/plotinfo/CMS_2011_S9120041.plot
rename to analyses/pluginCMS/CMS_2011_S9120041.plot
diff --git a/data/refdata/CMS_2011_S9120041.yoda b/analyses/pluginCMS/CMS_2011_S9120041.yoda
rename from data/refdata/CMS_2011_S9120041.yoda
rename to analyses/pluginCMS/CMS_2011_S9120041.yoda
diff --git a/src/Analyses/CMS_2011_S9215166.cc b/analyses/pluginCMS/CMS_2011_S9215166.cc
rename from src/Analyses/CMS_2011_S9215166.cc
rename to analyses/pluginCMS/CMS_2011_S9215166.cc
diff --git a/data/anainfo/CMS_2011_S9215166.info b/analyses/pluginCMS/CMS_2011_S9215166.info
rename from data/anainfo/CMS_2011_S9215166.info
rename to analyses/pluginCMS/CMS_2011_S9215166.info
diff --git a/data/plotinfo/CMS_2011_S9215166.plot b/analyses/pluginCMS/CMS_2011_S9215166.plot
rename from data/plotinfo/CMS_2011_S9215166.plot
rename to analyses/pluginCMS/CMS_2011_S9215166.plot
diff --git a/data/refdata/CMS_2011_S9215166.yoda b/analyses/pluginCMS/CMS_2011_S9215166.yoda
rename from data/refdata/CMS_2011_S9215166.yoda
rename to analyses/pluginCMS/CMS_2011_S9215166.yoda
diff --git a/src/Analyses/CMS_2012_I1087342.cc b/analyses/pluginCMS/CMS_2012_I1087342.cc
rename from src/Analyses/CMS_2012_I1087342.cc
rename to analyses/pluginCMS/CMS_2012_I1087342.cc
diff --git a/data/anainfo/CMS_2012_I1087342.info b/analyses/pluginCMS/CMS_2012_I1087342.info
rename from data/anainfo/CMS_2012_I1087342.info
rename to analyses/pluginCMS/CMS_2012_I1087342.info
diff --git a/data/plotinfo/CMS_2012_I1087342.plot b/analyses/pluginCMS/CMS_2012_I1087342.plot
rename from data/plotinfo/CMS_2012_I1087342.plot
rename to analyses/pluginCMS/CMS_2012_I1087342.plot
diff --git a/data/refdata/CMS_2012_I1087342.yoda b/analyses/pluginCMS/CMS_2012_I1087342.yoda
rename from data/refdata/CMS_2012_I1087342.yoda
rename to analyses/pluginCMS/CMS_2012_I1087342.yoda
diff --git a/src/Analyses/CMS_2012_I1090423.cc b/analyses/pluginCMS/CMS_2012_I1090423.cc
rename from src/Analyses/CMS_2012_I1090423.cc
rename to analyses/pluginCMS/CMS_2012_I1090423.cc
diff --git a/data/anainfo/CMS_2012_I1090423.info b/analyses/pluginCMS/CMS_2012_I1090423.info
rename from data/anainfo/CMS_2012_I1090423.info
rename to analyses/pluginCMS/CMS_2012_I1090423.info
--- a/data/anainfo/CMS_2012_I1090423.info
+++ b/analyses/pluginCMS/CMS_2012_I1090423.info
@@ -1,38 +1,39 @@
 Name: CMS_2012_I1090423
 Year: 2012
 Summary: Dijet angular distributions in $pp$ collisions at $\sqrt{s} = 7$ TeV
 Experiment: CMS
 Collider: LHC
 InspireID: 1090423
 Status: VALIDATED
 Authors:
  - A. Hinzmann
 References:
  - JHEP 05 (2012) 055
  - doi:10.1007/JHEP05(2012)055
  - arXiv:hep-ex/1202.5535
 Beams: [p+, p+]
 Energies: [7000]
+RunInfo: QCD events with dijet mass greater 400 GeV
 Description:
    'Measurement of dijet angular distributions in proton-proton collisions at a
    center-of-mass energy of 7 TeV. The data sample has a total integrated
    luminosity of 2.2 inverse femtobarns, recorded by the CMS experiment at the LHC.
    Normalized dijet angular distributions have been measured for dijet invariant
    masses from 0.4 TeV to above 3 TeV.'
 BibKey: Chatrchyan:2012bf
 BibTeX: '@article{Chatrchyan:2012bf,
       author         = "Chatrchyan, Serguei and others",
       title          = "{Search for quark compositeness in dijet angular
                         distributions from $pp$ collisions at $\sqrt{s}=7$ TeV}",
       collaboration  = "CMS Collaboration",
       journal        = "JHEP",
       volume         = "1205",
       pages          = "055",
       doi            = "10.1007/JHEP05(2012)055",
       year           = "2012",
       eprint         = "1202.5535",
       archivePrefix  = "arXiv",
       primaryClass   = "hep-ex",
       reportNumber   = "CMS-EXO-11-017, CERN-PH-EP-2012-044",
       SLACcitation   = "%%CITATION = ARXIV:1202.5535;%%",
 }'
diff --git a/data/plotinfo/CMS_2012_I1090423.plot b/analyses/pluginCMS/CMS_2012_I1090423.plot
rename from data/plotinfo/CMS_2012_I1090423.plot
rename to analyses/pluginCMS/CMS_2012_I1090423.plot
diff --git a/data/refdata/CMS_2012_I1090423.yoda b/analyses/pluginCMS/CMS_2012_I1090423.yoda
rename from data/refdata/CMS_2012_I1090423.yoda
rename to analyses/pluginCMS/CMS_2012_I1090423.yoda
diff --git a/src/Analyses/CMS_2012_I1102908.cc b/analyses/pluginCMS/CMS_2012_I1102908.cc
rename from src/Analyses/CMS_2012_I1102908.cc
rename to analyses/pluginCMS/CMS_2012_I1102908.cc
diff --git a/data/anainfo/CMS_2012_I1102908.info b/analyses/pluginCMS/CMS_2012_I1102908.info
rename from data/anainfo/CMS_2012_I1102908.info
rename to analyses/pluginCMS/CMS_2012_I1102908.info
diff --git a/data/plotinfo/CMS_2012_I1102908.plot b/analyses/pluginCMS/CMS_2012_I1102908.plot
rename from data/plotinfo/CMS_2012_I1102908.plot
rename to analyses/pluginCMS/CMS_2012_I1102908.plot
diff --git a/data/refdata/CMS_2012_I1102908.yoda b/analyses/pluginCMS/CMS_2012_I1102908.yoda
rename from data/refdata/CMS_2012_I1102908.yoda
rename to analyses/pluginCMS/CMS_2012_I1102908.yoda
diff --git a/src/Analyses/CMS_2012_I1107658.cc b/analyses/pluginCMS/CMS_2012_I1107658.cc
rename from src/Analyses/CMS_2012_I1107658.cc
rename to analyses/pluginCMS/CMS_2012_I1107658.cc
diff --git a/data/anainfo/CMS_2012_I1107658.info b/analyses/pluginCMS/CMS_2012_I1107658.info
rename from data/anainfo/CMS_2012_I1107658.info
rename to analyses/pluginCMS/CMS_2012_I1107658.info
diff --git a/data/plotinfo/CMS_2012_I1107658.plot b/analyses/pluginCMS/CMS_2012_I1107658.plot
rename from data/plotinfo/CMS_2012_I1107658.plot
rename to analyses/pluginCMS/CMS_2012_I1107658.plot
diff --git a/data/refdata/CMS_2012_I1107658.yoda b/analyses/pluginCMS/CMS_2012_I1107658.yoda
rename from data/refdata/CMS_2012_I1107658.yoda
rename to analyses/pluginCMS/CMS_2012_I1107658.yoda
diff --git a/src/Analyses/CMS_2012_I1184941.cc b/analyses/pluginCMS/CMS_2012_I1184941.cc
rename from src/Analyses/CMS_2012_I1184941.cc
rename to analyses/pluginCMS/CMS_2012_I1184941.cc
diff --git a/data/anainfo/CMS_2012_I1184941.info b/analyses/pluginCMS/CMS_2012_I1184941.info
rename from data/anainfo/CMS_2012_I1184941.info
rename to analyses/pluginCMS/CMS_2012_I1184941.info
diff --git a/data/plotinfo/CMS_2012_I1184941.plot b/analyses/pluginCMS/CMS_2012_I1184941.plot
rename from data/plotinfo/CMS_2012_I1184941.plot
rename to analyses/pluginCMS/CMS_2012_I1184941.plot
diff --git a/data/refdata/CMS_2012_I1184941.yoda b/analyses/pluginCMS/CMS_2012_I1184941.yoda
rename from data/refdata/CMS_2012_I1184941.yoda
rename to analyses/pluginCMS/CMS_2012_I1184941.yoda
diff --git a/src/Analyses/CMS_2012_I1193338.cc b/analyses/pluginCMS/CMS_2012_I1193338.cc
rename from src/Analyses/CMS_2012_I1193338.cc
rename to analyses/pluginCMS/CMS_2012_I1193338.cc
diff --git a/data/anainfo/CMS_2012_I1193338.info b/analyses/pluginCMS/CMS_2012_I1193338.info
rename from data/anainfo/CMS_2012_I1193338.info
rename to analyses/pluginCMS/CMS_2012_I1193338.info
diff --git a/data/plotinfo/CMS_2012_I1193338.plot b/analyses/pluginCMS/CMS_2012_I1193338.plot
rename from data/plotinfo/CMS_2012_I1193338.plot
rename to analyses/pluginCMS/CMS_2012_I1193338.plot
diff --git a/data/refdata/CMS_2012_I1193338.yoda b/analyses/pluginCMS/CMS_2012_I1193338.yoda
rename from data/refdata/CMS_2012_I1193338.yoda
rename to analyses/pluginCMS/CMS_2012_I1193338.yoda
diff --git a/src/Analyses/CMS_2012_I1298807.cc b/analyses/pluginCMS/CMS_2012_I1298807.cc
rename from src/Analyses/CMS_2012_I1298807.cc
rename to analyses/pluginCMS/CMS_2012_I1298807.cc
diff --git a/data/anainfo/CMS_2012_I1298807.info b/analyses/pluginCMS/CMS_2012_I1298807.info
rename from data/anainfo/CMS_2012_I1298807.info
rename to analyses/pluginCMS/CMS_2012_I1298807.info
--- a/data/anainfo/CMS_2012_I1298807.info
+++ b/analyses/pluginCMS/CMS_2012_I1298807.info
@@ -1,44 +1,45 @@
 Name: CMS_2012_I1298807
 Year: 2012
 Summary: Inclusive ZZ production cross section and constraints on anomalous triple gauge couplings at 8 TeV
 Experiment: CMS
 Collider: LHC
 InspireID: 1298807
 Status: VALIDATED
 Authors:
  - Alexander Savin
  - Ian Ross
 References:
  - arXiv:hep-ex/1406.0113
 NeedCrossSection: no
 Beams:  [p+, p+]
 Energies: [8000]
+RunInfo: ZZ production, leptonic Z decays
 Description:
   'A measurement of the inclusive ZZ production cross section and constraints on anomalous triple gauge
   couplings in proton-proton collisions at $\sqrt{s} = 8 TeV$ are presented. The analysis is based on a
   data sample, corresponding to an integrated luminosity of 19.6/fb, collected with the CMS experiment
   at the LHC. The measurements are performed in the leptonic decay modes $ZZ \to lll^\prime l^\prime$, where $l = e,\mu$
   and $l^\prime = e, \mu, \tau$. The measured total cross section $ \sigma (pp \to ZZ) = 7.7 \pm 0.5 (stat)
   + 0.5 -0.4 (syst) \pm 0.4 (theo) \pm 0.2 (lumi) pb$, for both Z bosons produced in the mass range
   $60 < m_Z < 120 \GeV$, is consistent with standard model predictions. Differential cross sections, in
   phase space $p_T(\mu) > 5 \GeV$, $p_T(e) > 7 \GeV$, $|\eta(\mu)|<2.4$ , $|\eta(e)|<2.5$ and the
   60--120 GeV mass requirement, are measured and well described by the theoretical predictions. The
   invariant mass distribution of the four-lepton system is used to set limits on anomalous $ZZZ$ and
   $ZZ\gamma$ couplings at the $95\%$ confidence level, $-0.004 < f4Z < 0.004$, $-0.004 < f5Z < 0.004$,
   $-0.005 < f4\gamma < 0.005$, and $−0.005 < f5\gamma < 0.005.$'
 BibKey: Chatrchyan:2011wt
 BibTeX: '@article{Chatrchyan:2011wt,
       author         = "Chatrchyan, Serguei and others",
       title          = "{Measurement of the $pp$ to $ZZ$ production cross section and constraints on anomalous triple gauge couplings in four-lepton final states at $\sqrt{s} = 8$~TeV}",
       collaboration  = "CMS Collaboration",
       journal        = "Phys. Lett.",
       volume         = "B740",
       pages          = "250",
       doi            = "10.1016/j.physletb.2014.11.059",
       year           = "2015",
       eprint         = "1406.0113",
       archivePrefix  = "arXiv",
       primaryClass   = "hep-ex",
       reportNumber   = "CERN-PH-EP-2014-080",
       SLACcitation   = "%%CITATION = ARXIV:1406.0113;%%",
 }'
diff --git a/data/plotinfo/CMS_2012_I1298807.plot b/analyses/pluginCMS/CMS_2012_I1298807.plot
rename from data/plotinfo/CMS_2012_I1298807.plot
rename to analyses/pluginCMS/CMS_2012_I1298807.plot
diff --git a/data/refdata/CMS_2012_I1298807.yoda b/analyses/pluginCMS/CMS_2012_I1298807.yoda
rename from data/refdata/CMS_2012_I1298807.yoda
rename to analyses/pluginCMS/CMS_2012_I1298807.yoda
diff --git a/src/Analyses/CMS_2012_I941555.cc b/analyses/pluginCMS/CMS_2012_I941555.cc
rename from src/Analyses/CMS_2012_I941555.cc
rename to analyses/pluginCMS/CMS_2012_I941555.cc
diff --git a/data/anainfo/CMS_2012_I941555.info b/analyses/pluginCMS/CMS_2012_I941555.info
rename from data/anainfo/CMS_2012_I941555.info
rename to analyses/pluginCMS/CMS_2012_I941555.info
diff --git a/data/plotinfo/CMS_2012_I941555.plot b/analyses/pluginCMS/CMS_2012_I941555.plot
rename from data/plotinfo/CMS_2012_I941555.plot
rename to analyses/pluginCMS/CMS_2012_I941555.plot
diff --git a/data/refdata/CMS_2012_I941555.yoda b/analyses/pluginCMS/CMS_2012_I941555.yoda
rename from data/refdata/CMS_2012_I941555.yoda
rename to analyses/pluginCMS/CMS_2012_I941555.yoda
diff --git a/src/Analyses/CMS_2012_PAS_FSQ_12_020.cc b/analyses/pluginCMS/CMS_2012_PAS_FSQ_12_020.cc
rename from src/Analyses/CMS_2012_PAS_FSQ_12_020.cc
rename to analyses/pluginCMS/CMS_2012_PAS_FSQ_12_020.cc
diff --git a/data/anainfo/CMS_2012_PAS_FSQ_12_020.info b/analyses/pluginCMS/CMS_2012_PAS_FSQ_12_020.info
rename from data/anainfo/CMS_2012_PAS_FSQ_12_020.info
rename to analyses/pluginCMS/CMS_2012_PAS_FSQ_12_020.info
--- a/data/anainfo/CMS_2012_PAS_FSQ_12_020.info
+++ b/analyses/pluginCMS/CMS_2012_PAS_FSQ_12_020.info
@@ -1,37 +1,37 @@
 Name: CMS_PAS_FSQ_12_020
 Year: 2015
 Summary: Studies of the underlying event at 7 TeV with leading charged particles
 Experiment: CMS
 Collider: LHC
 Status: VALIDATED
 Authors:
  - Hannes Jung (hannes.jung@cern.ch)
  - Paolo Gunnellini (paolo.gunnellini@desy.de)
 References:
  - CERN-PH-EP-2015-291
 RunInfo:
   Minimum bias events at 7 TeV.
 NumEvents: 1000000
 Beams: [p+, p+]
 Energies: [7000]
 Description:
   'We study charged particle production in proton--proton collisions at 7 TeV. We use the direction
   of the charged particle with the largest transverse momentum in each event to define three
   regions of $\eta$--$\phi$ space: toward, away, and transverse. The average number and the
   average scalar pT sum of charged particles in the transverse region are sensitive to the
   modeling of the underlying event. The transverse region is divided into a MAX and MIN transverse
   region, which helps separate the hard component (initial and final-state radiation) from the
   beam--beam remnant and multiple parton interaction components of the scattering.'
-BibKey: :2015pea
-BibTeX: @article{Khachatryan:2015pea,
+BibKey: Khachatryan:2015pea
+BibTeX: '@article{Khachatryan:2015pea,
       author         = "Khachatryan, Vardan and others",
       title          = "{Event generator tunes obtained from underlying event and
                         multiparton scattering measurements}",
       collaboration  = "CMS",
       year           = "2015",
       eprint         = "1512.00815",
       archivePrefix  = "arXiv",
       primaryClass   = "hep-ex",
       reportNumber   = "CMS-GEN-14-001, CERN-PH-EP-2015-291",
       SLACcitation   = "%%CITATION = ARXIV:1512.00815;%%"
-}
+}'
diff --git a/data/plotinfo/CMS_2012_PAS_FSQ_12_020.plot b/analyses/pluginCMS/CMS_2012_PAS_FSQ_12_020.plot
rename from data/plotinfo/CMS_2012_PAS_FSQ_12_020.plot
rename to analyses/pluginCMS/CMS_2012_PAS_FSQ_12_020.plot
diff --git a/data/refdata/CMS_2012_PAS_FSQ_12_020.yoda b/analyses/pluginCMS/CMS_2012_PAS_FSQ_12_020.yoda
rename from data/refdata/CMS_2012_PAS_FSQ_12_020.yoda
rename to analyses/pluginCMS/CMS_2012_PAS_FSQ_12_020.yoda
diff --git a/src/Analyses/CMS_2012_PAS_QCD_11_010.cc b/analyses/pluginCMS/CMS_2012_PAS_QCD_11_010.cc
rename from src/Analyses/CMS_2012_PAS_QCD_11_010.cc
rename to analyses/pluginCMS/CMS_2012_PAS_QCD_11_010.cc
diff --git a/data/anainfo/CMS_2012_PAS_QCD_11_010.info b/analyses/pluginCMS/CMS_2012_PAS_QCD_11_010.info
rename from data/anainfo/CMS_2012_PAS_QCD_11_010.info
rename to analyses/pluginCMS/CMS_2012_PAS_QCD_11_010.info
diff --git a/data/plotinfo/CMS_2012_PAS_QCD_11_010.plot b/analyses/pluginCMS/CMS_2012_PAS_QCD_11_010.plot
rename from data/plotinfo/CMS_2012_PAS_QCD_11_010.plot
rename to analyses/pluginCMS/CMS_2012_PAS_QCD_11_010.plot
diff --git a/data/refdata/CMS_2012_PAS_QCD_11_010.yoda b/analyses/pluginCMS/CMS_2012_PAS_QCD_11_010.yoda
rename from data/refdata/CMS_2012_PAS_QCD_11_010.yoda
rename to analyses/pluginCMS/CMS_2012_PAS_QCD_11_010.yoda
diff --git a/src/Analyses/CMS_2013_I1122847.cc b/analyses/pluginCMS/CMS_2013_I1122847.cc
rename from src/Analyses/CMS_2013_I1122847.cc
rename to analyses/pluginCMS/CMS_2013_I1122847.cc
diff --git a/data/anainfo/CMS_2013_I1122847.info b/analyses/pluginCMS/CMS_2013_I1122847.info
rename from data/anainfo/CMS_2013_I1122847.info
rename to analyses/pluginCMS/CMS_2013_I1122847.info
diff --git a/data/plotinfo/CMS_2013_I1122847.plot b/analyses/pluginCMS/CMS_2013_I1122847.plot
rename from data/plotinfo/CMS_2013_I1122847.plot
rename to analyses/pluginCMS/CMS_2013_I1122847.plot
diff --git a/data/refdata/CMS_2013_I1122847.yoda b/analyses/pluginCMS/CMS_2013_I1122847.yoda
rename from data/refdata/CMS_2013_I1122847.yoda
rename to analyses/pluginCMS/CMS_2013_I1122847.yoda
diff --git a/src/Analyses/CMS_2013_I1208923.cc b/analyses/pluginCMS/CMS_2013_I1208923.cc
rename from src/Analyses/CMS_2013_I1208923.cc
rename to analyses/pluginCMS/CMS_2013_I1208923.cc
diff --git a/data/anainfo/CMS_2013_I1208923.info b/analyses/pluginCMS/CMS_2013_I1208923.info
rename from data/anainfo/CMS_2013_I1208923.info
rename to analyses/pluginCMS/CMS_2013_I1208923.info
diff --git a/data/plotinfo/CMS_2013_I1208923.plot b/analyses/pluginCMS/CMS_2013_I1208923.plot
rename from data/plotinfo/CMS_2013_I1208923.plot
rename to analyses/pluginCMS/CMS_2013_I1208923.plot
diff --git a/data/refdata/CMS_2013_I1208923.yoda b/analyses/pluginCMS/CMS_2013_I1208923.yoda
rename from data/refdata/CMS_2013_I1208923.yoda
rename to analyses/pluginCMS/CMS_2013_I1208923.yoda
diff --git a/src/Analyses/CMS_2013_I1209721.cc b/analyses/pluginCMS/CMS_2013_I1209721.cc
rename from src/Analyses/CMS_2013_I1209721.cc
rename to analyses/pluginCMS/CMS_2013_I1209721.cc
--- a/src/Analyses/CMS_2013_I1209721.cc
+++ b/analyses/pluginCMS/CMS_2013_I1209721.cc
@@ -1,166 +1,174 @@
 #include "Rivet/Analysis.hh"
 #include "Rivet/Tools/BinnedHistogram.hh"
 #include "Rivet/Projections/FinalState.hh"
 #include "Rivet/Projections/FastJets.hh"
 #include "Rivet/Projections/ZFinder.hh"
 #include "Rivet/Projections/Thrust.hh"
 
 namespace Rivet {
 
   
 
 
   /// CMS Z+jets delta(phi) and jet thrust measurement at 7 TeV
   class CMS_2013_I1209721 : public Analysis {
   public:
 
     CMS_2013_I1209721()
       : Analysis("CMS_2013_I1209721")
     {    }
 
 
     /// Book projections and histograms
     void init() {
       // Full final state
       const FinalState fs(-5.0,5.0);
       declare(fs, "FS");
       // Z finders for electrons and muons
       Cut cuts = Cuts::abseta < 2.4 && Cuts::pT > 20*GeV;
       const ZFinder zfe(fs, cuts, PID::ELECTRON, 71*GeV, 111*GeV);
       const ZFinder zfm(fs, cuts, PID::MUON,     71*GeV, 111*GeV);
       declare(zfe, "ZFE");
       declare(zfm, "ZFM");
       // Jets
       const FastJets jets(fs, FastJets::ANTIKT, 0.5);
       declare(jets, "JETS");
 
       // Book histograms from data
       for (size_t i = 0; i < 2; ++i) {
         _histDeltaPhiZJ1_1[i]  = bookHisto1D(1+i*9, 1, 1);
         _histDeltaPhiZJ1_2[i]  = bookHisto1D(2+i*9, 1, 1);
         _histDeltaPhiZJ1_3[i]  = bookHisto1D(4+i*9, 1, 1);
         _histDeltaPhiZJ2_3[i]  = bookHisto1D(5+i*9, 1, 1);
         _histDeltaPhiZJ3_3[i]  = bookHisto1D(3+i*9, 1, 1);
         _histDeltaPhiJ1J2_3[i] = bookHisto1D(6+i*9, 1, 1);
         _histDeltaPhiJ1J3_3[i] = bookHisto1D(7+i*9, 1, 1);
         _histDeltaPhiJ2J3_3[i] = bookHisto1D(8+i*9, 1, 1);
         _histTransvThrust[i]   = bookHisto1D(9+i*9, 1, 1);
       }
     }
 
 
     void analyze(const Event& event) {
       const double weight = event.weight();
 
       // Apply the Z finders
       const ZFinder& zfe = apply<ZFinder>(event, "ZFE");
       const ZFinder& zfm = apply<ZFinder>(event, "ZFM");
 
       // Choose the Z candidate (there must be one)
       if (zfe.empty() && zfm.empty()) vetoEvent;
       const ParticleVector& z = !zfm.empty() ? zfm.bosons() : zfe.bosons();
       const ParticleVector& leptons = !zfm.empty() ? zfm.constituents() : zfe.constituents();
 
       // Determine whether we are in the boosted regime
       const bool is_boosted = (z[0].pT() > 150*GeV);
 
       // Build the jets
       const FastJets& jetfs = apply<FastJets>(event, "JETS");
       const Jets& jets = jetfs.jetsByPt(Cuts::pT > 50*GeV && Cuts::abseta < 2.5);
 
       // Clean the jets against the lepton candidates, as in the paper, with a deltaR cut of 0.4 against the clustered leptons
       vector<const Jet*> cleanedJets;
       for (size_t i = 0; i < jets.size(); ++i) {
         bool isolated = true;
         for (size_t j = 0; j < 2; ++j) {
           if (deltaR(leptons[j], jets[i]) < 0.4) {
             isolated = false;
             break;
           }
         }
         if (isolated) cleanedJets.push_back(&jets[i]);
       }
 
       // Require at least 1 jet
       const unsigned int Njets = cleanedJets.size();
       if (Njets < 1) vetoEvent;
 
       // Now compute the thrust
       // Collect Z and jets transverse momenta to calculate transverse thrust
       vector<Vector3> momenta;
       momenta.clear();
       Vector3 mom = z[0].p3();
       mom.setZ(0);
       momenta.push_back(mom);
 
       for (size_t i = 0; i < cleanedJets.size(); ++i) {
         Vector3 mj = cleanedJets[i]->momentum().p3();
         mj.setZ(0);
         momenta.push_back(mj);
       }
 
       if (momenta.size() <= 2){
         // We need to use a ghost so that Thrust.calc() doesn't return 1.
         momenta.push_back(Vector3(0.0000001,0.0000001,0.));
       }
 
-      // Define a macro to appropriately fill both unboosted and boosted histo versions
-      #define FILLx2(HNAME, VAL) do { double x = VAL; for (size_t i = 0; i < 2; ++i) { \
-        if (i == 0 || is_boosted) HNAME[i]->fill(x, weight); } } while(0)
-
       Thrust thrust; thrust.calc(momenta);
       const double T = thrust.thrust();
-      FILLx2(_histTransvThrust, log(max(1-T, 1e-6)));
+      FILLx2(_histTransvThrust, is_boosted, log(max(1-T, 1e-6)), weight);
 
       const double dphiZJ1 = deltaPhi(z[0], *cleanedJets[0]);
-      FILLx2(_histDeltaPhiZJ1_1, dphiZJ1);
+      FILLx2(_histDeltaPhiZJ1_1, is_boosted, dphiZJ1, weight);
       if (Njets > 1) {
-        FILLx2(_histDeltaPhiZJ1_2, dphiZJ1);
+        FILLx2(_histDeltaPhiZJ1_2, is_boosted, dphiZJ1, weight);
         if (Njets > 2) {
-          FILLx2(_histDeltaPhiZJ1_3, dphiZJ1);
-          FILLx2(_histDeltaPhiZJ2_3, deltaPhi(z[0], *cleanedJets[1]));
-          FILLx2(_histDeltaPhiZJ3_3, deltaPhi(z[0], *cleanedJets[2]));
-          FILLx2(_histDeltaPhiJ1J2_3, deltaPhi(*cleanedJets[0], *cleanedJets[1]));
-          FILLx2(_histDeltaPhiJ1J3_3, deltaPhi(*cleanedJets[0], *cleanedJets[2]));
-          FILLx2(_histDeltaPhiJ2J3_3, deltaPhi(*cleanedJets[1], *cleanedJets[2]));
+          FILLx2(_histDeltaPhiZJ1_3,  is_boosted, dphiZJ1, weight);
+          FILLx2(_histDeltaPhiZJ2_3,  is_boosted, deltaPhi(z[0], *cleanedJets[1]), weight);
+          FILLx2(_histDeltaPhiZJ3_3,  is_boosted, deltaPhi(z[0], *cleanedJets[2]), weight);
+          FILLx2(_histDeltaPhiJ1J2_3, is_boosted, deltaPhi(*cleanedJets[0], *cleanedJets[1]), weight);
+          FILLx2(_histDeltaPhiJ1J3_3, is_boosted, deltaPhi(*cleanedJets[0], *cleanedJets[2]), weight);
+          FILLx2(_histDeltaPhiJ2J3_3, is_boosted, deltaPhi(*cleanedJets[1], *cleanedJets[2]), weight);
         }
       }
     }
 
 
     /// Normalizations
     /// @note Most of these data normalizations neglect the overflow bins
     void finalize() {
       for (size_t i = 0; i < 2; ++i) {
         normalize(_histDeltaPhiZJ1_1[i], 1, false);
         normalize(_histDeltaPhiZJ1_2[i], 1, false);
         normalize(_histDeltaPhiZJ1_3[i], 1, false);
         normalize(_histDeltaPhiZJ2_3[i], 1, false);
         normalize(_histDeltaPhiZJ3_3[i], 1, false);
         normalize(_histDeltaPhiJ1J2_3[i], 1, false);
         normalize(_histDeltaPhiJ1J3_3[i], 1, false);
         normalize(_histDeltaPhiJ2J3_3[i], 1, false);
         normalize(_histTransvThrust[i]);
       }
     }
 
 
   private:
 
+
+    // Define a helper to appropriately fill both unboosted and boosted histo versions
+    void FILLx2(Histo1DPtr* HNAME, bool is_boosted, double VAL, double weight) { 
+      double x = VAL; 
+      for (size_t i = 0; i < 2; ++i) {
+        if (i == 0 || is_boosted) 
+          HNAME[i]->fill(x, weight); 
+      }
+    }
+
+
+
     // Arrays of unboosted/boosted histos
     Histo1DPtr _histDeltaPhiZJ1_1[2];
     Histo1DPtr _histDeltaPhiZJ1_2[2];
     Histo1DPtr _histDeltaPhiZJ1_3[2];
     Histo1DPtr _histDeltaPhiZJ2_3[2];
     Histo1DPtr _histDeltaPhiZJ3_3[2];
     Histo1DPtr _histDeltaPhiJ1J2_3[2];
     Histo1DPtr _histDeltaPhiJ1J3_3[2];
     Histo1DPtr _histDeltaPhiJ2J3_3[2];
     Histo1DPtr _histTransvThrust[2];
 
   };
 
 
   DECLARE_RIVET_PLUGIN(CMS_2013_I1209721);
 
 }
diff --git a/data/anainfo/CMS_2013_I1209721.info b/analyses/pluginCMS/CMS_2013_I1209721.info
rename from data/anainfo/CMS_2013_I1209721.info
rename to analyses/pluginCMS/CMS_2013_I1209721.info
diff --git a/data/plotinfo/CMS_2013_I1209721.plot b/analyses/pluginCMS/CMS_2013_I1209721.plot
rename from data/plotinfo/CMS_2013_I1209721.plot
rename to analyses/pluginCMS/CMS_2013_I1209721.plot
diff --git a/data/refdata/CMS_2013_I1209721.yoda b/analyses/pluginCMS/CMS_2013_I1209721.yoda
rename from data/refdata/CMS_2013_I1209721.yoda
rename to analyses/pluginCMS/CMS_2013_I1209721.yoda
diff --git a/src/Analyses/CMS_2013_I1218372.cc b/analyses/pluginCMS/CMS_2013_I1218372.cc
rename from src/Analyses/CMS_2013_I1218372.cc
rename to analyses/pluginCMS/CMS_2013_I1218372.cc
diff --git a/data/anainfo/CMS_2013_I1218372.info b/analyses/pluginCMS/CMS_2013_I1218372.info
rename from data/anainfo/CMS_2013_I1218372.info
rename to analyses/pluginCMS/CMS_2013_I1218372.info
diff --git a/data/plotinfo/CMS_2013_I1218372.plot b/analyses/pluginCMS/CMS_2013_I1218372.plot
rename from data/plotinfo/CMS_2013_I1218372.plot
rename to analyses/pluginCMS/CMS_2013_I1218372.plot
diff --git a/data/refdata/CMS_2013_I1218372.yoda b/analyses/pluginCMS/CMS_2013_I1218372.yoda
rename from data/refdata/CMS_2013_I1218372.yoda
rename to analyses/pluginCMS/CMS_2013_I1218372.yoda
diff --git a/src/Analyses/CMS_2013_I1223519.cc b/analyses/pluginCMS/CMS_2013_I1223519.cc
rename from src/Analyses/CMS_2013_I1223519.cc
rename to analyses/pluginCMS/CMS_2013_I1223519.cc
diff --git a/data/anainfo/CMS_2013_I1223519.info b/analyses/pluginCMS/CMS_2013_I1223519.info
rename from data/anainfo/CMS_2013_I1223519.info
rename to analyses/pluginCMS/CMS_2013_I1223519.info
diff --git a/src/Analyses/CMS_2013_I1224539_DIJET.cc b/analyses/pluginCMS/CMS_2013_I1224539_DIJET.cc
rename from src/Analyses/CMS_2013_I1224539_DIJET.cc
rename to analyses/pluginCMS/CMS_2013_I1224539_DIJET.cc
diff --git a/data/anainfo/CMS_2013_I1224539_DIJET.info b/analyses/pluginCMS/CMS_2013_I1224539_DIJET.info
rename from data/anainfo/CMS_2013_I1224539_DIJET.info
rename to analyses/pluginCMS/CMS_2013_I1224539_DIJET.info
diff --git a/data/plotinfo/CMS_2013_I1224539_DIJET.plot b/analyses/pluginCMS/CMS_2013_I1224539_DIJET.plot
rename from data/plotinfo/CMS_2013_I1224539_DIJET.plot
rename to analyses/pluginCMS/CMS_2013_I1224539_DIJET.plot
diff --git a/data/refdata/CMS_2013_I1224539_DIJET.yoda b/analyses/pluginCMS/CMS_2013_I1224539_DIJET.yoda
rename from data/refdata/CMS_2013_I1224539_DIJET.yoda
rename to analyses/pluginCMS/CMS_2013_I1224539_DIJET.yoda
diff --git a/src/Analyses/CMS_2013_I1224539_WJET.cc b/analyses/pluginCMS/CMS_2013_I1224539_WJET.cc
rename from src/Analyses/CMS_2013_I1224539_WJET.cc
rename to analyses/pluginCMS/CMS_2013_I1224539_WJET.cc
diff --git a/data/anainfo/CMS_2013_I1224539_WJET.info b/analyses/pluginCMS/CMS_2013_I1224539_WJET.info
rename from data/anainfo/CMS_2013_I1224539_WJET.info
rename to analyses/pluginCMS/CMS_2013_I1224539_WJET.info
diff --git a/data/plotinfo/CMS_2013_I1224539_WJET.plot b/analyses/pluginCMS/CMS_2013_I1224539_WJET.plot
rename from data/plotinfo/CMS_2013_I1224539_WJET.plot
rename to analyses/pluginCMS/CMS_2013_I1224539_WJET.plot
diff --git a/data/refdata/CMS_2013_I1224539_WJET.yoda b/analyses/pluginCMS/CMS_2013_I1224539_WJET.yoda
rename from data/refdata/CMS_2013_I1224539_WJET.yoda
rename to analyses/pluginCMS/CMS_2013_I1224539_WJET.yoda
diff --git a/src/Analyses/CMS_2013_I1224539_ZJET.cc b/analyses/pluginCMS/CMS_2013_I1224539_ZJET.cc
rename from src/Analyses/CMS_2013_I1224539_ZJET.cc
rename to analyses/pluginCMS/CMS_2013_I1224539_ZJET.cc
diff --git a/data/anainfo/CMS_2013_I1224539_ZJET.info b/analyses/pluginCMS/CMS_2013_I1224539_ZJET.info
rename from data/anainfo/CMS_2013_I1224539_ZJET.info
rename to analyses/pluginCMS/CMS_2013_I1224539_ZJET.info
diff --git a/data/plotinfo/CMS_2013_I1224539_ZJET.plot b/analyses/pluginCMS/CMS_2013_I1224539_ZJET.plot
rename from data/plotinfo/CMS_2013_I1224539_ZJET.plot
rename to analyses/pluginCMS/CMS_2013_I1224539_ZJET.plot
diff --git a/data/refdata/CMS_2013_I1224539_ZJET.yoda b/analyses/pluginCMS/CMS_2013_I1224539_ZJET.yoda
rename from data/refdata/CMS_2013_I1224539_ZJET.yoda
rename to analyses/pluginCMS/CMS_2013_I1224539_ZJET.yoda
diff --git a/src/Analyses/CMS_2013_I1256943.cc b/analyses/pluginCMS/CMS_2013_I1256943.cc
rename from src/Analyses/CMS_2013_I1256943.cc
rename to analyses/pluginCMS/CMS_2013_I1256943.cc
diff --git a/data/anainfo/CMS_2013_I1256943.info b/analyses/pluginCMS/CMS_2013_I1256943.info
rename from data/anainfo/CMS_2013_I1256943.info
rename to analyses/pluginCMS/CMS_2013_I1256943.info
diff --git a/data/plotinfo/CMS_2013_I1256943.plot b/analyses/pluginCMS/CMS_2013_I1256943.plot
rename from data/plotinfo/CMS_2013_I1256943.plot
rename to analyses/pluginCMS/CMS_2013_I1256943.plot
diff --git a/data/refdata/CMS_2013_I1256943.yoda b/analyses/pluginCMS/CMS_2013_I1256943.yoda
rename from data/refdata/CMS_2013_I1256943.yoda
rename to analyses/pluginCMS/CMS_2013_I1256943.yoda
diff --git a/src/Analyses/CMS_2013_I1258128.cc b/analyses/pluginCMS/CMS_2013_I1258128.cc
rename from src/Analyses/CMS_2013_I1258128.cc
rename to analyses/pluginCMS/CMS_2013_I1258128.cc
diff --git a/data/anainfo/CMS_2013_I1258128.info b/analyses/pluginCMS/CMS_2013_I1258128.info
rename from data/anainfo/CMS_2013_I1258128.info
rename to analyses/pluginCMS/CMS_2013_I1258128.info
diff --git a/data/plotinfo/CMS_2013_I1258128.plot b/analyses/pluginCMS/CMS_2013_I1258128.plot
rename from data/plotinfo/CMS_2013_I1258128.plot
rename to analyses/pluginCMS/CMS_2013_I1258128.plot
diff --git a/data/refdata/CMS_2013_I1258128.yoda b/analyses/pluginCMS/CMS_2013_I1258128.yoda
rename from data/refdata/CMS_2013_I1258128.yoda
rename to analyses/pluginCMS/CMS_2013_I1258128.yoda
diff --git a/src/Analyses/CMS_2013_I1261026.cc b/analyses/pluginCMS/CMS_2013_I1261026.cc
rename from src/Analyses/CMS_2013_I1261026.cc
rename to analyses/pluginCMS/CMS_2013_I1261026.cc
diff --git a/data/anainfo/CMS_2013_I1261026.info b/analyses/pluginCMS/CMS_2013_I1261026.info
rename from data/anainfo/CMS_2013_I1261026.info
rename to analyses/pluginCMS/CMS_2013_I1261026.info
diff --git a/data/plotinfo/CMS_2013_I1261026.plot b/analyses/pluginCMS/CMS_2013_I1261026.plot
rename from data/plotinfo/CMS_2013_I1261026.plot
rename to analyses/pluginCMS/CMS_2013_I1261026.plot
diff --git a/data/refdata/CMS_2013_I1261026.yoda b/analyses/pluginCMS/CMS_2013_I1261026.yoda
rename from data/refdata/CMS_2013_I1261026.yoda
rename to analyses/pluginCMS/CMS_2013_I1261026.yoda
diff --git a/src/Analyses/CMS_2013_I1265659.cc b/analyses/pluginCMS/CMS_2013_I1265659.cc
rename from src/Analyses/CMS_2013_I1265659.cc
rename to analyses/pluginCMS/CMS_2013_I1265659.cc
diff --git a/data/anainfo/CMS_2013_I1265659.info b/analyses/pluginCMS/CMS_2013_I1265659.info
rename from data/anainfo/CMS_2013_I1265659.info
rename to analyses/pluginCMS/CMS_2013_I1265659.info
diff --git a/data/plotinfo/CMS_2013_I1265659.plot b/analyses/pluginCMS/CMS_2013_I1265659.plot
rename from data/plotinfo/CMS_2013_I1265659.plot
rename to analyses/pluginCMS/CMS_2013_I1265659.plot
diff --git a/data/refdata/CMS_2013_I1265659.yoda b/analyses/pluginCMS/CMS_2013_I1265659.yoda
rename from data/refdata/CMS_2013_I1265659.yoda
rename to analyses/pluginCMS/CMS_2013_I1265659.yoda
diff --git a/src/Analyses/CMS_2013_I1272853.cc b/analyses/pluginCMS/CMS_2013_I1272853.cc
rename from src/Analyses/CMS_2013_I1272853.cc
rename to analyses/pluginCMS/CMS_2013_I1272853.cc
diff --git a/data/anainfo/CMS_2013_I1272853.info b/analyses/pluginCMS/CMS_2013_I1272853.info
rename from data/anainfo/CMS_2013_I1272853.info
rename to analyses/pluginCMS/CMS_2013_I1272853.info
diff --git a/data/plotinfo/CMS_2013_I1272853.plot b/analyses/pluginCMS/CMS_2013_I1272853.plot
rename from data/plotinfo/CMS_2013_I1272853.plot
rename to analyses/pluginCMS/CMS_2013_I1272853.plot
diff --git a/data/refdata/CMS_2013_I1272853.yoda b/analyses/pluginCMS/CMS_2013_I1272853.yoda
rename from data/refdata/CMS_2013_I1272853.yoda
rename to analyses/pluginCMS/CMS_2013_I1272853.yoda
diff --git a/src/Analyses/CMS_2013_I1273574.cc b/analyses/pluginCMS/CMS_2013_I1273574.cc
rename from src/Analyses/CMS_2013_I1273574.cc
rename to analyses/pluginCMS/CMS_2013_I1273574.cc
diff --git a/data/anainfo/CMS_2013_I1273574.info b/analyses/pluginCMS/CMS_2013_I1273574.info
rename from data/anainfo/CMS_2013_I1273574.info
rename to analyses/pluginCMS/CMS_2013_I1273574.info
diff --git a/data/plotinfo/CMS_2013_I1273574.plot b/analyses/pluginCMS/CMS_2013_I1273574.plot
rename from data/plotinfo/CMS_2013_I1273574.plot
rename to analyses/pluginCMS/CMS_2013_I1273574.plot
diff --git a/data/refdata/CMS_2013_I1273574.yoda b/analyses/pluginCMS/CMS_2013_I1273574.yoda
rename from data/refdata/CMS_2013_I1273574.yoda
rename to analyses/pluginCMS/CMS_2013_I1273574.yoda
diff --git a/src/Analyses/CMS_2014_I1298810.cc b/analyses/pluginCMS/CMS_2014_I1298810.cc
rename from src/Analyses/CMS_2014_I1298810.cc
rename to analyses/pluginCMS/CMS_2014_I1298810.cc
diff --git a/data/anainfo/CMS_2014_I1298810.info b/analyses/pluginCMS/CMS_2014_I1298810.info
rename from data/anainfo/CMS_2014_I1298810.info
rename to analyses/pluginCMS/CMS_2014_I1298810.info
diff --git a/data/plotinfo/CMS_2014_I1298810.plot b/analyses/pluginCMS/CMS_2014_I1298810.plot
rename from data/plotinfo/CMS_2014_I1298810.plot
rename to analyses/pluginCMS/CMS_2014_I1298810.plot
diff --git a/data/refdata/CMS_2014_I1298810.yoda b/analyses/pluginCMS/CMS_2014_I1298810.yoda
rename from data/refdata/CMS_2014_I1298810.yoda
rename to analyses/pluginCMS/CMS_2014_I1298810.yoda
diff --git a/src/Analyses/CMS_2014_I1303894.cc b/analyses/pluginCMS/CMS_2014_I1303894.cc
rename from src/Analyses/CMS_2014_I1303894.cc
rename to analyses/pluginCMS/CMS_2014_I1303894.cc
diff --git a/data/anainfo/CMS_2014_I1303894.info b/analyses/pluginCMS/CMS_2014_I1303894.info
rename from data/anainfo/CMS_2014_I1303894.info
rename to analyses/pluginCMS/CMS_2014_I1303894.info
--- a/data/anainfo/CMS_2014_I1303894.info
+++ b/analyses/pluginCMS/CMS_2014_I1303894.info
@@ -1,47 +1,47 @@
 Name: CMS_2014_I1303894
 Year: 2011
 Summary: Differential cross-section of $W$ bosons + jets in $pp$ collisions at $\sqrt{s}=7$ TeV
 Experiment: CMS
 Collider: LHC
 InspireID: 1303894
 Status: VALIDATED
 Authors:
  - Darin Baumgartel (darinb@cern.ch)
  - Emanuela Barberis (barberis@fnal.gov)
 References:
  - Phys. Lett. B741 (2014) 12-37
  - https://inspirehep.net/record/1303894
  - http://arxiv.org/abs/1406.7533
 RunInfo:
    Run MC generators with $W$ decaying leptonically at 7 TeV CoM energy. A large number of
     events are required to populate the high jet multiplicity region. Suitable results can
     be achieved with 85M events.
 Beams: [p+, p+]
 Energies: [7000]
 PtCuts:
   Leading muon $pT > 25 GeV$ and leading muon $|eta| < 2.1$
   Jet $pT > 30 GeV$ and $|eta| < 2.4$
 Description:
   A study of jet production in association with $W$ bosons has been performed, in
   events with the $W$ decaying to a muon. Jets are required to have $pT > 30$ GeV and $|eta| < 2.4$.
   Muons are required to have $pT > 25$ and $|eta| < 2.1$. Jets are only considered if they are
   separated from the muon by $\Delta{R} > 0.5$. Muons are dressed with photons in a cone of $0.1$
   around the muon.
 BibKey: Khachatryan:2014uva
 BibTeX: '@article{Khachatryan:2014uva,
       author         = "Khachatryan, Vardan and others",
       title          = "{Differential cross section measurements for the
                         production of a $W$ boson in association with jets in
                         proton–proton collisions at $\sqrt{s} = 7$ TeV}",
       collaboration  = "CMS Collaboration",
       journal        = "Phys.Lett.",
       volume         = "B741",
       pages          = "12-37",
       doi            = "10.1016/j.physletb.2014.12.003",
       year           = "2014",
       eprint         = "1406.7533",
       archivePrefix  = "arXiv",
       primaryClass   = "hep-ex",
       reportNumber   = "CMS-SMP-12-023, CERN-PH-EP-2014-134",
       SLACcitation   = "%%CITATION = ARXIV:1406.7533;%%",
-}
+}'
diff --git a/data/plotinfo/CMS_2014_I1303894.plot b/analyses/pluginCMS/CMS_2014_I1303894.plot
rename from data/plotinfo/CMS_2014_I1303894.plot
rename to analyses/pluginCMS/CMS_2014_I1303894.plot
diff --git a/data/refdata/CMS_2014_I1303894.yoda b/analyses/pluginCMS/CMS_2014_I1303894.yoda
rename from data/refdata/CMS_2014_I1303894.yoda
rename to analyses/pluginCMS/CMS_2014_I1303894.yoda
diff --git a/src/Analyses/CMS_2014_I1305624.cc b/analyses/pluginCMS/CMS_2014_I1305624.cc
rename from src/Analyses/CMS_2014_I1305624.cc
rename to analyses/pluginCMS/CMS_2014_I1305624.cc
diff --git a/data/anainfo/CMS_2014_I1305624.info b/analyses/pluginCMS/CMS_2014_I1305624.info
rename from data/anainfo/CMS_2014_I1305624.info
rename to analyses/pluginCMS/CMS_2014_I1305624.info
diff --git a/data/plotinfo/CMS_2014_I1305624.plot b/analyses/pluginCMS/CMS_2014_I1305624.plot
rename from data/plotinfo/CMS_2014_I1305624.plot
rename to analyses/pluginCMS/CMS_2014_I1305624.plot
diff --git a/data/refdata/CMS_2014_I1305624.yoda b/analyses/pluginCMS/CMS_2014_I1305624.yoda
rename from data/refdata/CMS_2014_I1305624.yoda
rename to analyses/pluginCMS/CMS_2014_I1305624.yoda
diff --git a/src/Analyses/CMS_2015_I1310737.cc b/analyses/pluginCMS/CMS_2015_I1310737.cc
rename from src/Analyses/CMS_2015_I1310737.cc
rename to analyses/pluginCMS/CMS_2015_I1310737.cc
diff --git a/data/anainfo/CMS_2015_I1310737.info b/analyses/pluginCMS/CMS_2015_I1310737.info
rename from data/anainfo/CMS_2015_I1310737.info
rename to analyses/pluginCMS/CMS_2015_I1310737.info
diff --git a/data/plotinfo/CMS_2015_I1310737.plot b/analyses/pluginCMS/CMS_2015_I1310737.plot
rename from data/plotinfo/CMS_2015_I1310737.plot
rename to analyses/pluginCMS/CMS_2015_I1310737.plot
diff --git a/data/refdata/CMS_2015_I1310737.yoda b/analyses/pluginCMS/CMS_2015_I1310737.yoda
rename from data/refdata/CMS_2015_I1310737.yoda
rename to analyses/pluginCMS/CMS_2015_I1310737.yoda
diff --git a/src/Analyses/CMS_2015_I1327224.cc b/analyses/pluginCMS/CMS_2015_I1327224.cc
rename from src/Analyses/CMS_2015_I1327224.cc
rename to analyses/pluginCMS/CMS_2015_I1327224.cc
diff --git a/data/anainfo/CMS_2015_I1327224.info b/analyses/pluginCMS/CMS_2015_I1327224.info
rename from data/anainfo/CMS_2015_I1327224.info
rename to analyses/pluginCMS/CMS_2015_I1327224.info
diff --git a/data/plotinfo/CMS_2015_I1327224.plot b/analyses/pluginCMS/CMS_2015_I1327224.plot
rename from data/plotinfo/CMS_2015_I1327224.plot
rename to analyses/pluginCMS/CMS_2015_I1327224.plot
diff --git a/data/refdata/CMS_2015_I1327224.yoda b/analyses/pluginCMS/CMS_2015_I1327224.yoda
rename from data/refdata/CMS_2015_I1327224.yoda
rename to analyses/pluginCMS/CMS_2015_I1327224.yoda
diff --git a/src/Analyses/CMS_2015_I1346843.cc b/analyses/pluginCMS/CMS_2015_I1346843.cc
rename from src/Analyses/CMS_2015_I1346843.cc
rename to analyses/pluginCMS/CMS_2015_I1346843.cc
diff --git a/data/anainfo/CMS_2015_I1346843.info b/analyses/pluginCMS/CMS_2015_I1346843.info
rename from data/anainfo/CMS_2015_I1346843.info
rename to analyses/pluginCMS/CMS_2015_I1346843.info
diff --git a/data/plotinfo/CMS_2015_I1346843.plot b/analyses/pluginCMS/CMS_2015_I1346843.plot
rename from data/plotinfo/CMS_2015_I1346843.plot
rename to analyses/pluginCMS/CMS_2015_I1346843.plot
diff --git a/data/refdata/CMS_2015_I1346843.yoda b/analyses/pluginCMS/CMS_2015_I1346843.yoda
rename from data/refdata/CMS_2015_I1346843.yoda
rename to analyses/pluginCMS/CMS_2015_I1346843.yoda
diff --git a/src/Analyses/CMS_2015_I1356998.cc b/analyses/pluginCMS/CMS_2015_I1356998.cc
rename from src/Analyses/CMS_2015_I1356998.cc
rename to analyses/pluginCMS/CMS_2015_I1356998.cc
diff --git a/data/anainfo/CMS_2015_I1356998.info b/analyses/pluginCMS/CMS_2015_I1356998.info
rename from data/anainfo/CMS_2015_I1356998.info
rename to analyses/pluginCMS/CMS_2015_I1356998.info
diff --git a/data/plotinfo/CMS_2015_I1356998.plot b/analyses/pluginCMS/CMS_2015_I1356998.plot
rename from data/plotinfo/CMS_2015_I1356998.plot
rename to analyses/pluginCMS/CMS_2015_I1356998.plot
diff --git a/data/refdata/CMS_2015_I1356998.yoda b/analyses/pluginCMS/CMS_2015_I1356998.yoda
rename from data/refdata/CMS_2015_I1356998.yoda
rename to analyses/pluginCMS/CMS_2015_I1356998.yoda
diff --git a/analyses/pluginCMS/CMS_2015_I1370682.cc b/analyses/pluginCMS/CMS_2015_I1370682.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2015_I1370682.cc
@@ -0,0 +1,604 @@
+#include "Rivet/Analysis.hh"
+#include "Rivet/Math/LorentzTrans.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+
+namespace Rivet {
+
+
+  namespace { //< only visible in this compilation unit
+
+    /// @brief Pseudo top finder
+    ///
+    /// Find top quark in the particle level.
+    /// The definition is based on the agreement at the LHC working group.
+    class PseudoTop : public FinalState {
+    public:
+      /// @name Standard constructors and destructors.
+      //@{
+
+      /// The default constructor. May specify the minimum and maximum
+      /// pseudorapidity \f$ \eta \f$ and the min \f$ p_T \f$ (in GeV).
+      PseudoTop(double lepR = 0.1, double lepMinPt = 20, double lepMaxEta = 2.4,
+                double jetR = 0.4, double jetMinPt = 30, double jetMaxEta = 4.7)
+        : FinalState(-MAXDOUBLE, MAXDOUBLE, 0*GeV),
+          _lepR(lepR), _lepMinPt(lepMinPt), _lepMaxEta(lepMaxEta),
+          _jetR(jetR), _jetMinPt(jetMinPt), _jetMaxEta(jetMaxEta)
+      {
+        setName("PseudoTop");
+      }
+
+      enum TTbarMode {CH_NONE=-1, CH_FULLHADRON = 0, CH_SEMILEPTON, CH_FULLLEPTON};
+      enum DecayMode {CH_HADRON = 0, CH_MUON, CH_ELECTRON};
+
+      TTbarMode mode() const {
+        if (!_isValid) return CH_NONE;
+        if (_mode1 == CH_HADRON && _mode2 == CH_HADRON) return CH_FULLHADRON;
+        else if ( _mode1 != CH_HADRON && _mode2 != CH_HADRON) return CH_FULLLEPTON;
+        else return CH_SEMILEPTON;
+      }
+      DecayMode mode1() const {return _mode1;}
+      DecayMode mode2() const {return _mode2;}
+
+      /// Clone on the heap.
+      virtual unique_ptr<Projection> clone() const {
+        return unique_ptr<Projection>(new PseudoTop(*this));
+      }
+
+      //@}
+
+    public:
+      Particle t1() const {return _t1;}
+      Particle t2() const {return _t2;}
+      Particle b1() const {return _b1;}
+      Particle b2() const {return _b2;}
+      ParticleVector wDecays1() const {return _wDecays1;}
+      ParticleVector wDecays2() const {return _wDecays2;}
+      Jets jets() const {return _jets;}
+      Jets bjets() const {return _bjets;}
+      Jets ljets() const {return _ljets;}
+
+    protected:
+      // Apply the projection to the event
+      void project(const Event& e); // override; ///< @todo Re-enable when C++11 allowed
+      void cleanup(std::map<double, std::pair<size_t, size_t> >& v, const bool doCrossCleanup=false) const;
+
+    private:
+      const double _lepR, _lepMinPt, _lepMaxEta;
+      const double _jetR, _jetMinPt, _jetMaxEta;
+
+      //constexpr ///< @todo Re-enable when C++11 allowed
+      static double _tMass; // = 172.5*GeV; ///< @todo Re-enable when C++11 allowed
+      //constexpr ///< @todo Re-enable when C++11 allowed
+      static double _wMass; // = 80.4*GeV; ///< @todo Re-enable when C++11 allowed
+
+    private:
+      bool _isValid;
+      DecayMode _mode1, _mode2;
+
+      Particle _t1, _t2;
+      Particle _b1, _b2;
+      ParticleVector _wDecays1, _wDecays2;
+      Jets _jets, _bjets, _ljets;
+
+    };
+
+    // More implementation below the analysis code
+
+  }
+
+
+
+  /// Pseudo-top analysis from CMS
+  class CMS_2015_I1370682 : public Analysis {
+  public:
+
+    CMS_2015_I1370682()
+      : Analysis("CMS_2015_I1370682"),
+        _applyCorrection(true),
+        _doShapeOnly(true)
+    {    }
+
+
+    void init() {
+      declare(PseudoTop(0.1, 20, 2.4, 0.5, 30, 2.4), "ttbar");
+
+      // Lepton + Jet channel
+      _hSL_topPt         = bookHisto1D("d15-x01-y01"); // 1/sigma dsigma/dpt(top)
+      _hSL_topPtTtbarSys = bookHisto1D("d16-x01-y01"); // 1/sigma dsigma/dpt*(top)
+      _hSL_topY          = bookHisto1D("d17-x01-y01"); // 1/sigma dsigma/dy(top)
+      _hSL_ttbarDelPhi   = bookHisto1D("d18-x01-y01"); // 1/sigma dsigma/ddeltaphi(t,tbar)
+      _hSL_topPtLead     = bookHisto1D("d19-x01-y01"); // 1/sigma dsigma/dpt(t1)
+      _hSL_topPtSubLead  = bookHisto1D("d20-x01-y01"); // 1/sigma dsigma/dpt(t2)
+      _hSL_ttbarPt       = bookHisto1D("d21-x01-y01"); // 1/sigma dsigma/dpt(ttbar)
+      _hSL_ttbarY        = bookHisto1D("d22-x01-y01"); // 1/sigma dsigma/dy(ttbar)
+      _hSL_ttbarMass     = bookHisto1D("d23-x01-y01"); // 1/sigma dsigma/dm(ttbar)
+
+      // Dilepton channel
+      _hDL_topPt         = bookHisto1D("d24-x01-y01"); // 1/sigma dsigma/dpt(top)
+      _hDL_topPtTtbarSys = bookHisto1D("d25-x01-y01"); // 1/sigma dsigma/dpt*(top)
+      _hDL_topY          = bookHisto1D("d26-x01-y01"); // 1/sigma dsigma/dy(top)
+      _hDL_ttbarDelPhi   = bookHisto1D("d27-x01-y01"); // 1/sigma dsigma/ddeltaphi(t,tbar)
+      _hDL_topPtLead     = bookHisto1D("d28-x01-y01"); // 1/sigma dsigma/dpt(t1)
+      _hDL_topPtSubLead  = bookHisto1D("d29-x01-y01"); // 1/sigma dsigma/dpt(t2)
+      _hDL_ttbarPt       = bookHisto1D("d30-x01-y01"); // 1/sigma dsigma/dpt(ttbar)
+      _hDL_ttbarY        = bookHisto1D("d31-x01-y01"); // 1/sigma dsigma/dy(ttbar)
+      _hDL_ttbarMass     = bookHisto1D("d32-x01-y01"); // 1/sigma dsigma/dm(ttbar)
+
+    }
+
+
+    void analyze(const Event& event) {
+
+      // Get the ttbar candidate
+      const PseudoTop& ttbar = apply<PseudoTop>(event, "ttbar");
+      if ( ttbar.mode() == PseudoTop::CH_NONE ) vetoEvent;
+
+      const FourMomentum& t1P4 = ttbar.t1().momentum();
+      const FourMomentum& t2P4 = ttbar.t2().momentum();
+      const double pt1 = std::max(t1P4.pT(), t2P4.pT());
+      const double pt2 = std::min(t1P4.pT(), t2P4.pT());
+      const double dPhi = deltaPhi(t1P4, t2P4);
+      const FourMomentum ttP4 = t1P4 + t2P4;
+      const FourMomentum t1P4AtCM = LorentzTransform::mkFrameTransformFromBeta(ttP4.betaVec()).transform(t1P4);
+
+      const double weight = event.weight();
+
+      if ( ttbar.mode() == PseudoTop::CH_SEMILEPTON ) {
+        const Particle lCand1 = ttbar.wDecays1()[0]; // w1 dau0 is the lepton in the PseudoTop
+        if (lCand1.pT() < 33*GeV || lCand1.abseta() > 2.1) vetoEvent;
+        _hSL_topPt->fill(t1P4.pT(), weight);
+        _hSL_topPt->fill(t2P4.pT(), weight);
+        _hSL_topPtTtbarSys->fill(t1P4AtCM.pT(), weight);
+        _hSL_topY->fill(t1P4.rapidity(), weight);
+        _hSL_topY->fill(t2P4.rapidity(), weight);
+        _hSL_ttbarDelPhi->fill(dPhi, weight);
+        _hSL_topPtLead->fill(pt1, weight);
+        _hSL_topPtSubLead->fill(pt2, weight);
+        _hSL_ttbarPt->fill(ttP4.pT(), weight);
+        _hSL_ttbarY->fill(ttP4.rapidity(), weight);
+        _hSL_ttbarMass->fill(ttP4.mass(), weight);
+      }
+      else if ( ttbar.mode() == PseudoTop::CH_FULLLEPTON ) {
+        const Particle lCand1 = ttbar.wDecays1()[0]; // dau0 are the lepton in the PseudoTop
+        const Particle lCand2 = ttbar.wDecays2()[0]; // dau0 are the lepton in the PseudoTop
+        if (lCand1.pT() < 20*GeV || lCand1.abseta() > 2.4) vetoEvent;
+        if (lCand2.pT() < 20*GeV || lCand2.abseta() > 2.4) vetoEvent;
+        _hDL_topPt->fill(t1P4.pT(), weight);
+        _hDL_topPt->fill(t2P4.pT(), weight);
+        _hDL_topPtTtbarSys->fill(t1P4AtCM.pT(), weight);
+        _hDL_topY->fill(t1P4.rapidity(), weight);
+        _hDL_topY->fill(t2P4.rapidity(), weight);
+        _hDL_ttbarDelPhi->fill(dPhi, weight);
+        _hDL_topPtLead->fill(pt1, weight);
+        _hDL_topPtSubLead->fill(pt2, weight);
+        _hDL_ttbarPt->fill(ttP4.pT(), weight);
+        _hDL_ttbarY->fill(ttP4.rapidity(), weight);
+        _hDL_ttbarMass->fill(ttP4.mass(), weight);
+      }
+
+    }
+
+
+    void finalize() {
+      if ( _applyCorrection ) {
+        // Correction functions for TOP-12-028 paper, (parton bin height)/(pseudotop bin height)
+        const double ch15[] = { 5.473609, 4.941048, 4.173346, 3.391191, 2.785644, 2.371346, 2.194161, 2.197167, };
+        const double ch16[] = { 5.470905, 4.948201, 4.081982, 3.225532, 2.617519, 2.239217, 2.127878, 2.185918, };
+        const double ch17[] = { 10.003667, 4.546519, 3.828115, 3.601018, 3.522194, 3.524694, 3.600951, 3.808553, 4.531891, 9.995370, };
+        const double ch18[] = { 4.406683, 4.054041, 3.885393, 4.213646, };
+        const double ch19[] = { 6.182537, 5.257703, 4.422280, 3.568402, 2.889408, 2.415878, 2.189974, 2.173210, };
+        const double ch20[] = { 5.199874, 4.693318, 3.902882, 3.143785, 2.607877, 2.280189, 2.204124, 2.260829, };
+        const double ch21[] = { 6.053523, 3.777506, 3.562251, 3.601356, 3.569347, 3.410472, };
+        const double ch22[] = { 11.932351, 4.803773, 3.782709, 3.390775, 3.226806, 3.218982, 3.382678, 3.773653, 4.788191, 11.905338, };
+        const double ch23[] = { 7.145255, 5.637595, 4.049882, 3.025917, 2.326430, 1.773824, 1.235329, };
+
+        const double ch24[] = { 2.268193, 2.372063, 2.323975, 2.034655, 1.736793, };
+        const double ch25[] = { 2.231852, 2.383086, 2.341894, 2.031318, 1.729672, 1.486993, };
+        const double ch26[] = { 3.993526, 2.308249, 2.075136, 2.038297, 2.036302, 2.078270, 2.295817, 4.017713, };
+        const double ch27[] = { 2.205978, 2.175010, 2.215376, 2.473144, };
+        const double ch28[] = { 2.321077, 2.371895, 2.338871, 2.057821, 1.755382, };
+        const double ch29[] = { 2.222707, 2.372591, 2.301688, 1.991162, 1.695343, };
+        const double ch30[] = { 2.599677, 2.026855, 2.138620, 2.229553, };
+        const double ch31[] = { 5.791779, 2.636219, 2.103642, 1.967198, 1.962168, 2.096514, 2.641189, 5.780828, };
+        const double ch32[] = { 2.006685, 2.545525, 2.477745, 2.335747, 2.194226, 2.076500, };
+
+        applyCorrection(_hSL_topPt, ch15);
+        applyCorrection(_hSL_topPtTtbarSys, ch16);
+        applyCorrection(_hSL_topY, ch17);
+        applyCorrection(_hSL_ttbarDelPhi, ch18);
+        applyCorrection(_hSL_topPtLead, ch19);
+        applyCorrection(_hSL_topPtSubLead, ch20);
+        applyCorrection(_hSL_ttbarPt, ch21);
+        applyCorrection(_hSL_ttbarY, ch22);
+        applyCorrection(_hSL_ttbarMass, ch23);
+
+        applyCorrection(_hDL_topPt, ch24);
+        applyCorrection(_hDL_topPtTtbarSys, ch25);
+        applyCorrection(_hDL_topY, ch26);
+        applyCorrection(_hDL_ttbarDelPhi, ch27);
+        applyCorrection(_hDL_topPtLead, ch28);
+        applyCorrection(_hDL_topPtSubLead, ch29);
+        applyCorrection(_hDL_ttbarPt, ch30);
+        applyCorrection(_hDL_ttbarY, ch31);
+        applyCorrection(_hDL_ttbarMass, ch32);
+      }
+
+      if ( _doShapeOnly ) {
+        normalize(_hSL_topPt        );
+        normalize(_hSL_topPtTtbarSys);
+        normalize(_hSL_topY         );
+        normalize(_hSL_ttbarDelPhi  );
+        normalize(_hSL_topPtLead    );
+        normalize(_hSL_topPtSubLead );
+        normalize(_hSL_ttbarPt      );
+        normalize(_hSL_ttbarY       );
+        normalize(_hSL_ttbarMass    );
+
+        normalize(_hDL_topPt        );
+        normalize(_hDL_topPtTtbarSys);
+        normalize(_hDL_topY         );
+        normalize(_hDL_ttbarDelPhi  );
+        normalize(_hDL_topPtLead    );
+        normalize(_hDL_topPtSubLead );
+        normalize(_hDL_ttbarPt      );
+        normalize(_hDL_ttbarY       );
+        normalize(_hDL_ttbarMass    );
+      }
+      else {
+        const double s = 1./sumOfWeights();
+        scale(_hSL_topPt        , s);
+        scale(_hSL_topPtTtbarSys, s);
+        scale(_hSL_topY         , s);
+        scale(_hSL_ttbarDelPhi  , s);
+        scale(_hSL_topPtLead    , s);
+        scale(_hSL_topPtSubLead , s);
+        scale(_hSL_ttbarPt      , s);
+        scale(_hSL_ttbarY       , s);
+        scale(_hSL_ttbarMass    , s);
+        scale(_hDL_topPt        , s);
+        scale(_hDL_topPtTtbarSys, s);
+        scale(_hDL_topY         , s);
+        scale(_hDL_ttbarDelPhi  , s);
+        scale(_hDL_topPtLead    , s);
+        scale(_hDL_topPtSubLead , s);
+        scale(_hDL_ttbarPt      , s);
+        scale(_hDL_ttbarY       , s);
+        scale(_hDL_ttbarMass    , s);
+      }
+
+    }
+
+
+    void applyCorrection(Histo1DPtr h, const double* cf) {
+      vector<YODA::HistoBin1D>& bins = h->bins();
+      for (size_t i=0, n=bins.size(); i<n; ++i ) {
+        const double s = cf[i];
+        YODA::HistoBin1D& bin = bins[i];
+        bin.scaleW(s);
+      }
+    }
+
+
+  private:
+
+    const bool _applyCorrection, _doShapeOnly;
+    Histo1DPtr _hSL_topPt, _hSL_topPtTtbarSys, _hSL_topY, _hSL_ttbarDelPhi, _hSL_topPtLead,
+      _hSL_topPtSubLead, _hSL_ttbarPt, _hSL_ttbarY, _hSL_ttbarMass;
+    Histo1DPtr _hDL_topPt, _hDL_topPtTtbarSys, _hDL_topY, _hDL_ttbarDelPhi, _hDL_topPtLead,
+      _hDL_topPtSubLead, _hDL_ttbarPt, _hDL_ttbarY, _hDL_ttbarMass;
+
+  };
+
+
+
+  DECLARE_RIVET_PLUGIN(CMS_2015_I1370682);
+
+
+  ///////////////
+
+  // More PseudoTop implementation
+  namespace {
+
+
+    double PseudoTop::_tMass = 172.5*GeV;
+    double PseudoTop::_wMass = 80.4*GeV;
+
+
+    void PseudoTop::cleanup(map<double, pair<size_t, size_t> >& v, const bool doCrossCleanup) const {
+      vector<map<double, pair<size_t, size_t> >::iterator> toErase;
+      set<size_t> usedLeg1, usedLeg2;
+      if ( !doCrossCleanup ) {
+        /// @todo Reinstate when C++11 allowed: for (auto key = v.begin(); key != v.end(); ++key) {
+        for (map<double, pair<size_t, size_t> >::iterator key = v.begin(); key != v.end(); ++key) {
+          const size_t leg1 = key->second.first;
+          const size_t leg2 = key->second.second;
+          if (usedLeg1.find(leg1) == usedLeg1.end() and
+              usedLeg2.find(leg2) == usedLeg2.end()) {
+            usedLeg1.insert(leg1);
+            usedLeg2.insert(leg2);
+          } else {
+            toErase.push_back(key);
+          }
+        }
+      }
+      else {
+        /// @todo Reinstate when C++11 allowed: for (auto key = v.begin(); key != v.end(); ++key) {
+        for (map<double, pair<size_t, size_t> >::iterator key = v.begin(); key != v.end(); ++key) {
+          const size_t leg1 = key->second.first;
+          const size_t leg2 = key->second.second;
+          if (usedLeg1.find(leg1) == usedLeg1.end() and
+              usedLeg1.find(leg2) == usedLeg1.end()) {
+            usedLeg1.insert(leg1);
+            usedLeg1.insert(leg2);
+          } else {
+            toErase.push_back(key);
+          }
+        }
+      }
+      /// @todo Reinstate when C++11 allowed:  for (auto& key : toErase) v.erase(key);
+      for (size_t i = 0; i < toErase.size(); ++i) v.erase(toErase[i]);
+    }
+
+
+    void PseudoTop::project(const Event& e) {
+      // Leptons : do the lepton clustering anti-kt R=0.1 using stable photons and leptons not from hadron decay
+      // Neutrinos : neutrinos not from hadron decay
+      // MET : vector sum of all invisible particles in x-y plane
+      // Jets : anti-kt R=0.4 using all particles excluding neutrinos and particles used in lepton clustering
+      //        add ghost B hadrons during the jet clustering to identify B jets.
+
+      // W->lv : dressed lepton and neutrino pairs
+      // W->jj : light flavored dijet
+      // W candidate : select lv or jj pairs which minimise |mW1-80.4|+|mW2-80.4|
+      //               lepton-neutrino pair will be selected with higher priority
+
+      // t->Wb : W candidate + b jet
+      // t candidate : select Wb pairs which minimise |mtop1-172.5|+|mtop2-172.5|
+
+      _isValid = false;
+      _theParticles.clear();
+      _wDecays1.clear();
+      _wDecays2.clear();
+      _jets.clear();
+      _bjets.clear();
+      _ljets.clear();
+      _mode1 = _mode2 = CH_HADRON;
+
+      // Collect final state particles
+      Particles pForLep, pForJet;
+      Particles neutrinos; // Prompt neutrinos
+      /// @todo Avoid this unsafe jump into HepMC -- all this can be done properly via VisibleFS and HeavyHadrons projections
+      for (const GenParticle* p : Rivet::particles(e.genEvent())) {
+        const int status = p->status();
+        const int pdgId = p->pdg_id();
+        if (status == 1) {
+          Particle rp = *p;
+          if (!PID::isHadron(pdgId) && !rp.fromHadron()) {
+            // Collect particles not from hadron decay
+            if (rp.isNeutrino()) {
+              // Prompt neutrinos are kept in separate collection
+              neutrinos.push_back(rp);
+            } else if (pdgId == 22 || rp.isLepton()) {
+              // Leptons and photons for the dressing
+              pForLep.push_back(rp);
+            }
+          } else if (!rp.isNeutrino()) {
+            // Use all particles from hadron decay
+            pForJet.push_back(rp);
+          }
+        } else if (PID::isHadron(pdgId) && PID::hasBottom(pdgId)) {
+          // NOTE: Consider B hadrons with pT > 5GeV - not in CMS proposal
+          //if ( p->momentum().perp() < 5 ) continue;
+
+          // Do unstable particles, to be used in the ghost B clustering
+          // Use last B hadrons only
+          bool isLast = true;
+          for (const GenParticlePtr pp : Rivet::particles(p->end_vertex(), HepMC::children)) {
+            if (PID::hasBottom(pp->pdg_id())) {
+              isLast = false;
+              break;
+            }
+          }
+          if (!isLast) continue;
+
+          // Rescale momentum by 10^-20
+          Particle ghost(pdgId, FourMomentum(p->momentum())*1e-20/p->momentum().rho());
+          pForJet.push_back(ghost);
+        }
+      }
+
+      // Start object building from trivial thing - prompt neutrinos
+      sortByPt(neutrinos);
+
+      // Proceed to lepton dressing
+      FastJets fjLep(FinalState(), FastJets::ANTIKT, _lepR);
+      fjLep.calc(pForLep);
+
+      Jets leptons;
+      vector<int> leptonsId;
+      set<int> dressedIdxs;
+      for (const Jet& lep : fjLep.jetsByPt(_lepMinPt)) {
+        if (lep.abseta() > _lepMaxEta) continue;
+        double leadingPt = -1;
+        int leptonId = 0;
+        for (const Particle& p : lep.particles()) {
+          /// @warning Barcodes aren't future-proof in HepMC
+          dressedIdxs.insert(p.genParticle()->barcode());
+          if (p.isLepton() && p.pT() > leadingPt) {
+            leadingPt = p.pT();
+            leptonId = p.pid();
+          }
+        }
+        if (leptonId == 0) continue;
+        leptons.push_back(lep);
+        leptonsId.push_back(leptonId);
+      }
+
+      // Re-use particles not used in lepton dressing
+      for (const Particle& rp : pForLep) {
+        /// @warning Barcodes aren't future-proof in HepMC
+        const int barcode = rp.genParticle()->barcode();
+        // Skip if the particle is used in dressing
+        if (dressedIdxs.find(barcode) != dressedIdxs.end()) continue;
+        // Put back to be used in jet clustering
+        pForJet.push_back(rp);
+      }
+
+      // Then do the jet clustering
+      FastJets fjJet(FinalState(), FastJets::ANTIKT, _jetR);
+      //fjJet.useInvisibles(); // NOTE: CMS proposal to remove neutrinos (AB: wouldn't work anyway, since they were excluded from clustering inputs)
+      fjJet.calc(pForJet);
+      for (const Jet& jet : fjJet.jetsByPt(_jetMinPt)) {
+        if (jet.abseta() > _jetMaxEta) continue;
+        _jets.push_back(jet);
+        bool isBJet = false;
+        for (const Particle& rp : jet.particles()) {
+          if (PID::hasBottom(rp.pdgId())) {
+            isBJet = true;
+            break;
+          }
+        }
+        if ( isBJet ) _bjets.push_back(jet);
+        else _ljets.push_back(jet);
+      }
+
+      // Every building blocks are ready. Continue to pseudo-W and pseudo-top combination
+
+      if (_bjets.size() < 2) return; // Ignore single top for now
+      map<double, pair<size_t, size_t> > wLepCandIdxs;
+      map<double, pair<size_t, size_t> > wHadCandIdxs;
+
+      // Collect leptonic-decaying W's
+      for (size_t iLep = 0, nLep = leptons.size(); iLep < nLep; ++iLep) {
+        const Jet& lep = leptons.at(iLep);
+        for (size_t iNu = 0, nNu = neutrinos.size(); iNu < nNu; ++iNu) {
+          const Particle& nu = neutrinos.at(iNu);
+          const double m = (lep.momentum()+nu.momentum()).mass();
+          const double dm = std::abs(m-_wMass);
+          wLepCandIdxs[dm] = make_pair(iLep, iNu);
+        }
+      }
+
+      // Continue to hadronic decaying W's
+      for (size_t i = 0, nLjet = _ljets.size(); i < nLjet; ++i) {
+        const Jet& ljet1 = _ljets[i];
+        for (size_t j = i+1; j < nLjet; ++j) {
+          const Jet& ljet2 = _ljets[j];
+          const double m = (ljet1.momentum()+ljet2.momentum()).mass();
+          const double dm = std::abs(m-_wMass);
+          wHadCandIdxs[dm] = make_pair(i, j);
+        }
+      }
+
+      // Cleanup W candidate, choose pairs with minimum dm if they share decay products
+      cleanup(wLepCandIdxs);
+      cleanup(wHadCandIdxs, true);
+      const size_t nWLepCand = wLepCandIdxs.size();
+      const size_t nWHadCand = wHadCandIdxs.size();
+
+      if (nWLepCand + nWHadCand < 2) return; // We skip single top
+
+      int w1Q = 1, w2Q = -1;
+      int w1dau1Id = 1, w2dau1Id = -1;
+      FourMomentum w1dau1LVec, w1dau2LVec;
+      FourMomentum w2dau1LVec, w2dau2LVec;
+      if (nWLepCand == 0) { // Full hadronic case
+        const pair<size_t, size_t>& idPair1 = wHadCandIdxs.begin()->second;
+        const pair<size_t, size_t>& idPair2 = (++wHadCandIdxs.begin())->second;  ///< @todo Reinstate std::next
+        const Jet& w1dau1 = _ljets[idPair1.first];
+        const Jet& w1dau2 = _ljets[idPair1.second];
+        const Jet& w2dau1 = _ljets[idPair2.first];
+        const Jet& w2dau2 = _ljets[idPair2.second];
+        w1dau1LVec = w1dau1.momentum();
+        w1dau2LVec = w1dau2.momentum();
+        w2dau1LVec = w2dau1.momentum();
+        w2dau2LVec = w2dau2.momentum();
+      } else if (nWLepCand == 1) { // Semi-leptonic case
+        const pair<size_t, size_t>& idPair1 = wLepCandIdxs.begin()->second;
+        const pair<size_t, size_t>& idPair2 = wHadCandIdxs.begin()->second;
+        const Jet& w1dau1 = leptons[idPair1.first];
+        const Particle& w1dau2 = neutrinos[idPair1.second];
+        const Jet& w2dau1 = _ljets[idPair2.first];
+        const Jet& w2dau2 = _ljets[idPair2.second];
+        w1dau1LVec = w1dau1.momentum();
+        w1dau2LVec = w1dau2.momentum();
+        w2dau1LVec = w2dau1.momentum();
+        w2dau2LVec = w2dau2.momentum();
+        w1dau1Id = leptonsId[idPair1.first];
+        w1Q = w1dau1Id > 0 ? -1 : 1;
+        w2Q = -w1Q;
+        switch (w1dau1Id) {
+        case 13: case -13: _mode1 = CH_MUON; break;
+        case 11: case -11: _mode1 = CH_ELECTRON; break;
+        }
+      } else { // Full leptonic case
+        const pair<size_t, size_t>& idPair1 = wLepCandIdxs.begin()->second;
+        const pair<size_t, size_t>& idPair2 = (++wLepCandIdxs.begin())->second;  ///< @todo Reinstate std::next
+        const Jet& w1dau1 = leptons[idPair1.first];
+        const Particle& w1dau2 = neutrinos[idPair1.second];
+        const Jet& w2dau1 = leptons[idPair2.first];
+        const Particle& w2dau2 = neutrinos[idPair2.second];
+        w1dau1LVec = w1dau1.momentum();
+        w1dau2LVec = w1dau2.momentum();
+        w2dau1LVec = w2dau1.momentum();
+        w2dau2LVec = w2dau2.momentum();
+        w1dau1Id = leptonsId[idPair1.first];
+        w2dau1Id = leptonsId[idPair2.first];
+        w1Q = w1dau1Id > 0 ? -1 : 1;
+        w2Q = w2dau1Id > 0 ? -1 : 1;
+        switch (w1dau1Id) {
+        case 13: case -13: _mode1 = CH_MUON; break;
+        case 11: case -11: _mode1 = CH_ELECTRON; break;
+        }
+        switch (w2dau1Id) {
+        case 13: case -13: _mode2 = CH_MUON; break;
+        case 11: case -11: _mode2 = CH_ELECTRON; break;
+        }
+      }
+      const FourMomentum w1LVec = w1dau1LVec+w1dau2LVec;
+      const FourMomentum w2LVec = w2dau1LVec+w2dau2LVec;
+
+      // Combine b jets
+      double sumDm = 1e9;
+      FourMomentum b1LVec, b2LVec;
+      for (size_t i = 0, n = _bjets.size(); i < n; ++i) {
+        const Jet& bjet1 = _bjets[i];
+        const double mtop1 = (w1LVec+bjet1.momentum()).mass();
+        const double dmtop1 = std::abs(mtop1-_tMass);
+        for (size_t j=0; j<n; ++j) {
+          if (i == j) continue;
+          const Jet& bjet2 = _bjets[j];
+          const double mtop2 = (w2LVec+bjet2.momentum()).mass();
+          const double dmtop2 = std::abs(mtop2-_tMass);
+
+          if (sumDm <= dmtop1+dmtop2) continue;
+
+          sumDm = dmtop1+dmtop2;
+          b1LVec = bjet1.momentum();
+          b2LVec = bjet2.momentum();
+        }
+      }
+      if (sumDm >= 1e9) return; // Failed to make top, but this should not happen.
+
+      const FourMomentum t1LVec = w1LVec + b1LVec;
+      const FourMomentum t2LVec = w2LVec + b2LVec;
+
+      // Put all of them into candidate collection
+      _t1 = Particle(w1Q*6, t1LVec);
+      _b1 = Particle(w1Q*5, b1LVec);
+      _wDecays1.push_back(Particle(w1dau1Id, w1dau1LVec));
+      _wDecays1.push_back(Particle(-w1dau1Id+w1Q, w1dau2LVec));
+
+      _t2 = Particle(w2Q*6, t2LVec);
+      _b2 = Particle(w2Q*5, b2LVec);
+      _wDecays2.push_back(Particle(w2dau1Id, w2dau1LVec));
+      _wDecays2.push_back(Particle(-w2dau1Id+w2Q, w2dau2LVec));
+
+      _isValid = true;
+    }
+
+  }
+
+
+}
diff --git a/data/anainfo/CMS_2015_I1370682.info b/analyses/pluginCMS/CMS_2015_I1370682.info
rename from data/anainfo/CMS_2015_I1370682.info
rename to analyses/pluginCMS/CMS_2015_I1370682.info
diff --git a/data/plotinfo/CMS_2015_I1370682.plot b/analyses/pluginCMS/CMS_2015_I1370682.plot
rename from data/plotinfo/CMS_2015_I1370682.plot
rename to analyses/pluginCMS/CMS_2015_I1370682.plot
diff --git a/data/refdata/CMS_2015_I1370682.yoda b/analyses/pluginCMS/CMS_2015_I1370682.yoda
rename from data/refdata/CMS_2015_I1370682.yoda
rename to analyses/pluginCMS/CMS_2015_I1370682.yoda
diff --git a/analyses/pluginCMS/CMS_2015_I1370682_PARTON.cc b/analyses/pluginCMS/CMS_2015_I1370682_PARTON.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2015_I1370682_PARTON.cc
@@ -0,0 +1,111 @@
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Projections/VetoedFinalState.hh"
+#include "Rivet/Projections/PartonicTops.hh"
+
+namespace Rivet {
+
+
+  class CMS_2015_I1370682_PARTON : public Analysis {
+  public:
+
+    DEFAULT_RIVET_ANALYSIS_CTOR(CMS_2015_I1370682_PARTON);
+
+
+    /// Book projections and histograms
+    void init() {
+      declare(PartonicTops(PartonicTops::E_MU, false), "LeptonicPartonTops");
+      declare(PartonicTops(PartonicTops::HADRONIC),    "HadronicPartonTops");
+
+      _hSL_topPt         = bookHisto1D("d15-x01-y01");
+      _hSL_topPtTtbarSys = bookHisto1D("d16-x01-y01");
+      _hSL_topY          = bookHisto1D("d17-x01-y01");
+      _hSL_ttbarDelPhi   = bookHisto1D("d18-x01-y01");
+      _hSL_topPtLead     = bookHisto1D("d19-x01-y01");
+      _hSL_topPtSubLead  = bookHisto1D("d20-x01-y01");
+      _hSL_ttbarPt       = bookHisto1D("d21-x01-y01");
+      _hSL_ttbarY        = bookHisto1D("d22-x01-y01");
+      _hSL_ttbarMass     = bookHisto1D("d23-x01-y01");
+
+      _hDL_topPt           = bookHisto1D("d24-x01-y01");
+      _hDL_topPtTtbarSys   = bookHisto1D("d25-x01-y01");
+      _hDL_topY            = bookHisto1D("d26-x01-y01");
+      _hDL_ttbarDelPhi     = bookHisto1D("d27-x01-y01");
+      _hDL_topPtLead       = bookHisto1D("d28-x01-y01");
+      _hDL_topPtSubLead    = bookHisto1D("d29-x01-y01");
+      _hDL_ttbarPt         = bookHisto1D("d30-x01-y01");
+      _hDL_ttbarY          = bookHisto1D("d31-x01-y01");
+      _hDL_ttbarMass       = bookHisto1D("d32-x01-y01");
+      }
+
+
+      void analyze(const Event& event) {
+
+        // Do the analysis only for the ttbar full leptonic or semileptonic channel, without tau decay
+        const Particles leptonicpartontops = apply<ParticleFinder>(event, "LeptonicPartonTops").particlesByPt();
+        const Particles hadronicpartontops = apply<ParticleFinder>(event, "HadronicPartonTops").particlesByPt();
+        const bool isSemilepton = (leptonicpartontops.size() == 1 and hadronicpartontops.size() == 1);
+        if (leptonicpartontops.size() != 2) vetoEvent; //< if neither semileptonic nor dileptonic, veto
+
+        // Parton level at full phase space
+        // Fill top quarks defined in the parton level, full phase space
+        const FourMomentum t1P4 = leptonicpartontops[0];
+        const FourMomentum t2P4 = isSemilepton ? hadronicpartontops[0] : leptonicpartontops[1];
+        const double t1Pt = t1P4.pT(), t2Pt = t2P4.pT();
+        const FourMomentum ttbarP4 = t1P4 + t2P4;
+        const FourMomentum t1P4AtCM = LorentzTransform::mkFrameTransformFromBeta(ttbarP4.betaVec()).transform(t1P4);
+        const double dPhi = deltaPhi(t1P4.phi(), t2P4.phi());
+
+        const double weight = event.weight();
+        if (isSemilepton) {
+          _hSL_topPt->fill(t1Pt, weight);
+          _hSL_topPt->fill(t2Pt, weight);
+          _hSL_topPtTtbarSys->fill(t1P4AtCM.pT(), weight);
+          _hSL_topY->fill(t1P4.rapidity(), weight);
+          _hSL_topY->fill(t2P4.rapidity(), weight);
+          _hSL_ttbarDelPhi->fill(dPhi, weight);
+          _hSL_topPtLead->fill(std::max(t1Pt, t2Pt), weight);
+          _hSL_topPtSubLead->fill(std::min(t1Pt, t2Pt), weight);
+          _hSL_ttbarPt->fill(ttbarP4.pT(), weight);
+          _hSL_ttbarY->fill(ttbarP4.rapidity(), weight);
+          _hSL_ttbarMass->fill(ttbarP4.mass(), weight);
+        } else { // if (isDilepton) {
+          _hDL_topPt->fill(t1Pt, weight);
+          _hDL_topPt->fill(t2Pt, weight);
+          _hDL_topPtTtbarSys->fill(t1P4AtCM.pT(), weight);
+          _hDL_topY->fill(t1P4.rapidity(), weight);
+          _hDL_topY->fill(t2P4.rapidity(), weight);
+          _hDL_ttbarDelPhi->fill(dPhi, weight);
+          _hDL_topPtLead->fill(std::max(t1Pt, t2Pt), weight);
+          _hDL_topPtSubLead->fill(std::min(t1Pt, t2Pt), weight);
+          _hDL_ttbarPt->fill(ttbarP4.pT(), weight);
+          _hDL_ttbarY->fill(ttbarP4.rapidity(), weight);
+          _hDL_ttbarMass->fill(ttbarP4.mass(), weight);
+        }
+      }
+
+
+      void finalize() {
+        normalize({_hSL_topPt, _hSL_topPtTtbarSys, _hSL_topY, _hSL_ttbarDelPhi, _hSL_topPtLead,
+              _hSL_topPtSubLead, _hSL_ttbarPt, _hSL_ttbarY, _hSL_ttbarMass});
+        normalize({_hDL_topPt, _hDL_topPtTtbarSys, _hDL_topY, _hDL_ttbarDelPhi, _hDL_topPtLead,
+              _hDL_topPtSubLead, _hDL_ttbarPt, _hDL_ttbarY, _hDL_ttbarMass});
+      }
+
+
+  private:
+
+    /// @name Histograms
+    //@{
+    Histo1DPtr _hSL_topPt, _hSL_topPtTtbarSys, _hSL_topY, _hSL_ttbarDelPhi, _hSL_topPtLead,
+      _hSL_topPtSubLead, _hSL_ttbarPt, _hSL_ttbarY, _hSL_ttbarMass;
+    Histo1DPtr _hDL_topPt, _hDL_topPtTtbarSys, _hDL_topY, _hDL_ttbarDelPhi, _hDL_topPtLead,
+      _hDL_topPtSubLead, _hDL_ttbarPt, _hDL_ttbarY, _hDL_ttbarMass;
+    //@}
+
+  };
+
+
+  DECLARE_RIVET_PLUGIN(CMS_2015_I1370682_PARTON);
+
+}
diff --git a/analyses/pluginCMS/CMS_2015_I1370682_PARTON.info b/analyses/pluginCMS/CMS_2015_I1370682_PARTON.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2015_I1370682_PARTON.info
@@ -0,0 +1,40 @@
+Name: CMS_2015_I1370682_PARTON
+Year: 2015
+Summary: Parton-level differential top-quark pair production cross-sections in $pp$ collisions at $\sqrt{s} = 8\,\TeV$
+Experiment: CMS
+Collider: LHC
+InspireID: 1370682
+Status: VALIDATED
+Authors:
+ - Jungwan John Goh <Junghwan.Goh@cern.ch>
+ - Markus Seidel <markus.seidel@cern.ch>
+References:
+ - Eur.Phys.J. C75 (2015) 542
+RunInfo:
+  $t\bar{t}$ events at $\sqrt{s}= 8\,\TeV$.
+  Top quarks with physical momenta must be present in the event record.
+Luminosity: 19.7/fb
+Beams: [p+, p+]
+Energies: [8000]
+Description:
+  'The normalized parton level differential cross section for top quark pair production
+  is measured in $pp$ collisions at a centre-of-mass energy of 8\,\TeV.'
+BibKey: Khachatryan:2015oqa
+BibTeX: '@article{Khachatryan:2015oqa,
+      author         = "Khachatryan, Vardan and others",
+      title          = "{Measurement of the differential cross section for top
+                        quark pair production in $pp$ collisions at $\sqrt{s} =
+                        8\,\text{TeV} $}",
+      collaboration  = "CMS",
+      journal        = "Eur. Phys. J.",
+      volume         = "C75",
+      year           = "2015",
+      number         = "11",
+      pages          = "542",
+      doi            = "10.1140/epjc/s10052-015-3709-x",
+      eprint         = "1505.04480",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CMS-TOP-12-028, CERN-PH-EP-2015-117",
+      SLACcitation   = "%%CITATION = ARXIV:1505.04480;%%"
+}'
diff --git a/analyses/pluginCMS/CMS_2015_I1370682_PARTON.plot b/analyses/pluginCMS/CMS_2015_I1370682_PARTON.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2015_I1370682_PARTON.plot
@@ -0,0 +1,161 @@
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d15-x01-y01
+Title=SL_topPt
+XLabel=$p_{T}^{t} [GeV]$
+YLabel=$1\sigma d\sigma/dp_{T}^{t} [GeV^{-1}]$
+LogY=0
+YMin=0
+YMax=8e-3
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d16-x01-y01
+Title=SL_topPtTtbarSys
+XLabel=$p_{T}^{t*} [GeV]$
+YLabel=$1\sigma d\sigma/dp_{T}^{t*} [GeV^{-1}]$
+LogY=0
+YMin=0
+YMax=9e-3
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d17-x01-y01
+Title=SL_topY
+XLabel=$y_t$
+YLabel=$1\sigma d\sigma/dy_t$
+LogY=0
+YMin=0
+YMax=0.4
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d18-x01-y01
+Title=SL_ttbarDelPhi
+XLabel=$\delta\phi(t,\bar{t}) [rad]$
+YLabel=$1\sigma d\sigma/d\delta\phi(t,\bar{t}) [rad^{-1}]$
+LogY=0
+YMin=0
+YMax=3
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d19-x01-y01
+Title=SL_topPtLead
+XLabel=$p_{T}^{t1} [GeV]$
+YLabel=$1\sigma d\sigma/dp_{T}^{t1} [GeV^{-1}]$
+LogY=0
+YMin=0
+YMax=9e-3
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d20-x01-y01
+Title=SL_topPtSubLead
+XLabel=$p_{T}^{t2} [GeV]$
+YLabel=$1\sigma d\sigma/dp_{T}^{t2} [GeV^{-1}]$
+LogY=0
+YMin=0
+YMax=9e-3
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d21-x01-y01
+Title=SL_ttbarPt
+XLabel=$p_{T}^{t\bar{t}} [GeV]$
+YLabel=$1\sigma d\sigma/dp_{T}^{t\bar{t}} [GeV^{-1}]$
+LogY=0
+YMin=0
+YMax=2e-2
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d22-x01-y01
+Title=SL_ttbarY
+XLabel=$y_{t\bar{t}}$
+YLabel=$1\sigma d\sigma/y_{t\bar{t}}$
+LogY=0
+YMin=0
+YMax=0.5
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d23-x01-y01
+Title=SL_ttbarMass
+XLabel=$m_{t\bar{t}} [GeV]$
+YLabel=$1\sigma d\sigma/dm_{t\bar{t}} [GeV^{-1}]$
+LogY=1
+YMin=1e-6
+YMax=3e-2
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d24-x01-y01
+Title=DL_topPt
+XLabel=$p_{T}^{t} [GeV]$
+YLabel=$1\sigma d\sigma/dp_{T}^{t} [GeV^{-1}]$
+LogY=0
+YMin=0
+YMax=8e-3
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d25-x01-y01
+Title=DL_topPtTtbarSys
+XLabel=$p_{T}^{t*} [GeV]$
+YLabel=$1\sigma d\sigma/dp_{T}^{t*} [GeV^{-1}]$
+LogY=0
+YMin=0
+YMax=1e-2
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d26-x01-y01
+Title=DL_topY
+XLabel=$y_t$
+YLabel=$1\sigma d\sigma/dy)t$
+LogY=0
+YMin=0
+YMax=0.4
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d27-x01-y01
+Title=DL_ttbarDelPhi
+XLabel=$\Delta\phi(t,\bar{t}) [rad]$
+YLabel=$1\sigma d\sigma/d\Delta\phi(t,\bar{t}) [rad^{-1}]$
+LogY=0
+YMin=0
+YMax=3
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d28-x01-y01
+Title=DL_topPtLead
+XLabel=$p_{T}^{t1} [GeV]$
+YLabel=$1\sigma d\sigma/dp_{T}^{t1} [GeV^{-1}]$
+LogY=0
+YMin=0
+YMax=1e-2
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d29-x01-y01
+Title=DL_topPtSubLead
+XLabel=$p_{T}^{t2} [GeV]$
+YLabel=$1\sigma d\sigma/dp_{t2}^{l} [GeV^{-1}]$
+LogY=0
+YMin=0
+YMax=1e-2
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d30-x01-y01
+Title=DL_ttbarPt
+XLabel=$p_{T}^{t\bar{t}} [GeV]$
+YLabel=$1\sigma d\sigma/dp_{T}^{t\bar{t}} [GeV^{-1}]$
+LogY=0
+YMin=0
+YMax=2e-2
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d31-x01-y01
+Title=DL_ttbarY
+XLabel=$y_{t\bar{t}}$
+YLabel=$1\sigma d\sigma/dy_{t\bar{t}}$
+LogY=0
+YMin=0
+YMax=0.9
+#END PLOT
+
+# BEGIN PLOT /CMS_2015_I1370682_PARTON/d32-x01-y01
+Title=DL_ttbarMass
+XLabel=$m_{t\bar{t}} [GeV]$
+YLabel=$1\sigma d\sigma/dm_{t\bar{t}} [GeV^{-1}]$
+LogY=1
+YMin=5e-6
+YMax=4e-2
+#END PLOT
diff --git a/analyses/pluginCMS/CMS_2015_I1370682_PARTON.yoda b/analyses/pluginCMS/CMS_2015_I1370682_PARTON.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2015_I1370682_PARTON.yoda
@@ -0,0 +1,490 @@
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d15-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d15-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+30.0	30.0	30.0			0.00414	1.5947629917953328E-4	1.5947629917953328E-4
+80.0	20.0	20.0			0.00669	1.4036082074425185E-4	1.4036082074425185E-4
+125.0	25.0	25.0			0.00496	1.5848343762046556E-4	1.5848343762046556E-4
+175.0	25.0	25.0			0.00266	9.924338768905463E-5	9.924338768905463E-5
+230.0	30.0	30.0			0.00106	3.756660751252367E-5	3.756660751252367E-5
+290.0	30.0	30.0			3.99E-4	2.4077560092334935E-5	2.4077560092334935E-5
+360.0	40.0	40.0			1.3E-4	1.0568429400814484E-5	1.0568429400814484E-5
+450.0	50.0	50.0			3.7E-5	4.041088962148693E-6	4.041088962148693E-6
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d15-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d15-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+26.25	0.0	0.0			0.00414	1.5947629917953328E-4	1.5947629917953328E-4
+88.75	0.0	0.0			0.00669	1.4036082074425185E-4	1.4036082074425185E-4
+126.25	0.0	0.0			0.00496	1.5848343762046556E-4	1.5848343762046556E-4
+173.75	0.0	0.0			0.00266	9.924338768905463E-5	9.924338768905463E-5
+228.75	0.0	0.0			0.00106	3.756660751252367E-5	3.756660751252367E-5
+286.25	0.0	0.0			3.99E-4	2.4077560092334935E-5	2.4077560092334935E-5
+356.25	0.0	0.0			1.3E-4	1.0568429400814484E-5	1.0568429400814484E-5
+446.25	0.0	0.0			3.7E-5	4.041088962148693E-6	4.041088962148693E-6
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d16-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d16-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+30.0	30.0	30.0			0.00444	2.08806130178211E-4	2.08806130178211E-4
+80.0	20.0	20.0			0.00703	1.507415337589478E-4	1.507415337589478E-4
+125.0	25.0	25.0			0.00493	1.5821406385021526E-4	1.5821406385021526E-4
+175.0	25.0	25.0			0.00244	8.91971412097944E-5	8.91971412097944E-5
+230.0	30.0	30.0			9.0E-4	3.9951595712812274E-5	3.9951595712812274E-5
+290.0	30.0	30.0			3.21E-4	1.722614292289484E-5	1.722614292289484E-5
+360.0	40.0	40.0			9.4E-5	7.3154972489913494E-6	7.3154972489913494E-6
+450.0	50.0	50.0			2.5E-5	3.331080905652098E-6	3.331080905652098E-6
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d16-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d16-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+26.25	0.0	0.0			0.00444	2.08806130178211E-4	2.08806130178211E-4
+63.75	0.0	0.0			0.00703	1.507415337589478E-4	1.507415337589478E-4
+126.25	0.0	0.0			0.00493	1.5821406385021526E-4	1.5821406385021526E-4
+173.75	0.0	0.0			0.00244	8.91971412097944E-5	8.91971412097944E-5
+226.25	0.0	0.0			9.0E-4	3.9951595712812274E-5	3.9951595712812274E-5
+286.25	0.0	0.0			3.21E-4	1.722614292289484E-5	1.722614292289484E-5
+356.25	0.0	0.0			9.4E-5	7.3154972489913494E-6	7.3154972489913494E-6
+443.75	0.0	0.0			2.5E-5	3.331080905652098E-6	3.331080905652098E-6
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d17-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d17-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-2.05	0.4500000000000002	0.44999999999999973			0.0736	0.0033421101118903907	0.0033421101118903907
+-1.4	0.20000000000000018	0.19999999999999996			0.175	0.005033974572840033	0.005033974572840033
+-1.0	0.19999999999999996	0.19999999999999996			0.261	0.00854180894190452	0.00854180894190452
+-0.6000000000000001	0.19999999999999996	0.20000000000000007			0.3	0.0054165117926577066	0.0054165117926577066
+-0.2	0.2	0.2			0.333	0.006440256206083731	0.006440256206083731
+0.2	0.2	0.2			0.331	0.006680007485025746	0.006680007485025746
+0.6000000000000001	0.20000000000000007	0.19999999999999996			0.3	0.006522829140794661	0.006522829140794661
+1.0	0.19999999999999996	0.19999999999999996			0.247	0.008205035039535177	0.008205035039535177
+1.4	0.19999999999999996	0.20000000000000018			0.188	0.004001962018810274	0.004001962018810274
+2.05	0.44999999999999973	0.4500000000000002			0.0777	0.003207319753314284	0.003207319753314284
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d17-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d17-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-2.01	0.0	0.0			0.0736	0.0033421101118903907	0.0033421101118903907
+-1.39	0.0	0.0			0.175	0.005033974572840033	0.005033974572840033
+-1.01	0.0	0.0			0.261	0.00854180894190452	0.00854180894190452
+-0.61	0.0	0.0			0.3	0.0054165117926577066	0.0054165117926577066
+-0.24	0.0	0.0			0.333	0.006440256206083731	0.006440256206083731
+0.24	0.0	0.0			0.331	0.006680007485025746	0.006680007485025746
+0.61	0.0	0.0			0.3	0.006522829140794661	0.006522829140794661
+1.01	0.0	0.0			0.247	0.008205035039535177	0.008205035039535177
+1.41	0.0	0.0			0.188	0.004001962018810274	0.004001962018810274
+2.01	0.0	0.0			0.0777	0.003207319753314284	0.003207319753314284
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d18-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d18-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+1.0	1.0	1.0			0.0683	0.004993766113866368	0.004993766113866368
+2.375	0.375	0.375			0.322	0.012897457113710438	0.012897457113710438
+2.875	0.125	0.125			1.13	0.03945795230368652	0.03945795230368652
+3.075	0.07500000000000018	0.07499999999999973			2.27	0.1529902284461331	0.1529902284461331
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d18-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d18-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+1.26	0.0	0.0			0.0683	0.004993766113866368	0.004993766113866368
+2.44	0.0	0.0			0.322	0.012897457113710438	0.012897457113710438
+2.89	0.0	0.0			1.13	0.03945795230368652	0.03945795230368652
+3.14	0.0	0.0			2.27	0.1529902284461331	0.1529902284461331
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d19-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d19-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+30.0	30.0	30.0			0.00261	1.416035310294203E-4	1.416035310294203E-4
+80.0	20.0	20.0			0.00639	1.7906657979645447E-4	1.7906657979645447E-4
+125.0	25.0	25.0			0.00556	1.9895537188022844E-4	1.9895537188022844E-4
+175.0	25.0	25.0			0.00336	1.3213860147587457E-4	1.3213860147587457E-4
+230.0	30.0	30.0			0.00143	5.5618881685988625E-5	5.5618881685988625E-5
+290.0	30.0	30.0			5.56E-4	3.8011840260634576E-5	3.8011840260634576E-5
+360.0	40.0	40.0			1.87E-4	1.637311515869842E-5	1.637311515869842E-5
+450.0	50.0	50.0			5.6E-5	6.780980755023568E-6	6.780980755023568E-6
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d19-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d19-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+31.25	0.0	0.0			0.00261	1.416035310294203E-4	1.416035310294203E-4
+76.25	0.0	0.0			0.00639	1.7906657979645447E-4	1.7906657979645447E-4
+126.25	0.0	0.0			0.00556	1.9895537188022844E-4	1.9895537188022844E-4
+173.75	0.0	0.0			0.00336	1.3213860147587457E-4	1.3213860147587457E-4
+228.75	0.0	0.0			0.00143	5.5618881685988625E-5	5.5618881685988625E-5
+286.25	0.0	0.0			5.56E-4	3.8011840260634576E-5	3.8011840260634576E-5
+356.25	0.0	0.0			1.87E-4	1.637311515869842E-5	1.637311515869842E-5
+446.25	0.0	0.0			5.6E-5	6.780980755023568E-6	6.780980755023568E-6
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d20-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d20-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+30.0	30.0	30.0			0.00564	1.9812846842389914E-4	1.9812846842389914E-4
+80.0	20.0	20.0			0.00697	1.8386951895297927E-4	1.8386951895297927E-4
+125.0	25.0	25.0			0.00439	1.3713165207201436E-4	1.3713165207201436E-4
+175.0	25.0	25.0			0.00197	7.649222182679753E-5	7.649222182679753E-5
+230.0	30.0	30.0			6.93E-4	2.9980827206733305E-5	2.9980827206733305E-5
+290.0	30.0	30.0			2.43E-4	1.4576834361410573E-5	1.4576834361410573E-5
+360.0	40.0	40.0			7.5E-5	6.733141911470454E-6	6.733141911470454E-6
+450.0	50.0	50.0			1.9E-5	3.0267143902258106E-6	3.0267143902258106E-6
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d20-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d20-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+23.75	0.0	0.0			0.00564	1.9812846842389914E-4	1.9812846842389914E-4
+83.75	0.0	0.0			0.00697	1.8386951895297927E-4	1.8386951895297927E-4
+123.75	0.0	0.0			0.00439	1.3713165207201436E-4	1.3713165207201436E-4
+173.75	0.0	0.0			0.00197	7.649222182679753E-5	7.649222182679753E-5
+228.75	0.0	0.0			6.93E-4	2.9980827206733305E-5	2.9980827206733305E-5
+286.75	0.0	0.0			2.43E-4	1.4576834361410573E-5	1.4576834361410573E-5
+356.25	0.0	0.0			7.5E-5	6.733141911470454E-6	6.733141911470454E-6
+443.75	0.0	0.0			1.9E-5	3.0267143902258106E-6	3.0267143902258106E-6
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d21-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d21-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+10.0	10.0	10.0			0.0132	0.0010846492520626195	0.0010846492520626195
+32.5	12.5	12.5			0.0118	4.6598819727542454E-4	4.6598819727542454E-4
+60.0	15.0	15.0			0.0064	3.6935890404862315E-4	3.6935890404862315E-4
+97.5	22.5	22.5			0.00284	1.9878923512101955E-4	1.9878923512101955E-4
+155.0	35.0	35.0			0.00107	6.633317420416424E-5	6.633317420416424E-5
+245.0	55.0	55.0			3.06E-4	3.928282067265536E-5	3.928282067265536E-5
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d21-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d21-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+4.5	0.0	0.0			0.0132	0.0010846492520626195	0.0010846492520626195
+32.5	0.0	0.0			0.0118	4.6598819727542454E-4	4.6598819727542454E-4
+58.5	0.0	0.0			0.0064	3.6935890404862315E-4	3.6935890404862315E-4
+95.5	0.0	0.0			0.00284	1.9878923512101955E-4	1.9878923512101955E-4
+152.5	0.0	0.0			0.00107	6.633317420416424E-5	6.633317420416424E-5
+237.5	0.0	0.0			3.06E-4	3.928282067265536E-5	3.928282067265536E-5
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d22-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d22-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-1.9	0.6000000000000001	0.5999999999999999			0.0607	0.002756700926832652	0.002756700926832652
+-1.1	0.19999999999999996	0.20000000000000007			0.22	0.006573621528503143	0.006573621528503143
+-0.75	0.15000000000000002	0.15000000000000002			0.327	0.011168545115636145	0.011168545115636145
+-0.44999999999999996	0.15000000000000002	0.14999999999999997			0.373	0.008660577347960123	0.008660577347960123
+-0.15	0.15	0.15			0.427	0.009595754269467304	0.009595754269467304
+0.15	0.15	0.15			0.413	0.010104637549165236	0.010104637549165236
+0.44999999999999996	0.14999999999999997	0.15000000000000002			0.374	0.009044694577485742	0.009044694577485742
+0.75	0.15000000000000002	0.15000000000000002			0.317	0.007775506414375851	0.007775506414375851
+1.1	0.20000000000000007	0.19999999999999996			0.23	0.006500000000000001	0.006500000000000001
+1.9	0.5999999999999999	0.6000000000000001			0.0641	0.0032464442086689244	0.0032464442086689244
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d22-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d22-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-1.82	0.0	0.0			0.0607	0.002756700926832652	0.002756700926832652
+-1.09	0.0	0.0			0.22	0.006573621528503143	0.006573621528503143
+-0.76	0.0	0.0			0.327	0.011168545115636145	0.011168545115636145
+-0.46	0.0	0.0			0.373	0.008660577347960123	0.008660577347960123
+-0.14	0.0	0.0			0.427	0.009595754269467304	0.009595754269467304
+0.14	0.0	0.0			0.413	0.010104637549165236	0.010104637549165236
+0.47	0.0	0.0			0.374	0.009044694577485742	0.009044694577485742
+0.76	0.0	0.0			0.317	0.007775506414375851	0.007775506414375851
+1.09	0.0	0.0			0.23	0.006500000000000001	0.006500000000000001
+1.82	0.0	0.0			0.0641	0.0032464442086689244	0.0032464442086689244
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d23-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d23-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+372.5	27.5	27.5			0.00469	3.4957833170835975E-4	3.4957833170835975E-4
+435.0	35.0	35.0			0.0043	1.5416406844657416E-4	1.5416406844657416E-4
+510.0	40.0	40.0			0.00267	1.7164917710260077E-4	1.7164917710260077E-4
+600.0	50.0	50.0			0.00117	8.949748599821114E-5	8.949748599821114E-5
+725.0	75.0	75.0			4.66E-4	2.291244203484212E-5	2.291244203484212E-5
+950.0	150.0	150.0			1.14E-4	1.1313571496216392E-5	1.1313571496216392E-5
+1350.0	250.0	250.0			1.1E-5	1.395022938879501E-6	1.395022938879501E-6
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d23-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d23-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+362.5	0.0	0.0			0.00469	3.4957833170835975E-4	3.4957833170835975E-4
+435.5	0.0	0.0			0.0043	1.5416406844657416E-4	1.5416406844657416E-4
+508.5	0.0	0.0			0.00267	1.7164917710260077E-4	1.7164917710260077E-4
+595.5	0.0	0.0			0.00117	8.949748599821114E-5	8.949748599821114E-5
+717.5	0.0	0.0			4.66E-4	2.291244203484212E-5	2.291244203484212E-5
+927.5	0.0	0.0			1.14E-4	1.1313571496216392E-5	1.1313571496216392E-5
+1328.5	0.0	0.0			1.1E-5	1.395022938879501E-6	1.395022938879501E-6
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d24-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d24-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+32.5	32.5	32.5			0.00433	1.093914073407962E-4	1.093914073407962E-4
+95.0	30.0	30.0			0.0064	1.088301888264465E-4	1.088301888264465E-4
+162.5	37.5	37.5			0.00308	7.192801957512801E-5	7.192801957512801E-5
+245.0	45.0	45.0			8.62E-4	3.311570624341265E-5	3.311570624341265E-5
+345.0	55.0	55.0			1.88E-4	1.472964697472414E-5	1.472964697472414E-5
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d24-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d24-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+28.75	0.0	0.0			0.00433	1.093914073407962E-4	1.093914073407962E-4
+101.25	0.0	0.0			0.0064	1.088301888264465E-4	1.088301888264465E-4
+161.25	0.0	0.0			0.00308	7.192801957512801E-5	7.192801957512801E-5
+238.75	0.0	0.0			8.62E-4	3.311570624341265E-5	3.311570624341265E-5
+336.25	0.0	0.0			1.88E-4	1.472964697472414E-5	1.472964697472414E-5
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d25-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d25-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+30.0	30.0	30.0			0.00445	1.3695254652615994E-4	1.3695254652615994E-4
+87.5	27.5	27.5			0.00689	1.748630607075148E-4	1.748630607075148E-4
+152.5	37.5	37.5			0.00341	8.758453059758897E-5	8.758453059758897E-5
+232.5	42.5	42.5			8.78E-4	5.1773062493926314E-5	5.1773062493926314E-5
+327.5	52.5	52.5			1.87E-4	1.2569232275680167E-5	1.2569232275680167E-5
+440.0	60.0	60.0			2.91E-5	3.4391859501922834E-6	3.4391859501922834E-6
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d25-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d25-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+26.25	0.0	0.0			0.00445	1.3695254652615994E-4	1.3695254652615994E-4
+93.75	0.0	0.0			0.00689	1.748630607075148E-4	1.748630607075148E-4
+151.25	0.0	0.0			0.00341	8.758453059758897E-5	8.758453059758897E-5
+226.25	0.0	0.0			8.78E-4	5.1773062493926314E-5	5.1773062493926314E-5
+318.75	0.0	0.0			1.87E-4	1.2569232275680167E-5	1.2569232275680167E-5
+428.75	0.0	0.0			2.91E-5	3.4391859501922834E-6	3.4391859501922834E-6
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d26-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d26-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-2.05	0.4500000000000002	0.44999999999999973			0.0763	0.00429424032862624	0.00429424032862624
+-1.3	0.30000000000000004	0.30000000000000004			0.197	0.00356202189774291	0.00356202189774291
+-0.75	0.25	0.25			0.282	0.005315185791672762	0.005315185791672762
+-0.25	0.25	0.25			0.335	0.0060545685230245765	0.0060545685230245765
+0.25	0.25	0.25			0.328	0.007194136501346079	0.007194136501346079
+0.75	0.25	0.25			0.285	0.004392413914921954	0.004392413914921954
+1.3	0.30000000000000004	0.30000000000000004			0.203	0.0031280025575437117	0.0031280025575437117
+2.05	0.44999999999999973	0.4500000000000002			0.074	0.004201809134170661	0.004201809134170661
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d26-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d26-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-2.01	0.0	0.0			0.0763	0.00429424032862624	0.00429424032862624
+-1.31	0.0	0.0			0.197	0.00356202189774291	0.00356202189774291
+-0.76	0.0	0.0			0.282	0.005315185791672762	0.005315185791672762
+-0.29	0.0	0.0			0.335	0.0060545685230245765	0.0060545685230245765
+0.29	0.0	0.0			0.328	0.007194136501346079	0.007194136501346079
+0.76	0.0	0.0			0.285	0.004392413914921954	0.004392413914921954
+1.31	0.0	0.0			0.203	0.0031280025575437117	0.0031280025575437117
+2.01	0.0	0.0			0.074	0.004201809134170661	0.004201809134170661
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d27-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d27-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.945	0.945	0.945			0.064	0.004836992867474584	0.004836992867474584
+2.33	0.44000000000000017	0.43999999999999995			0.296	0.016983465488527364	0.016983465488527364
+2.91	0.14000000000000012	0.13999999999999968			1.24	0.04139432328230527	0.04139432328230527
+3.0999999999999996	0.04999999999999982	0.050000000000000266			2.58	0.20578748747190634	0.20578748747190634
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d27-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d27-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+1.19	0.0	0.0			0.064	0.004836992867474584	0.004836992867474584
+2.44	0.0	0.0			0.296	0.016983465488527364	0.016983465488527364
+2.94	0.0	0.0			1.24	0.04139432328230527	0.04139432328230527
+3.09	0.0	0.0			2.58	0.20578748747190634	0.20578748747190634
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d28-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d28-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+37.5	37.5	37.5			0.00331	1.3177268305684603E-4	1.3177268305684603E-4
+102.5	27.5	27.5			0.00643	1.3786837926080077E-4	1.3786837926080077E-4
+165.0	35.0	35.0			0.00367	1.1573162921172414E-4	1.1573162921172414E-4
+245.0	45.0	45.0			0.00117	4.893608075847513E-5	4.893608075847513E-5
+345.0	55.0	55.0			2.61E-4	1.973910838918516E-5	1.973910838918516E-5
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d28-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d28-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+36.25	0.0	0.0			0.00331	1.3177268305684603E-4	1.3177268305684603E-4
+111.25	0.0	0.0			0.00643	1.3786837926080077E-4	1.3786837926080077E-4
+163.75	0.0	0.0			0.00367	1.1573162921172414E-4	1.1573162921172414E-4
+241.25	0.0	0.0			0.00117	4.893608075847513E-5	4.893608075847513E-5
+336.25	0.0	0.0			2.61E-4	1.973910838918516E-5	1.973910838918516E-5
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d29-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d29-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+27.5	27.5	27.5			0.00538	1.4950331100012466E-4	1.4950331100012466E-4
+87.5	32.5	32.5			0.00674	1.4258895469144867E-4	1.4258895469144867E-4
+160.0	40.0	40.0			0.0025	6.874794542384522E-5	6.874794542384522E-5
+245.0	45.0	45.0			5.58E-4	2.8853076092507017E-5	2.8853076092507017E-5
+345.0	55.0	55.0			1.14E-4	1.3089954163403324E-5	1.3089954163403324E-5
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d29-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d29-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+23.75	0.0	0.0			0.00538	1.4950331100012466E-4	1.4950331100012466E-4
+91.25	0.0	0.0			0.00674	1.4258895469144867E-4	1.4258895469144867E-4
+156.25	0.0	0.0			0.0025	6.874794542384522E-5	6.874794542384522E-5
+238.75	0.0	0.0			5.58E-4	2.8853076092507017E-5	2.8853076092507017E-5
+338.75	0.0	0.0			1.14E-4	1.3089954163403324E-5	1.3089954163403324E-5
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d30-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d30-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+15.0	15.0	15.0			0.0143	8.713030471655658E-4	8.713030471655658E-4
+55.0	25.0	25.0			0.0069	3.318949984558369E-4	3.318949984558369E-4
+125.0	45.0	45.0			0.00191	1.0509904852090717E-4	1.0509904852090717E-4
+235.0	65.0	65.0			3.47E-4	1.7710855428239482E-5	1.7710855428239482E-5
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d30-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d30-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+4.5	0.0	0.0			0.0143	8.713030471655658E-4	8.713030471655658E-4
+51.5	0.0	0.0			0.0069	3.318949984558369E-4	3.318949984558369E-4
+118.5	0.0	0.0			0.00191	1.0509904852090717E-4	1.0509904852090717E-4
+223.5	0.0	0.0			3.47E-4	1.7710855428239482E-5	1.7710855428239482E-5
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d31-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d31-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-2.0	0.5	0.5			0.0471	0.0036496849179072977	0.0036496849179072977
+-1.25	0.25	0.25			0.182	0.004257757625793183	0.004257757625793183
+-0.75	0.25	0.25			0.309	0.006350070865746303	0.006350070865746303
+-0.25	0.25	0.25			0.418	0.00891574450060117	0.00891574450060117
+0.25	0.25	0.25			0.409	0.007114183017044192	0.007114183017044192
+0.75	0.25	0.25			0.315	0.00616950565280558	0.00616950565280558
+1.25	0.25	0.25			0.179	0.004645826083701369	0.004645826083701369
+2.0	0.5	0.5			0.0459	0.0033032408328791283	0.0033032408328791283
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d31-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d31-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-1.93	0.0	0.0			0.0471	0.0036496849179072977	0.0036496849179072977
+-1.24	0.0	0.0			0.182	0.004257757625793183	0.004257757625793183
+-0.76	0.0	0.0			0.309	0.006350070865746303	0.006350070865746303
+-0.31	0.0	0.0			0.418	0.00891574450060117	0.00891574450060117
+0.29	0.0	0.0			0.409	0.007114183017044192	0.007114183017044192
+0.76	0.0	0.0			0.315	0.00616950565280558	0.00616950565280558
+1.24	0.0	0.0			0.179	0.004645826083701369	0.004645826083701369
+1.93	0.0	0.0			0.0459	0.0033032408328791283	0.0033032408328791283
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d32-x01-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d32-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+360.0	20.0	20.0			0.00414	3.7697745290666916E-4	3.7697745290666916E-4
+425.0	45.0	45.0			0.0045	2.5054917680966346E-4	2.5054917680966346E-4
+545.0	75.0	75.0			0.00195	6.641987654309514E-5	6.641987654309514E-5
+720.0	100.0	100.0			5.25E-4	2.2239604313026796E-5	2.2239604313026796E-5
+960.0	140.0	140.0			1.0E-4	8.193051934413695E-6	8.193051934413695E-6
+1350.0	250.0	250.0			7.28E-6	2.303258561256204E-6	2.303258561256204E-6
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1370682_PARTON/d32-x02-y01
+Path=/REF/CMS_2015_I1370682_PARTON/d32-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+354.5	0.0	0.0			0.00414	3.7697745290666916E-4	3.7697745290666916E-4
+428.5	0.0	0.0			0.0045	2.5054917680966346E-4	2.5054917680966346E-4
+537.5	0.0	0.0			0.00195	6.641987654309514E-5	6.641987654309514E-5
+705.5	0.0	0.0			5.25E-4	2.2239604313026796E-5	2.2239604313026796E-5
+940.5	0.0	0.0			1.0E-4	8.193051934413695E-6	8.193051934413695E-6
+1328.5	0.0	0.0			7.28E-6	2.303258561256204E-6	2.303258561256204E-6
+# END YODA_SCATTER2D
diff --git a/analyses/pluginCMS/CMS_2015_I1380605.cc b/analyses/pluginCMS/CMS_2015_I1380605.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2015_I1380605.cc
@@ -0,0 +1,100 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+
+namespace Rivet {
+
+
+  /// Per-event yield of the highest transverse momentum charged particle and charged-particle jet
+  class CMS_2015_I1380605 : public Analysis {
+  public:
+
+    DEFAULT_RIVET_ANALYSIS_CTOR(CMS_2015_I1380605);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+      const ChargedFinalState cfs(-7., 7., 0.0*GeV);
+      declare(cfs, "CFS");
+      declare(FastJets(cfs, FastJets::ANTIKT, 0.5), "Jets");
+
+      _h_tracks = bookHisto1D(1, 1, 1);
+      _h_jets = bookHisto1D(2, 1, 1);
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      // Veto events without forward activity on both sides
+      const ChargedFinalState& cfs = apply<ChargedFinalState>(event, "CFS");
+      const size_t count_plus  = cfs.particles(Cuts::eta > 5.3  && Cuts::eta < 6.5).size();
+      const size_t count_minus = cfs.particles(Cuts::eta < -5.3 && Cuts::eta > -6.5).size();
+      if (!(count_plus > 0 || count_minus > 0)) vetoEvent; //< @todo Should this really also veto the jet analysis?
+      /// @warning Needs migration to an AO Counter
+      /// @note This isn't the number of tracks, it's the sum of event weights passing the veto
+      const double weight = event.weight();
+      _ntracks += weight;
+
+      // Do track analysis here
+      // Find pttrackmax
+      double track_ptmax = 0;
+      for (const Particle& p : cfs.particles(Cuts::abseta < 2.4)) track_ptmax = max(track_ptmax, p.pT());
+      // Fill track analysis histograms
+      for (size_t i = 0; i < _h_tracks->numBins(); ++i) {
+        const double binlimitlow_t = _h_tracks->bin(i).xMin();
+        const double weightbw_t = weight * _h_tracks->bin(i).xWidth();
+        const double xbin_t = _h_tracks->bin(i).xMid();
+        if (track_ptmax > binlimitlow_t) _h_tracks -> fill(xbin_t, weightbw_t);
+      }
+
+      // Do jet analysis here
+      const Jets jetsdeta = apply<FastJets>(event,"Jets").jets(Cuts::pT > 1*GeV && Cuts::pT < 60*GeV && Cuts::abseta < 1.9);
+      // Find ptjetmax
+      double jet_ptmax = 0;
+      for (const Jet& j : jetsdeta) jet_ptmax = max(jet_ptmax, j.pT());
+      // Fill jet analysis histograms
+      for (size_t i = 0; i < _h_jets->numBins(); ++i) {
+        const double binlimitlow_j = _h_jets->bin(i).xMin();
+        const double weightbw_j = weight * _h_jets->bin(i).xWidth();
+        const double xbin_j = _h_jets->bin(i).xMid();
+        if (jet_ptmax > binlimitlow_j) _h_jets -> fill(xbin_j, weightbw_j);
+      }
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+      const double norm_t0 = _h_tracks->bin(7).height()/2.056170e-03;
+      const double norm_t1 = _h_tracks->bin(7).sumW()/2.056170e-03;
+      const double norm_j0 = _h_jets->bin(13).height()/3.575290e-03;
+      const double norm_j1 = _h_jets->bin(13).sumW()/3.575290e-03;
+      MSG_DEBUG("Norm track " << norm_t0 << " " << norm_t1);
+      MSG_DEBUG("Norm  jets " << norm_j0 << " " << norm_j1);
+      if (norm_t0 > 0 ) scale(_h_tracks, 1./ norm_t0);
+      if (norm_j0 > 0 ) scale(_h_jets, 1./ norm_j0);
+    }
+
+    //@}
+
+
+  private:
+
+    /// @name Histograms
+    //@{
+    Histo1DPtr _h_tracks, _h_jets;
+    double _ntracks = 0;
+    //@}
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(CMS_2015_I1380605);
+
+}
diff --git a/analyses/pluginCMS/CMS_2015_I1380605.info b/analyses/pluginCMS/CMS_2015_I1380605.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2015_I1380605.info
@@ -0,0 +1,38 @@
+Name: CMS_2015_I1380605
+Year: 2015
+Summary: Per-event yield of the highest transverse momentum charged particle and charged-particle jet
+Experiment: CMS
+Collider: LHC
+InspireID: 1380605
+Status: VALIDATED
+Authors:
+ - Anastasia Grebenyuk <Anastasia.Grebenyuk@cern.ch>
+ - Hannes Jung <hannes.jung@desy.de>
+References:
+ - arXiv:1507.00233
+RunInfo:
+   '$sqrt{s}=8$ TeV, minbias events, no \pT cut on partons'
+NumEvents: 1000000
+NeedCrossSection: no
+Beams: [p+, p+]
+Energies: [8000]
+Description:
+  'The per-event yield of the highest transverse momentum charged particle and
+  charged-particle jet, integrated
+   above a given $p_{T\;min}$  threshold starting at $p_{T\;min}=0.8$ and $1$~GeV,
+   respectively, is studied in $pp$ collisions at $\sqrt{s} = 8$~\TeV.
+   The particles and the jets are measured in the pseudorapidity ranges
+   $|\eta| < 2.4$ and $1.9$, respectively.'
+BibKey: Khachatryan:2015fia
+BibTeX: '@article{Khachatryan:2015fia,
+      author         = "Khachatryan, Vardan and others",
+      title          = "{Production of leading charged particles and leading
+                        charged-particle jets at small transverse momenta in $pp$
+                        collisions at $\sqrt{s}=8 TeV}",
+      collaboration  = "CMS",
+      year           = "2015",
+      eprint         = "1507.00233",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CMS-FSQ-12-032, CERN-PH-EP-2015-135",
+      SLACcitation   = "%%CITATION = ARXIV:1507.00233;%%",}'
diff --git a/analyses/pluginCMS/CMS_2015_I1380605.plot b/analyses/pluginCMS/CMS_2015_I1380605.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2015_I1380605.plot
@@ -0,0 +1,20 @@
+# BEGIN PLOT /CMS_2015_I1380605/d..
+XTwosidedTicks=1
+YTwosidedTicks=1
+LeftMargin=1.5
+LegendYPos=0.3
+LegendXPos=0.1
+LogX=1
+LogY=1
+# END PLOT
+
+# BEGIN PLOT /CMS_2015_I1380605/d01-x01-y01
+Title=Leading charged particles $|\eta| < 2.4$
+XLabel=$p_{T\; min}$ [GeV]
+YLabel=$r(p_{T\; min})$
+# END PLOT
+# BEGIN PLOT /CMS_2015_I1380605/d02-x01-y01
+Title=Leading charged-particle jets $|\eta| <1.9$
+XLabel=$p_{T\; min}$ [GeV]
+YLabel=$r(p_{T\; min})$
+# END PLOT
diff --git a/analyses/pluginCMS/CMS_2015_I1380605.yoda b/analyses/pluginCMS/CMS_2015_I1380605.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2015_I1380605.yoda
@@ -0,0 +1,42 @@
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1380605/d01-x01-y01
+Path=/REF/CMS_2015_I1380605/d01-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.030000e+00	2.300000e-01	2.300000e-01	8.387960e-01	6.038203e-02	6.038203e-02
+1.430000e+00	1.700000e-01	1.700000e-01	6.045260e-01	4.031435e-02	4.031435e-02
+1.950000e+00	3.500000e-01	3.500000e-01	4.620440e-01	3.044157e-02	3.044157e-02
+2.730000e+00	4.300000e-01	4.300000e-01	2.462970e-01	1.556719e-02	1.556719e-02
+3.830000e+00	6.700000e-01	6.700000e-01	1.057710e-01	6.356122e-03	6.356122e-03
+5.400000e+00	9.000000e-01	9.000000e-01	3.087450e-02	1.711869e-03	1.711869e-03
+7.650000e+00	1.350000e+00	1.350000e+00	8.345610e-03	3.865833e-04	3.865833e-04
+1.050000e+01	1.500000e+00	1.500000e+00	2.056170e-03	0.000000e+00	0.000000e+00
+1.500000e+01	3.000000e+00	3.000000e+00	6.370720e-04	1.752285e-05	1.752285e-05
+3.405950e+01	1.605950e+01	1.605950e+01	1.336290e-04	9.280844e-06	9.280844e-06
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1380605/d02-x01-y01
+Path=/REF/CMS_2015_I1380605/d02-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.115000e+00	1.150000e-01	1.150000e-01	7.302560e-01	4.686280e-02	4.686280e-02
+1.370000e+00	1.400000e-01	1.400000e-01	6.512490e-01	3.965072e-02	3.965072e-02
+1.680000e+00	1.700000e-01	1.700000e-01	5.673100e-01	3.206973e-02	3.206973e-02
+2.060000e+00	2.100000e-01	2.100000e-01	4.794400e-01	2.560907e-02	2.560907e-02
+2.525000e+00	2.550000e-01	2.550000e-01	3.886660e-01	1.880605e-02	1.880605e-02
+3.100000e+00	3.200000e-01	3.200000e-01	3.026440e-01	1.291979e-02	1.291979e-02
+3.805000e+00	3.850000e-01	3.850000e-01	2.207870e-01	7.269918e-03	7.269918e-03
+4.665000e+00	4.750000e-01	4.750000e-01	1.518440e-01	3.799370e-03	3.799370e-03
+5.725000e+00	5.850000e-01	5.850000e-01	9.622650e-02	1.519139e-03	1.519139e-03
+7.030000e+00	7.200000e-01	7.200000e-01	5.683970e-02	5.416910e-04	5.416910e-04
+8.630000e+00	8.800000e-01	8.800000e-01	3.039810e-02	1.680088e-04	1.680088e-04
+1.059000e+01	1.080000e+00	1.080000e+00	1.545100e-02	1.321269e-04	1.321269e-04
+1.299500e+01	1.325000e+00	1.325000e+00	7.489420e-03	4.179204e-05	4.179204e-05
+1.594500e+01	1.625000e+00	1.625000e+00	3.575290e-03	0.000000e+00	0.000000e+00
+1.956500e+01	1.995000e+00	1.995000e+00	1.590570e-03	1.089877e-05	1.089877e-05
+2.401000e+01	2.450000e+00	2.450000e+00	7.668890e-04	9.939553e-06	9.939553e-06
+2.946500e+01	3.005000e+00	3.005000e+00	3.309660e-04	6.595178e-06	6.595178e-06
+3.615500e+01	3.685000e+00	3.685000e+00	1.375140e-04	4.128208e-06	4.128208e-06
+# END YODA_SCATTER2D
+
diff --git a/src/Analyses/CMS_2015_I1384119.cc b/analyses/pluginCMS/CMS_2015_I1384119.cc
rename from src/Analyses/CMS_2015_I1384119.cc
rename to analyses/pluginCMS/CMS_2015_I1384119.cc
diff --git a/data/anainfo/CMS_2015_I1384119.info b/analyses/pluginCMS/CMS_2015_I1384119.info
rename from data/anainfo/CMS_2015_I1384119.info
rename to analyses/pluginCMS/CMS_2015_I1384119.info
diff --git a/data/plotinfo/CMS_2015_I1384119.plot b/analyses/pluginCMS/CMS_2015_I1384119.plot
rename from data/plotinfo/CMS_2015_I1384119.plot
rename to analyses/pluginCMS/CMS_2015_I1384119.plot
diff --git a/data/refdata/CMS_2015_I1384119.yoda b/analyses/pluginCMS/CMS_2015_I1384119.yoda
rename from data/refdata/CMS_2015_I1384119.yoda
rename to analyses/pluginCMS/CMS_2015_I1384119.yoda
diff --git a/src/Analyses/CMS_2015_I1385107.cc b/analyses/pluginCMS/CMS_2015_I1385107.cc
rename from src/Analyses/CMS_2015_I1385107.cc
rename to analyses/pluginCMS/CMS_2015_I1385107.cc
diff --git a/data/anainfo/CMS_2015_I1385107.info b/analyses/pluginCMS/CMS_2015_I1385107.info
rename from data/anainfo/CMS_2015_I1385107.info
rename to analyses/pluginCMS/CMS_2015_I1385107.info
diff --git a/data/plotinfo/CMS_2015_I1385107.plot b/analyses/pluginCMS/CMS_2015_I1385107.plot
rename from data/plotinfo/CMS_2015_I1385107.plot
rename to analyses/pluginCMS/CMS_2015_I1385107.plot
diff --git a/data/refdata/CMS_2015_I1385107.yoda b/analyses/pluginCMS/CMS_2015_I1385107.yoda
rename from data/refdata/CMS_2015_I1385107.yoda
rename to analyses/pluginCMS/CMS_2015_I1385107.yoda
diff --git a/src/Analyses/CMS_2015_I1397174.cc b/analyses/pluginCMS/CMS_2015_I1397174.cc
rename from src/Analyses/CMS_2015_I1397174.cc
rename to analyses/pluginCMS/CMS_2015_I1397174.cc
diff --git a/data/anainfo/CMS_2015_I1397174.info b/analyses/pluginCMS/CMS_2015_I1397174.info
rename from data/anainfo/CMS_2015_I1397174.info
rename to analyses/pluginCMS/CMS_2015_I1397174.info
--- a/data/anainfo/CMS_2015_I1397174.info
+++ b/analyses/pluginCMS/CMS_2015_I1397174.info
@@ -1,52 +1,52 @@
 Name: CMS_2015_I1397174
 Year: 2016
 Summary: Measurement of ttbar production with additional jet activity, including b quark jets, in the dilepton decay channel using pp collisions at sqrt(s)=8 TeV
 Experiment: CMS
 Collider: LHC
 InspireID: 1397174
 Status: VALIDATED
 Authors:
  - Javier Fernandez <Javier.Fernandez@cern.ch>
  - Jungwan John Goh <Junghwan.Goh@cern.ch>
  - Efe Yazgan <efe.yazgan@cern.ch>
  - Markus Seidel <markus.seidel@cern.ch>
  - James Keaveney <james.keaveney@vub.ac.be>
  - Elvire Bouvier <e.bouvier@cern.ch>
  - Benedikt Maier <benedikt.maier@cern.ch>
  - Andy Buckley <andy.buckley@cern.ch>
 References:
  - arXiv:1510.03072
 RunInfo:
   'ttbar events at $\sqrt{s}=8\;\TeV. Top quarks are expected in the event record to identify
    additional jets. Gap fractions require high statistics in a single run or custom merging of
    the YODA files.'
 Luminosity: 19.7/fb
 Beams: [p+, p+]
 Energies: [8000]
 Description:
-	'Jet multiplicity distributions in top quark pair ($t\bar{t}$) events are measured in $pp$
+    'Jet multiplicity distributions in top quark pair ($t\bar{t}$) events are measured in $pp$
      collisions at a centre-of-mass energy of 8\;\TeV with the CMS detector at the LHC, using
      a data set corresponding to an integrated luminosity of 19.7/fb. The measurement is
      performed in the dilepton decay channels $e^+e^-$, $\mu^+\mu^-$, and $e^\pm\mu^\mp$).
      The absolute and normalized differential cross-sections for $t\bar{t}$ production are
      measured as a function of jet multiplicity for different jet transverse momentum thresholds
      and the kinematic properties of the leading additional jets. The differential $t\bar{t}b$
      and $t\bar{t}b\bar{b}$ cross-sections are presented for the first time as a function of
      the kinematic properties of the leading additional $b$-jets. Furthermore, the fraction of
      events without additional jets above a threshold is measured as a function of the transverse
      momenta of the leading additional jets and the scalar sum of the transverse momenta of all
      additional jets.'
 BibKey: Khachatryan:2015mva
 BibTeX: '@article{Khachatryan:2015mva,
       author         = "Khachatryan, Vardan and others",
       title          = "{Measurement of $\mathrm{ t \bar{t} } $ production with
                         additional jet activity, including $b$ quark jets, in the
                         dilepton decay channel using $pp$ collisions at $\sqrt{s} = 8\;\TeV$}",
       collaboration  = "CMS",
       year           = "2015",
       eprint         = "1510.03072",
       archivePrefix  = "arXiv",
       primaryClass   = "hep-ex",
       reportNumber   = "CMS-TOP-12-041, CERN-PH-EP-2015-240",
       SLACcitation   = "%%CITATION = ARXIV:1510.03072;%%"
 }'
diff --git a/data/plotinfo/CMS_2015_I1397174.plot b/analyses/pluginCMS/CMS_2015_I1397174.plot
rename from data/plotinfo/CMS_2015_I1397174.plot
rename to analyses/pluginCMS/CMS_2015_I1397174.plot
diff --git a/data/refdata/CMS_2015_I1397174.yoda b/analyses/pluginCMS/CMS_2015_I1397174.yoda
rename from data/refdata/CMS_2015_I1397174.yoda
rename to analyses/pluginCMS/CMS_2015_I1397174.yoda
diff --git a/analyses/pluginCMS/CMS_2016_I1413748.cc b/analyses/pluginCMS/CMS_2016_I1413748.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1413748.cc
@@ -0,0 +1,328 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/IdentifiedFinalState.hh"
+#include "Rivet/Projections/PromptFinalState.hh"
+#include "Rivet/Projections/DressedLeptons.hh"
+#include "Rivet/Projections/PartonicTops.hh"
+
+namespace Rivet {
+
+
+  /// CMS 8 TeV dilepton channel ttbar spin correlations and polarisation analysis
+  class CMS_2016_I1413748 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(CMS_2016_I1413748);
+
+
+    /// Book histograms and initialise projections
+    void init() {
+
+      // Complete final state
+      FinalState fs(-MAXDOUBLE, MAXDOUBLE, 0*GeV);
+
+      // Projection for dressed electrons and muons
+      IdentifiedFinalState photons(fs);
+      photons.acceptIdPair(PID::PHOTON);
+
+      IdentifiedFinalState el_id(fs);
+      el_id.acceptIdPair(PID::ELECTRON);
+      PromptFinalState electrons(el_id);
+      addProjection(electrons, "Electrons");
+      DressedLeptons dressed_electrons(photons, electrons, 0.1, Cuts::open(), true, false);
+      addProjection(dressed_electrons, "DressedElectrons");
+
+      IdentifiedFinalState mu_id(fs);
+      mu_id.acceptIdPair(PID::MUON);
+      PromptFinalState muons(mu_id);
+      addProjection(muons, "Muons");
+      DressedLeptons dressed_muons(photons, muons, 0.1, Cuts::open(), true, false);
+      addProjection(dressed_muons, "DressedMuons");
+
+      // Parton-level top quarks
+      declare(PartonicTops(PartonicTops::E_MU, false), "LeptonicPartonTops");
+
+
+      // Booking of histograms
+
+      // This histogram is independent of the parton-level information, and is an addition to the original analysis.
+      // It is compared to the same data as the parton-level delta_phi histogram d02-x01-y01.
+      _h_dphidressedleptons = bookHisto1D("d00-x01-y01", _bins_dphi);
+
+      // The remaining histos use parton-level information
+      _h_dphi = bookHisto1D("d02-x01-y01", _bins_dphi);
+      _h_cos_opening_angle = bookHisto1D("d05-x01-y01", _bins_cos_opening_angle);
+      _h_c1c2 = bookHisto1D("d08-x01-y01", _bins_c1c2);
+      _h_lep_costheta = bookHisto1D("d11-x01-y01", _bins_lep_costheta);
+      _h_lep_costheta_CPV = bookHisto1D("d14-x01-y01", _bins_lep_costheta_CPV);
+
+      // 2D histos
+      _h_dphi_var[0] = bookHisto2D("d20-x01-y01", _bins_dphi, _bins_tt_mass);
+      _h_cos_opening_angle_var[0] = bookHisto2D("d26-x01-y01", _bins_cos_opening_angle, _bins_tt_mass);
+      _h_c1c2_var[0] = bookHisto2D("d32-x01-y01", _bins_c1c2, _bins_tt_mass);
+      _h_lep_costheta_var[0] = bookHisto2D("d38-x01-y01", _bins_lep_costheta, _bins_tt_mass);
+      _h_lep_costheta_CPV_var[0] = bookHisto2D("d44-x01-y01", _bins_lep_costheta_CPV, _bins_tt_mass);
+
+      _h_dphi_var[1] = bookHisto2D("d50-x01-y01", _bins_dphi, _bins_tt_pT);
+      _h_cos_opening_angle_var[1] = bookHisto2D("d56-x01-y01", _bins_cos_opening_angle, _bins_tt_pT);
+      _h_c1c2_var[1] = bookHisto2D("d62-x01-y01", _bins_c1c2, _bins_tt_pT);
+      _h_lep_costheta_var[1] = bookHisto2D("d68-x01-y01", _bins_lep_costheta, _bins_tt_pT);
+      _h_lep_costheta_CPV_var[1] = bookHisto2D("d74-x01-y01", _bins_lep_costheta_CPV, _bins_tt_pT);
+
+      _h_dphi_var[2] = bookHisto2D("d80-x01-y01", _bins_dphi, _bins_tt_absrapidity);
+      _h_cos_opening_angle_var[2] = bookHisto2D("d86-x01-y01", _bins_cos_opening_angle, _bins_tt_absrapidity);
+      _h_c1c2_var[2] = bookHisto2D("d92-x01-y01", _bins_c1c2, _bins_tt_absrapidity);
+      _h_lep_costheta_var[2] = bookHisto2D("d98-x01-y01", _bins_lep_costheta, _bins_tt_absrapidity);
+      _h_lep_costheta_CPV_var[2] = bookHisto2D("d104-x01-y01", _bins_lep_costheta_CPV, _bins_tt_absrapidity);
+
+      // Profile histos for asymmetries
+      _h_dphi_profile[0] = bookProfile1D("d17-x01-y01", _bins_tt_mass);
+      _h_cos_opening_angle_profile[0] = bookProfile1D("d23-x01-y01", _bins_tt_mass);
+      _h_c1c2_profile[0] = bookProfile1D("d29-x01-y01", _bins_tt_mass);
+      _h_lep_costheta_profile[0] = bookProfile1D("d35-x01-y01", _bins_tt_mass);
+      _h_lep_costheta_CPV_profile[0] = bookProfile1D("d41-x01-y01", _bins_tt_mass);
+
+      _h_dphi_profile[1] = bookProfile1D("d47-x01-y01", _bins_tt_pT);
+      _h_cos_opening_angle_profile[1] = bookProfile1D("d53-x01-y01", _bins_tt_pT);
+      _h_c1c2_profile[1] = bookProfile1D("d59-x01-y01", _bins_tt_pT);
+      _h_lep_costheta_profile[1] = bookProfile1D("d65-x01-y01", _bins_tt_pT);
+      _h_lep_costheta_CPV_profile[1] = bookProfile1D("d71-x01-y01", _bins_tt_pT);
+
+      _h_dphi_profile[2] = bookProfile1D("d77-x01-y01", _bins_tt_absrapidity);
+      _h_cos_opening_angle_profile[2] = bookProfile1D("d83-x01-y01", _bins_tt_absrapidity);
+      _h_c1c2_profile[2] = bookProfile1D("d89-x01-y01", _bins_tt_absrapidity);
+      _h_lep_costheta_profile[2] = bookProfile1D("d95-x01-y01", _bins_tt_absrapidity);
+      _h_lep_costheta_CPV_profile[2] = bookProfile1D("d101-x01-y01", _bins_tt_absrapidity);
+
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      const double weight = event.weight();
+
+      // Use particle-level leptons for the first histogram
+      const DressedLeptons& dressed_electrons = applyProjection<DressedLeptons>(event, "DressedElectrons");
+      const DressedLeptons& dressed_muons = applyProjection<DressedLeptons>(event, "DressedMuons");
+
+      const vector<DressedLepton> dressedels = dressed_electrons.dressedLeptons();
+      const vector<DressedLepton> dressedmus = dressed_muons.dressedLeptons();
+
+      const size_t ndressedel = dressedels.size();
+      const size_t ndressedmu = dressedmus.size();
+
+      // For the particle-level histogram, require exactly one electron and exactly one muon, to select
+      // the ttbar->emu channel. Note this means ttbar->emu events with additional PromptFinalState
+      // dilepton pairs from the shower are vetoed - for PYTHIA8, this affects ~0.5% of events, so the
+      // effect is well below the level of sensitivity of the measured distribution.
+      if ( ndressedel == 1 && ndressedmu == 1 ) {
+
+        const int electrontouse = 0, muontouse = 0;
+
+        // Opposite-charge leptons only
+        if ( sameSign(dressedels[electrontouse],dressedmus[muontouse]) ) {
+          MSG_INFO("Error, e and mu have same charge, skipping event");
+        }
+        else {
+          //Get the four-momenta of the positively- and negatively-charged leptons
+          FourMomentum lepPlus = dressedels[electrontouse].charge() > 0 ? dressedels[electrontouse] : dressedmus[muontouse];
+          FourMomentum lepMinus = dressedels[electrontouse].charge() > 0 ? dressedmus[muontouse] : dressedels[electrontouse];
+
+          // Now calculate the variable
+          double dphi_temp = deltaPhi(lepPlus,lepMinus);
+
+          fillWithUFOF( _h_dphidressedleptons, dphi_temp, weight );
+        }
+
+      }
+
+
+      // The remaining variables use parton-level information.
+
+      // Get the leptonically decaying tops
+      const Particles& leptonicpartontops = apply<ParticleFinder>(event, "LeptonicPartonTops").particlesByPt();
+      Particles chargedleptons;
+      unsigned int ntrueleptonictops = 0;
+      bool oppositesign = false;
+
+      if ( leptonicpartontops.size() == 2 ) {
+        for (size_t k = 0; k < leptonicpartontops.size(); ++k) {
+
+          // Get the lepton
+          const Particle lepTop = leptonicpartontops[k];
+          const auto isPromptChargedLepton = [](const Particle& p){return (isChargedLepton(p) && isPrompt(p, false, false));};
+          Particles lepton_candidates = lepTop.allDescendants(firstParticleWith(isPromptChargedLepton), false);
+          if ( lepton_candidates.size() < 1 ) MSG_WARNING("error, PartonicTops::E_MU top quark had no daughter lepton candidate, skipping event.");
+
+          // In some cases there is no lepton from the W decay but only leptons from the decay of a radiated gamma.
+          // These hadronic PartonicTops are currently being mistakenly selected by PartonicTops::E_MU (as of April 2017), and need to be rejected.
+          // PartonicTops::E_MU is being fixed in Rivet, and when it is the veto below should do nothing.
+          /// @todo Should no longer be necessary -- remove
+          bool istrueleptonictop = false;
+          for (size_t i = 0; i < lepton_candidates.size(); ++i) {
+            const Particle& lepton_candidate = lepton_candidates[i];
+            if ( lepton_candidate.hasParent(PID::PHOTON) ) {
+              MSG_DEBUG("Found gamma parent, top: " << k+1 << " of " << leptonicpartontops.size() << " , lepton: " << i+1 << " of " << lepton_candidates.size());
+              continue;
+            }
+            if ( !istrueleptonictop && sameSign(lepTop,lepton_candidate) ) {
+              chargedleptons.push_back(lepton_candidate);
+              istrueleptonictop = true;
+            }
+            else MSG_WARNING("Found extra prompt charged lepton from top decay (and without gamma parent), ignoring it.");
+          }
+          if ( istrueleptonictop ) ++ntrueleptonictops;
+        }
+      }
+
+      if ( ntrueleptonictops == 2 ) {
+        oppositesign = !( sameSign(chargedleptons[0],chargedleptons[1]) );
+        if ( !oppositesign ) MSG_WARNING("error, same charge tops, skipping event.");
+      }
+
+      if ( ntrueleptonictops == 2 && oppositesign ) {
+
+        // Get the four-momenta of the positively- and negatively-charged leptons
+        FourMomentum lepPlus = chargedleptons[0].charge() > 0 ? chargedleptons[0] : chargedleptons[1];
+        FourMomentum lepMinus = chargedleptons[0].charge() > 0 ? chargedleptons[1] : chargedleptons[0];
+
+        const double dphi_temp = deltaPhi(lepPlus,lepMinus);
+
+        // Get the four-momenta of the positively- and negatively-charged tops
+        FourMomentum topPlus_p4 = leptonicpartontops[0].pdgId() > 0 ? leptonicpartontops[0] : leptonicpartontops[1];
+        FourMomentum topMinus_p4 = leptonicpartontops[0].pdgId() > 0 ? leptonicpartontops[1] : leptonicpartontops[0];
+        const FourMomentum ttbar_p4 = topPlus_p4 + topMinus_p4;
+
+        const double tt_mass_temp = ttbar_p4.mass();
+        const double tt_absrapidity_temp = ttbar_p4.absrapidity();
+        const double tt_pT_temp = ttbar_p4.pT();
+
+        // Lorentz transformations to calculate the spin observables in the helicity basis
+
+        // Transform everything to the ttbar CM frame
+        LorentzTransform ttCM;
+        ttCM.setBetaVec(-ttbar_p4.boostVector());
+
+        topPlus_p4 = ttCM.transform(topPlus_p4);
+        topMinus_p4 = ttCM.transform(topMinus_p4);
+
+        lepPlus = ttCM.transform(lepPlus);
+        lepMinus = ttCM.transform(lepMinus);
+
+        // Now boost the leptons to their parent top CM frames
+        LorentzTransform topPlus, topMinus;
+        topPlus.setBetaVec(-topPlus_p4.boostVector());
+        topMinus.setBetaVec(-topMinus_p4.boostVector());
+
+        lepPlus = topPlus.transform(lepPlus);
+        lepMinus = topMinus.transform(lepMinus);
+
+        const double lepPlus_costheta_temp = lepPlus.vector3().dot(topPlus_p4.vector3()) / (lepPlus.vector3().mod() * topPlus_p4.vector3().mod());
+        const double lepMinus_costheta_temp = lepMinus.vector3().dot(topMinus_p4.vector3()) / (lepMinus.vector3().mod() * topMinus_p4.vector3().mod());
+        const double c1c2_temp = lepPlus_costheta_temp * lepMinus_costheta_temp;
+        const double cos_opening_angle_temp = lepPlus.vector3().dot(lepMinus.vector3()) / (lepPlus.vector3().mod() * lepMinus.vector3().mod());
+
+        // Fill parton-level histos
+        fillWithUFOF( _h_dphi, dphi_temp, weight );
+        fillWithUFOF( _h_cos_opening_angle, cos_opening_angle_temp, weight );
+        fillWithUFOF( _h_c1c2, c1c2_temp, weight );
+        fillWithUFOF( _h_lep_costheta, lepPlus_costheta_temp, weight );
+        fillWithUFOF( _h_lep_costheta, lepMinus_costheta_temp, weight );
+        fillWithUFOF( _h_lep_costheta_CPV, lepPlus_costheta_temp, weight );
+        fillWithUFOF( _h_lep_costheta_CPV, -lepMinus_costheta_temp, weight );
+
+        // Now fill the same variables in the 2D and profile histos vs ttbar invariant mass, pT, and absolute rapidity
+        for (int i_var = 0; i_var < 3; ++i_var) {
+          double var;
+          if ( i_var == 0 ) {
+            var = tt_mass_temp;
+          } else if ( i_var == 1 ) {
+            var = tt_pT_temp;
+          } else {
+            var = tt_absrapidity_temp;
+          }
+
+          fillWithUFOF( _h_dphi_var[i_var], dphi_temp, var, weight );
+          fillWithUFOF( _h_cos_opening_angle_var[i_var], cos_opening_angle_temp, var, weight );
+          fillWithUFOF( _h_c1c2_var[i_var], c1c2_temp, var, weight );
+          fillWithUFOF( _h_lep_costheta_var[i_var], lepPlus_costheta_temp, var, weight );
+          fillWithUFOF( _h_lep_costheta_var[i_var], lepMinus_costheta_temp, var, weight );
+          fillWithUFOF( _h_lep_costheta_CPV_var[i_var], lepPlus_costheta_temp, var, weight );
+          fillWithUFOF( _h_lep_costheta_CPV_var[i_var], -lepMinus_costheta_temp, var, weight );
+
+          fillWithUFOF( _h_dphi_profile[i_var], dphi_temp, var, weight, (_h_dphi->xMax() + _h_dphi->xMin())/2. );
+          fillWithUFOF( _h_cos_opening_angle_profile[i_var], cos_opening_angle_temp, var, weight, (_h_cos_opening_angle->xMax() + _h_cos_opening_angle->xMin())/2. );
+          fillWithUFOF( _h_c1c2_profile[i_var], c1c2_temp, var, weight, (_h_c1c2->xMax() + _h_c1c2->xMin())/2. );
+          fillWithUFOF( _h_lep_costheta_profile[i_var], lepPlus_costheta_temp, var, weight, (_h_lep_costheta->xMax() + _h_lep_costheta->xMin())/2. );
+          fillWithUFOF( _h_lep_costheta_profile[i_var], lepMinus_costheta_temp, var, weight, (_h_lep_costheta->xMax() + _h_lep_costheta->xMin())/2. );
+          fillWithUFOF( _h_lep_costheta_CPV_profile[i_var], lepPlus_costheta_temp, var, weight, (_h_lep_costheta_CPV->xMax() + _h_lep_costheta_CPV->xMin())/2. );
+          fillWithUFOF( _h_lep_costheta_CPV_profile[i_var], -lepMinus_costheta_temp, var, weight, (_h_lep_costheta_CPV->xMax() + _h_lep_costheta_CPV->xMin())/2. );
+
+        }
+
+      }
+
+    }
+
+
+    /// Normalise histograms to unit area
+    void finalize() {
+
+      normalize(_h_dphidressedleptons);
+
+      normalize(_h_dphi);
+      normalize(_h_cos_opening_angle);
+      normalize(_h_c1c2);
+      normalize(_h_lep_costheta);
+      normalize(_h_lep_costheta_CPV);
+
+      for (int i_var = 0; i_var < 3; ++i_var) {
+        normalize(_h_dphi_var[i_var]);
+        normalize(_h_cos_opening_angle_var[i_var]);
+        normalize(_h_c1c2_var[i_var]);
+        normalize(_h_lep_costheta_var[i_var]);
+        normalize(_h_lep_costheta_CPV_var[i_var]);
+      }
+
+    }
+
+
+  private:
+
+    Histo1DPtr _h_dphidressedleptons, _h_dphi, _h_lep_costheta, _h_lep_costheta_CPV, _h_c1c2, _h_cos_opening_angle;
+    Histo2DPtr _h_dphi_var[3], _h_lep_costheta_var[3], _h_lep_costheta_CPV_var[3], _h_c1c2_var[3], _h_cos_opening_angle_var[3];
+    Profile1DPtr _h_dphi_profile[3], _h_lep_costheta_profile[3], _h_lep_costheta_CPV_profile[3], _h_c1c2_profile[3], _h_cos_opening_angle_profile[3];
+
+    const vector<double> _bins_tt_mass = {300., 430., 530., 1200.};
+    const vector<double> _bins_tt_pT = {0., 41., 92., 300.};
+    const vector<double> _bins_tt_absrapidity = {0., 0.34, 0.75, 1.5};
+    const vector<double> _bins_dphi = {0., 5.*M_PI/60., 10.*M_PI/60., 15.*M_PI/60., 20.*M_PI/60., 25.*M_PI/60., 30.*M_PI/60., 35.*M_PI/60., 40.*M_PI/60., 45.*M_PI/60., 50.*M_PI/60., 55.*M_PI/60., M_PI};
+    const vector<double> _bins_lep_costheta = {-1., -2./3., -1./3., 0., 1./3., 2./3., 1.};
+    const vector<double> _bins_lep_costheta_CPV = {-1., -2./3., -1./3., 0., 1./3., 2./3., 1.};
+    const vector<double> _bins_c1c2 = {-1., -0.4, -10./60., 0., 10./60., 0.4, 1.};
+    const vector<double> _bins_cos_opening_angle = {-1., -2./3., -1./3., 0., 1./3., 2./3., 1.};
+
+    void fillWithUFOF(Histo1DPtr h, double x, double w) {
+      h->fill(std::max(std::min(x, h->xMax()-1e-9),h->xMin()+1e-9), w);
+    }
+
+    void fillWithUFOF(Histo2DPtr h, double x, double y, double w) {
+      h->fill(std::max(std::min(x, h->xMax()-1e-9),h->xMin()+1e-9), std::max(std::min(y, h->yMax()-1e-9),h->yMin()+1e-9), w);
+    }
+
+    void fillWithUFOF(Profile1DPtr h, double x, double y, double w, double c) {
+      h->fill(std::max(std::min(y, h->xMax()-1e-9),h->xMin()+1e-9), float(x > c) - float(x < c), w);
+    }
+
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(CMS_2016_I1413748);
+
+
+}
diff --git a/analyses/pluginCMS/CMS_2016_I1413748.info b/analyses/pluginCMS/CMS_2016_I1413748.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1413748.info
@@ -0,0 +1,53 @@
+Name: CMS_2016_I1413748
+Year: 2016
+Summary: Measurements of ttbar spin correlations and top quark polarization using dilepton final states in pp collisions at sqrt(s) = 8 TeV 
+Experiment: CMS
+Collider: LHC
+InspireID: 1413748
+Status: VALIDATED
+Authors:
+ - Jacob Linacre <jacob.linacre@cern.ch>
+References:
+ - Phys. Rev. D 93, 052007 (2016)
+ - DOI:10.1103/PhysRevD.93.052007
+ - arXiv:1601.01107
+ - https://hepdata.net/record/ins1413748
+RunInfo: 'Dilepton ttbar events at $\sqrt{s}=8\;\TeV$, where the leptons are prompt elecrons or muons (not from tau). No other cuts. All but one of the variables require top quarks in the event record.'
+NeedCrossSection: no
+Luminosity: 19.5/fb
+Beams: [p+, p+]
+Energies: [8000]
+Description:
+  '
+  $\textbf{Abstract:}$
+  Measurements of the top quark-antiquark ($\mathrm{t\bar{t}}$) spin correlations and the top quark polarization are presented for $\mathrm{t\bar{t}}$ pairs produced in pp collisions at $\sqrt{s}=8\:$TeV. The data correspond to an integrated luminosity of 19.5 $\mathrm{fb^{-1}}$ collected with the CMS detector at the LHC. The measurements are performed using events with two oppositely charged leptons (electrons or muons) and two or more jets, where at least one of the jets is identified as originating from a bottom quark. The spin correlations and polarization are measured from the angular distributions of the two selected leptons, both inclusively and differentially, with respect to the invariant mass, rapidity, and transverse momentum of the $\mathrm{t\bar{t}}$ system. The measurements are unfolded to the parton level and found to be in agreement with predictions of the standard model. A search for new physics in the form of anomalous top quark chromo moments is performed. No evidence of new physics is observed, and exclusion limits on the real part of the chromo-magnetic dipole moment and the imaginary part of the chromo-electric dipole moment are evaluated.
+
+  $\textbf{Particle-level addition to Rivet routine:}$
+  While the analysis was performed at the parton-level only, $\left|\Delta \phi_{\ell^+\ell^-}\right|$ is a purely leptonic variable and it has been checked that the results of the analysis would have been essentially unchanged had it been defined at particle-level using dressed leptons instead of using the parton-level top quark daughter leptons. We therefore include both particle- and parton-level versions of this distribution in the Rivet routine, with the former identified in the plot title. For same-flavour dilepton final states, the particle-level definition in the full phase space is problematic because the two leptons can come from fully-hadronic $\mathrm{t\bar{t}}$ plus a dilepton pair from radiation. Such pairs have invariant mass $M_{\ell\ell}\sim 0$ and produce a peak near zero in the $\left|\Delta \phi_{\ell^+\ell^-}\right|$ distribution. We therefore select only the $\mathrm{t\bar{t}}\to e\mu$ final state, by requiring exactly one electron and exactly one muon. Note this means $\mathrm{t\bar{t}}\to e\mu$ events with additional dilepton pairs from radiation are vetoed. For PYTHIA8 this amounts to ~0.5% of $\mathrm{t\bar{t}}\to e\mu$ events - well below the level of sensitivity of the measured distribution.
+
+  $\textbf{Histograms and covariance matrices:}$
+  The error bars in the measured distributions should not be used for fitting because there are significant correlations between bins.  
+  The covariance matrices for the statistical and systematic uncertainties in each distribution can be found in hepdata. The single-differential cross sections in hepdata are normalised to unit area (i.e. the integral is equal to one), while the double-differential cross sections in hepdata are normalised to the sum of entries (such that the sum of all bin heights is equal to one). This should be taken into account when comparing the measured distributions to the Rivet results and when using the covariance matrices.
+
+  $\textbf{Overflow bins:}$
+  The upper $M_\mathrm{t\bar{t}}$, $p_\mathrm{T}^\mathrm{t\bar{t}}$, and $\left|y_\mathrm{t\bar{t}}\right|$ bins contain overflow events up to infinity.
+  '
+BibKey: Khachatryan:2016xws
+BibTeX: '@article{Khachatryan:2016xws,
+      author         = "Khachatryan, V. and others",
+      title          = "{Measurements of t t-bar spin correlations and top quark
+                        polarization using dilepton final states in pp collisions
+                        at sqrt(s) = 8 TeV}",
+      collaboration  = "CMS",
+      journal        = "Phys. Rev.",
+      volume         = "D93",
+      year           = "2016",
+      number         = "5",
+      pages          = "052007",
+      doi            = "10.1103/PhysRevD.93.052007",
+      eprint         = "1601.01107",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CMS-TOP-14-023, CERN-PH-EP-2015-333",
+      SLACcitation   = "%%CITATION = ARXIV:1601.01107;%%"
+}'
diff --git a/analyses/pluginCMS/CMS_2016_I1413748.plot b/analyses/pluginCMS/CMS_2016_I1413748.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1413748.plot
@@ -0,0 +1,258 @@
+# BEGIN PLOT /CMS_2016_I1413748/*
+LogY=0
+ShowZero=0
+XTwosidedTicks=1
+YTwosidedTicks=1
+RatioPlotYMin=0.9
+RatioPlotYMax=1.1
+Legend=1
+Title=CMS, 8 TeV, $\mathrm{t\bar{t}}$ dilepton channel, parton-level
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d00-x01-y01
+XLabel=$\left|\Delta \phi_{\ell^+\ell^-}\right|$
+YLabel=$\frac{1}{\sigma}\frac{\mathrm{d}\sigma}{\mathrm{d}\left|\Delta \phi_{\ell^+\ell^-}\right|}$
+Title=CMS, 8 TeV, $\mathrm{t\bar{t}}$ dilepton, parton-level. Rivet particle-level, $e\mu$ only.
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d02-x01-y01
+XLabel=$\left|\Delta \phi_{\ell^+\ell^-}\right|$
+YLabel=$\frac{1}{\sigma}\frac{\mathrm{d}\sigma}{\mathrm{d}\left|\Delta \phi_{\ell^+\ell^-}\right|}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d05-x01-y01
+XLabel=$\cos\varphi$
+YLabel=$\frac{1}{\sigma}\frac{\mathrm{d}\sigma}{\mathrm{d}\cos\varphi}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d08-x01-y01
+XLabel=$\cos\theta^{\star}_{\ell^+} \cos\theta^{\star}_{\ell^-}$
+YLabel=$\frac{1}{\sigma}\frac{\mathrm{d}\sigma}{\mathrm{d}\cos\theta^{\star}_{\ell^+} \cos\theta^{\star}_{\ell^-}}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d11-x01-y01
+XLabel=$\cos\theta^{\star}_\ell$
+YLabel=$\frac{1}{\sigma}\frac{\mathrm{d}\sigma}{\mathrm{d}\cos\theta^{\star}_\ell}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d14-x01-y01
+XLabel=$\cos\theta^{\star}_{\ell,\mathrm{CPV}}$
+YLabel=$\frac{1}{\sigma}\frac{\mathrm{d}\sigma}{\mathrm{d}\cos\theta^{\star}_{\ell,\mathrm{CPV}}}$
+# END PLOT
+
+
+# BEGIN PLOT /CMS_2016_I1413748/d17-x01-y01
+XLabel=$M_\mathrm{t\bar{t}}$
+YLabel=$A_{\Delta\phi}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d23-x01-y01
+XLabel=$M_\mathrm{t\bar{t}}$
+YLabel=$A_{\cos\varphi}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d29-x01-y01
+XLabel=$M_\mathrm{t\bar{t}}$
+YLabel=$A_{c1c2}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d35-x01-y01
+XLabel=$M_\mathrm{t\bar{t}}$
+YLabel=$A_{P}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d41-x01-y01
+XLabel=$M_\mathrm{t\bar{t}}$
+YLabel=$A_{P}^{\rm{CPV}}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d47-x01-y01
+XLabel=$p_\mathrm{T}^\mathrm{t\bar{t}}$
+YLabel=$A_{\Delta\phi}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d53-x01-y01
+XLabel=$p_\mathrm{T}^\mathrm{t\bar{t}}$
+YLabel=$A_{\cos\varphi}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d59-x01-y01
+XLabel=$p_\mathrm{T}^\mathrm{t\bar{t}}$
+YLabel=$A_{c1c2}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d65-x01-y01
+XLabel=$p_\mathrm{T}^\mathrm{t\bar{t}}$
+YLabel=$A_{P}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d71-x01-y01
+XLabel=$p_\mathrm{T}^\mathrm{t\bar{t}}$
+YLabel=$A_{P}^{\rm{CPV}}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d77-x01-y01
+XLabel=$\left|y_\mathrm{t\bar{t}}\right|$
+YLabel=$A_{\Delta\phi}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d83-x01-y01
+XLabel=$\left|y_\mathrm{t\bar{t}}\right|$
+YLabel=$A_{\cos\varphi}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d89-x01-y01
+XLabel=$\left|y_\mathrm{t\bar{t}}\right|$
+YLabel=$A_{c1c2}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d95-x01-y01
+XLabel=$\left|y_\mathrm{t\bar{t}}\right|$
+YLabel=$A_{P}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d101-x01-y01
+XLabel=$\left|y_\mathrm{t\bar{t}}\right|$
+YLabel=$A_{P}^{\rm{CPV}}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+
+# BEGIN PLOT /CMS_2016_I1413748/d20-x01-y01
+XLabel=$\left|\Delta \phi_{\ell^+\ell^-}\right|$
+YLabel=$M_\mathrm{t\bar{t}}$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\left|\Delta \phi_{\ell^+\ell^-}\right|\mathrm{d}M_\mathrm{t\bar{t}}}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d26-x01-y01
+XLabel=$\cos\varphi$
+YLabel=$M_\mathrm{t\bar{t}}$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\cos\varphi\mathrm{d}M_\mathrm{t\bar{t}}}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d32-x01-y01
+XLabel=$\cos\theta^{\star}_{\ell^+} \cos\theta^{\star}_{\ell^-}$
+YLabel=$M_\mathrm{t\bar{t}}$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\cos\theta^{\star}_{\ell^+} \cos\theta^{\star}_{\ell^-}\mathrm{d}M_\mathrm{t\bar{t}}}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d38-x01-y01
+XLabel=$\cos\theta^{\star}_\ell$
+YLabel=$M_\mathrm{t\bar{t}}$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\cos\theta^{\star}_\ell\mathrm{d}M_\mathrm{t\bar{t}}}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d44-x01-y01
+XLabel=$\cos\theta^{\star}_{\ell,\mathrm{CPV}}$
+YLabel=$M_\mathrm{t\bar{t}}$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\cos\theta^{\star}_{\ell,\mathrm{CPV}}\mathrm{d}M_\mathrm{t\bar{t}}}$
+# END PLOT
+
+
+# BEGIN PLOT /CMS_2016_I1413748/d50-x01-y01
+XLabel=$\left|\Delta \phi_{\ell^+\ell^-}\right|$
+YLabel=$p_\mathrm{T}^\mathrm{t\bar{t}}$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\left|\Delta \phi_{\ell^+\ell^-}\right|\mathrm{d}p_\mathrm{T}^\mathrm{t\bar{t}}}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d56-x01-y01
+XLabel=$\cos\varphi$
+YLabel=$p_\mathrm{T}^\mathrm{t\bar{t}}$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\cos\varphi\mathrm{d}p_\mathrm{T}^\mathrm{t\bar{t}}}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d62-x01-y01
+XLabel=$\cos\theta^{\star}_{\ell^+} \cos\theta^{\star}_{\ell^-}$
+YLabel=$p_\mathrm{T}^\mathrm{t\bar{t}}$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\cos\theta^{\star}_{\ell^+} \cos\theta^{\star}_{\ell^-}\mathrm{d}p_\mathrm{T}^\mathrm{t\bar{t}}}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d68-x01-y01
+XLabel=$\cos\theta^{\star}_\ell$
+YLabel=$p_\mathrm{T}^\mathrm{t\bar{t}}$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\cos\theta^{\star}_\ell\mathrm{d}p_\mathrm{T}^\mathrm{t\bar{t}}}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d74-x01-y01
+XLabel=$\cos\theta^{\star}_{\ell,\mathrm{CPV}}$
+YLabel=$p_\mathrm{T}^\mathrm{t\bar{t}}$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\cos\theta^{\star}_{\ell,\mathrm{CPV}}\mathrm{d}p_\mathrm{T}^\mathrm{t\bar{t}}}$
+# END PLOT
+
+
+# BEGIN PLOT /CMS_2016_I1413748/d80-x01-y01
+XLabel=$\left|\Delta \phi_{\ell^+\ell^-}\right|$
+YLabel=$\left|y_\mathrm{t\bar{t}}\right|$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\left|\Delta \phi_{\ell^+\ell^-}\right|\mathrm{d}\left|y_\mathrm{t\bar{t}}\right|}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d86-x01-y01
+XLabel=$\cos\varphi$
+YLabel=$\left|y_\mathrm{t\bar{t}}\right|$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\cos\varphi\mathrm{d}\left|y_\mathrm{t\bar{t}}\right|}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d92-x01-y01
+XLabel=$\cos\theta^{\star}_{\ell^+} \cos\theta^{\star}_{\ell^-}$
+YLabel=$\left|y_\mathrm{t\bar{t}}\right|$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\cos\theta^{\star}_{\ell^+} \cos\theta^{\star}_{\ell^-}\mathrm{d}\left|y_\mathrm{t\bar{t}}\right|}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d98-x01-y01
+XLabel=$\cos\theta^{\star}_\ell$
+YLabel=$\left|y_\mathrm{t\bar{t}}\right|$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\cos\theta^{\star}_\ell\mathrm{d}\left|y_\mathrm{t\bar{t}}\right|}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1413748/d104-x01-y01
+XLabel=$\cos\theta^{\star}_{\ell,\mathrm{CPV}}$
+YLabel=$\left|y_\mathrm{t\bar{t}}\right|$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\cos\theta^{\star}_{\ell,\mathrm{CPV}}\mathrm{d}\left|y_\mathrm{t\bar{t}}\right|}$
+# END PLOT
+
+
+
diff --git a/analyses/pluginCMS/CMS_2016_I1413748.yoda b/analyses/pluginCMS/CMS_2016_I1413748.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1413748.yoda
@@ -0,0 +1,706 @@
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d00-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d00-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t2
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.308997e-01	1.308997e-01	1.308997e-01	2.621000e-01	9.015755E-03	9.015755E-03
+3.926991e-01	1.308997e-01	1.308997e-01	2.909000e-01	8.435037E-03	8.435037E-03
+6.544985e-01	1.308997e-01	1.308997e-01	2.845000e-01	7.927383E-03	7.927383E-03
+9.162979e-01	1.308997e-01	1.308997e-01	2.852000e-01	8.626828E-03	8.626828E-03
+1.178097e+00	1.308997e-01	1.308997e-01	2.986000e-01	6.996400E-03	6.996400E-03
+1.439897e+00	1.308997e-01	1.308997e-01	3.094000e-01	6.539609E-03	6.539609E-03
+1.701696e+00	1.308997e-01	1.308997e-01	3.119000e-01	6.390046E-03	6.390046E-03
+1.963495e+00	1.308997e-01	1.308997e-01	3.331000e-01	6.748480E-03	6.748480E-03
+2.225295e+00	1.308997e-01	1.308997e-01	3.423000e-01	7.605074E-03	7.605074E-03
+2.487094e+00	1.308997e-01	1.308997e-01	3.540000e-01	8.393558E-03	8.393558E-03
+2.748894e+00	1.308997e-01	1.308997e-01	3.743000e-01	9.271477E-03	9.271477E-03
+3.010693e+00	1.308997e-01	1.308997e-01	3.735000e-01	9.040770E-03	9.040770E-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d02-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d02-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t2
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.308997e-01	1.308997e-01	1.308997e-01	2.621000e-01	9.015755E-03	9.015755E-03
+3.926991e-01	1.308997e-01	1.308997e-01	2.909000e-01	8.435037E-03	8.435037E-03
+6.544985e-01	1.308997e-01	1.308997e-01	2.845000e-01	7.927383E-03	7.927383E-03
+9.162979e-01	1.308997e-01	1.308997e-01	2.852000e-01	8.626828E-03	8.626828E-03
+1.178097e+00	1.308997e-01	1.308997e-01	2.986000e-01	6.996400E-03	6.996400E-03
+1.439897e+00	1.308997e-01	1.308997e-01	3.094000e-01	6.539609E-03	6.539609E-03
+1.701696e+00	1.308997e-01	1.308997e-01	3.119000e-01	6.390046E-03	6.390046E-03
+1.963495e+00	1.308997e-01	1.308997e-01	3.331000e-01	6.748480E-03	6.748480E-03
+2.225295e+00	1.308997e-01	1.308997e-01	3.423000e-01	7.605074E-03	7.605074E-03
+2.487094e+00	1.308997e-01	1.308997e-01	3.540000e-01	8.393558E-03	8.393558E-03
+2.748894e+00	1.308997e-01	1.308997e-01	3.743000e-01	9.271477E-03	9.271477E-03
+3.010693e+00	1.308997e-01	1.308997e-01	3.735000e-01	9.040770E-03	9.040770E-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d05-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d05-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t5
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-8.333333E-01	1.666667E-01	1.666667E-01	4.032000e-01	1.523123E-02	1.523123E-02
+-5.000000E-01	1.666667E-01	1.666667E-01	4.475000e-01	2.016493E-02	2.016493E-02
+-1.666667E-01	1.666667E-01	1.666667E-01	4.957000e-01	1.768649E-02	1.768649E-02
+1.666667E-01	1.666667E-01	1.666667E-01	5.216000e-01	2.900516E-02	2.900516E-02
+5.000000E-01	1.666667E-01	1.666667E-01	5.433000e-01	2.291730E-02	2.291730E-02
+8.333333E-01	1.666667E-01	1.666667E-01	5.886000e-01	4.114781E-02	4.114781E-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d08-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d08-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t8
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-7.000000E-01	3.000000E-01	3.000000E-01	2.236000e-01	1.324516E-02	1.324516E-02
+-2.833333E-01	1.166667E-01	1.166667E-01	6.509000e-01	3.879313E-02	3.879313E-02
+-8.333333E-02	8.333333E-02	8.333333E-02	1.492000e+00	4.326435E-02	4.326435E-02
+8.333333E-02	8.333333E-02	8.333333E-02	1.358100e+00	4.650141E-02	4.650141E-02
+2.833333E-01	1.166667E-01	1.166667E-01	5.550000e-01	4.029693E-02	4.029693E-02
+7.000000E-01	3.000000E-01	3.000000E-01	1.824000e-01	1.580255E-02	1.580255E-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d11-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d11-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t11
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-8.333333E-01	1.666667E-01	1.666667E-01	5.244000e-01	2.763463E-02	2.763463E-02
+-5.000000E-01	1.666667E-01	1.666667E-01	4.882000e-01	1.762581E-02	1.762581E-02
+-1.666667E-01	1.666667E-01	1.666667E-01	5.040000e-01	1.744249E-02	1.744249E-02
+1.666667E-01	1.666667E-01	1.666667E-01	5.129000e-01	1.364977E-02	1.364977E-02
+5.000000E-01	1.666667E-01	1.666667E-01	4.902000e-01	2.238629E-02	2.238629E-02
+8.333333E-01	1.666667E-01	1.666667E-01	4.803000e-01	2.874841E-02	2.874841E-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d14-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d14-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t14
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-8.333333E-01	1.666667E-01	1.666667E-01	5.126000e-01	1.764524E-02	1.764524E-02
+-5.000000E-01	1.666667E-01	1.666667E-01	4.867000e-01	1.332544E-02	1.332544E-02
+-1.666667E-01	1.666667E-01	1.666667E-01	5.009000e-01	1.569203E-02	1.569203E-02
+1.666667E-01	1.666667E-01	1.666667E-01	5.160000e-01	1.582341E-02	1.582341E-02
+5.000000E-01	1.666667E-01	1.666667E-01	4.916000e-01	1.191438E-02	1.191438E-02
+8.333333E-01	1.666667E-01	1.666667E-01	4.921000e-01	1.559092E-02	1.559092E-02
+END YODA_SCATTER2D
+
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d17-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d17-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t17
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+3.650000E+02	6.500000E+01	6.500000E+01	-4.750000e-02	1.787512e-02	1.787512e-02
+4.800000e+02	5.000000e+01	5.000000e+01	1.082000e-01	2.134596e-02	2.134596e-02
+8.650000E+02	3.350000E+02	3.350000E+02	2.834000e-01	3.170189e-02	3.170189e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d23-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d23-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t23
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+3.650000E+02	6.500000E+01	6.500000E+01	1.110000e-01	3.323402e-02	3.323402e-02
+4.800000e+02	5.000000e+01	5.000000e+01	1.033000e-01	3.771074e-02	3.771074e-02
+8.650000E+02	3.350000E+02	3.350000E+02	5.910000e-02	3.343681e-02	3.343681e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d29-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d29-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t29
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+3.650000E+02	6.500000E+01	6.500000E+01	-5.310000e-02	4.412709e-02	4.412709e-02
+4.800000e+02	5.000000e+01	5.000000e+01	-9.050000e-02	4.289639e-02	4.289639e-02
+8.650000E+02	3.350000E+02	3.350000E+02	-5.570000e-02	3.980377e-02	3.980377e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d35-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d35-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t35
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+3.650000E+02	6.500000E+01	6.500000E+01	-1.660000e-02	3.145346e-02	3.145346e-02
+4.800000e+02	5.000000e+01	5.000000e+01	-1.320000e-02	4.297732e-02	4.297732e-02
+8.650000E+02	3.350000E+02	3.350000E+02	3.000000e-04	3.833288e-02	3.833288e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d41-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d41-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t41
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+3.650000E+02	6.500000E+01	6.500000E+01	-2.860000e-02	2.087007e-02	2.087007e-02
+4.800000e+02	5.000000e+01	5.000000e+01	4.880000e-02	2.098047e-02	2.098047e-02
+8.650000E+02	3.350000E+02	3.350000E+02	-1.770000e-02	1.968172e-02	1.968172e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d47-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d47-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t47
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.050000e+01	2.050000e+01	2.050000e+01	1.009000e-01	1.862525e-02	1.862525e-02
+6.650000e+01	2.550000e+01	2.550000e+01	1.083000e-01	2.347978e-02	2.347978e-02
+1.960000E+02	1.040000E+02	1.040000E+02	4.870000e-02	2.653771e-02	2.653771e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d53-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d53-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t53
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.050000e+01	2.050000e+01	2.050000e+01	8.120000e-02	2.397603e-02	2.397603e-02
+6.650000e+01	2.550000e+01	2.550000e+01	1.487000e-01	3.639299e-02	3.639299e-02
+1.960000E+02	1.040000E+02	1.040000E+02	8.430000e-02	5.121035e-02	5.121035e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d59-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d59-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t59
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.050000e+01	2.050000e+01	2.050000e+01	-7.310000e-02	2.744886e-02	2.744886e-02
+6.650000e+01	2.550000e+01	2.550000e+01	-5.980000e-02	5.494770e-02	5.494770e-02
+1.960000E+02	1.040000E+02	1.040000E+02	-8.600000e-02	5.749791e-02	5.749791e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d65-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d65-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t65
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.050000e+01	2.050000e+01	2.050000e+01	-1.560000e-02	2.808790e-02	2.808790e-02
+6.650000e+01	2.550000e+01	2.550000e+01	2.910000e-02	4.211425e-02	4.211425e-02
+1.960000E+02	1.040000E+02	1.040000E+02	-7.300000e-02	4.687057e-02	4.687057e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d71-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d71-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t71
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.050000e+01	2.050000e+01	2.050000e+01	1.380000e-02	1.348258e-02	1.348258e-02
+6.650000e+01	2.550000e+01	2.550000e+01	-1.650000e-02	2.304821e-02	2.304821e-02
+1.960000E+02	1.040000E+02	1.040000E+02	-1.190000e-02	3.129217e-02	3.129217e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d77-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d77-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t77
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.700000e-01	1.700000e-01	1.700000e-01	1.032000e-01	1.861720e-02	1.861720e-02
+5.450000e-01	2.050000e-01	2.050000e-01	9.250000e-02	2.163932e-02	2.163932e-02
+1.125000E+00	3.750000E-01	3.750000E-01	9.040000e-02	1.999050e-02	1.999050e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d83-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d83-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t83
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.700000e-01	1.700000e-01	1.700000e-01	1.152000e-01	3.143406e-02	3.143406e-02
+5.450000e-01	2.050000e-01	2.050000e-01	1.155000e-01	3.056436e-02	3.056436e-02
+1.125000E+00	3.750000E-01	3.750000E-01	7.030000e-02	3.084153e-02	3.084153e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d89-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d89-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t89
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.700000e-01	1.700000e-01	1.700000e-01	-6.320000e-02	3.861451e-02	3.861451e-02
+5.450000e-01	2.050000e-01	2.050000e-01	-7.270000e-02	3.626086e-02	3.626086e-02
+1.125000E+00	3.750000E-01	3.750000E-01	-8.910000e-02	3.905791e-02	3.905791e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d95-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d95-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t95
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.700000e-01	1.700000e-01	1.700000e-01	-1.750000e-02	3.823742e-02	3.823742e-02
+5.450000e-01	2.050000e-01	2.050000e-01	-1.200000e-02	3.452492e-02	3.452492e-02
+1.125000E+00	3.750000E-01	3.750000E-01	-3.100000e-03	3.453057e-02	3.453057e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1413748/d101-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d101-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t101
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.700000e-01	1.700000e-01	1.700000e-01	6.500000e-03	2.576063e-02	2.576063e-02
+5.450000e-01	2.050000e-01	2.050000e-01	1.100000e-02	2.264332e-02	2.264332e-02
+1.125000E+00	3.750000E-01	3.750000E-01	-1.610000e-02	1.521611e-02	1.521611e-02
+END YODA_SCATTER2D
+
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1413748/d20-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d20-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t20
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+1.308997E-01	1.308997E-01	1.308997E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.430000e-02	0.000000e+00	0.000000e+00
+1.308997E-01	1.308997E-01	1.308997E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.050000e-02	0.000000e+00	0.000000e+00
+1.308997E-01	1.308997E-01	1.308997E-01	8.650000E+02	3.350000E+02	3.350000E+02	1.390000e-02	0.000000e+00	0.000000e+00
+3.926991E-01	1.308997E-01	1.308997E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.680000e-02	0.000000e+00	0.000000e+00
+3.926991E-01	1.308997E-01	1.308997E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.340000e-02	0.000000e+00	0.000000e+00
+3.926991E-01	1.308997E-01	1.308997E-01	8.650000E+02	3.350000E+02	3.350000E+02	1.610000e-02	0.000000e+00	0.000000e+00
+6.544985E-01	1.308997E-01	1.308997E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.550000e-02	0.000000e+00	0.000000e+00
+6.544985E-01	1.308997E-01	1.308997E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.280000e-02	0.000000e+00	0.000000e+00
+6.544985E-01	1.308997E-01	1.308997E-01	8.650000E+02	3.350000E+02	3.350000E+02	1.680000e-02	0.000000e+00	0.000000e+00
+9.162979E-01	1.308997E-01	1.308997E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.550000e-02	0.000000e+00	0.000000e+00
+9.162979E-01	1.308997E-01	1.308997E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.190000e-02	0.000000e+00	0.000000e+00
+9.162979E-01	1.308997E-01	1.308997E-01	8.650000E+02	3.350000E+02	3.350000E+02	1.760000e-02	0.000000e+00	0.000000e+00
+1.178097E+00	1.308997E-01	1.308997E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.350000e-02	0.000000e+00	0.000000e+00
+1.178097E+00	1.308997E-01	1.308997E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.490000e-02	0.000000e+00	0.000000e+00
+1.178097E+00	1.308997E-01	1.308997E-01	8.650000E+02	3.350000E+02	3.350000E+02	1.830000e-02	0.000000e+00	0.000000e+00
+1.439897E+00	1.308997E-01	1.308997E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.430000e-02	0.000000e+00	0.000000e+00
+1.439897E+00	1.308997E-01	1.308997E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.730000e-02	0.000000e+00	0.000000e+00
+1.439897E+00	1.308997E-01	1.308997E-01	8.650000E+02	3.350000E+02	3.350000E+02	1.890000e-02	0.000000e+00	0.000000e+00
+1.701696E+00	1.308997E-01	1.308997E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.200000e-02	0.000000e+00	0.000000e+00
+1.701696E+00	1.308997E-01	1.308997E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.700000e-02	0.000000e+00	0.000000e+00
+1.701696E+00	1.308997E-01	1.308997E-01	8.650000E+02	3.350000E+02	3.350000E+02	2.250000e-02	0.000000e+00	0.000000e+00
+1.963495E+00	1.308997E-01	1.308997E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.360000e-02	0.000000e+00	0.000000e+00
+1.963495E+00	1.308997E-01	1.308997E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.890000e-02	0.000000e+00	0.000000e+00
+1.963495E+00	1.308997E-01	1.308997E-01	8.650000E+02	3.350000E+02	3.350000E+02	2.420000e-02	0.000000e+00	0.000000e+00
+2.225295E+00	1.308997E-01	1.308997E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.430000e-02	0.000000e+00	0.000000e+00
+2.225295E+00	1.308997E-01	1.308997E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.930000e-02	0.000000e+00	0.000000e+00
+2.225295E+00	1.308997E-01	1.308997E-01	8.650000E+02	3.350000E+02	3.350000E+02	2.810000e-02	0.000000e+00	0.000000e+00
+2.487094E+00	1.308997E-01	1.308997E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.130000e-02	0.000000e+00	0.000000e+00
+2.487094E+00	1.308997E-01	1.308997E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.790000e-02	0.000000e+00	0.000000e+00
+2.487094E+00	1.308997E-01	1.308997E-01	8.650000E+02	3.350000E+02	3.350000E+02	3.280000e-02	0.000000e+00	0.000000e+00
+2.748894E+00	1.308997E-01	1.308997E-01	3.650000E+02	6.500000E+01	6.500000E+01	2.990000e-02	0.000000e+00	0.000000e+00
+2.748894E+00	1.308997E-01	1.308997E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.990000e-02	0.000000e+00	0.000000e+00
+2.748894E+00	1.308997E-01	1.308997E-01	8.650000E+02	3.350000E+02	3.350000E+02	3.740000e-02	0.000000e+00	0.000000e+00
+3.010693E+00	1.308997E-01	1.308997E-01	3.650000E+02	6.500000E+01	6.500000E+01	2.980000e-02	0.000000e+00	0.000000e+00
+3.010693E+00	1.308997E-01	1.308997E-01	4.800000e+02	5.000000e+01	5.000000e+01	3.190000e-02	0.000000e+00	0.000000e+00
+3.010693E+00	1.308997E-01	1.308997E-01	8.650000E+02	3.350000E+02	3.350000E+02	3.710000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1413748/d26-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d26-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t26
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-8.333333E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	4.900000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	5.000000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	3.740000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	6.270000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	4.390000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	4.400000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	7.010000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	4.520000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	5.060000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	7.070000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	5.260000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	4.870000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	7.400000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	5.710000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	4.800000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	8.260000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	6.140000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	5.180000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1413748/d32-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d32-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t32
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-7.000000E-01	3.000000E-01	3.000000E-01	3.650000E+02	6.500000E+01	6.500000E+01	5.540000e-02	0.000000e+00	0.000000e+00
+-7.000000E-01	3.000000E-01	3.000000E-01	4.800000e+02	5.000000e+01	5.000000e+01	4.470000e-02	0.000000e+00	0.000000e+00
+-7.000000E-01	3.000000E-01	3.000000E-01	8.650000E+02	3.350000E+02	3.350000E+02	3.380000e-02	0.000000e+00	0.000000e+00
+-2.833333E-01	1.166667E-01	1.166667E-01	3.650000E+02	6.500000E+01	6.500000E+01	6.150000e-02	0.000000e+00	0.000000e+00
+-2.833333E-01	1.166667E-01	1.166667E-01	4.800000e+02	5.000000e+01	5.000000e+01	4.420000e-02	0.000000e+00	0.000000e+00
+-2.833333E-01	1.166667E-01	1.166667E-01	8.650000E+02	3.350000E+02	3.350000E+02	4.110000e-02	0.000000e+00	0.000000e+00
+-8.333333E-02	8.333333E-02	8.333333E-02	3.650000E+02	6.500000E+01	6.500000E+01	9.920000e-02	0.000000e+00	0.000000e+00
+-8.333333E-02	8.333333E-02	8.333333E-02	4.800000e+02	5.000000e+01	5.000000e+01	8.010000e-02	0.000000e+00	0.000000e+00
+-8.333333E-02	8.333333E-02	8.333333E-02	8.650000E+02	3.350000E+02	3.350000E+02	7.280000e-02	0.000000e+00	0.000000e+00
+8.333333E-02	8.333333E-02	8.333333E-02	3.650000E+02	6.500000E+01	6.500000E+01	9.230000e-02	0.000000e+00	0.000000e+00
+8.333333E-02	8.333333E-02	8.333333E-02	4.800000e+02	5.000000e+01	5.000000e+01	7.070000e-02	0.000000e+00	0.000000e+00
+8.333333E-02	8.333333E-02	8.333333E-02	8.650000E+02	3.350000E+02	3.350000E+02	5.980000e-02	0.000000e+00	0.000000e+00
+2.833333E-01	1.166667E-01	1.166667E-01	3.650000E+02	6.500000E+01	6.500000E+01	5.160000e-02	0.000000e+00	0.000000e+00
+2.833333E-01	1.166667E-01	1.166667E-01	4.800000e+02	5.000000e+01	5.000000e+01	3.890000e-02	0.000000e+00	0.000000e+00
+2.833333E-01	1.166667E-01	1.166667E-01	8.650000E+02	3.350000E+02	3.350000E+02	3.890000e-02	0.000000e+00	0.000000e+00
+7.000000E-01	3.000000E-01	3.000000E-01	3.650000E+02	6.500000E+01	6.500000E+01	5.030000e-02	0.000000e+00	0.000000e+00
+7.000000E-01	3.000000E-01	3.000000E-01	4.800000e+02	5.000000e+01	5.000000e+01	3.130000e-02	0.000000e+00	0.000000e+00
+7.000000E-01	3.000000E-01	3.000000E-01	8.650000E+02	3.350000E+02	3.350000E+02	3.340000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1413748/d38-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d38-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t38
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-8.333333E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	6.870000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	5.320000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	5.090000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	6.760000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	5.180000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	4.500000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	6.880000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	5.390000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	4.550000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	6.620000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	5.500000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	4.850000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	6.290000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	4.910000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	5.110000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	6.930000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	5.070000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	4.190000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1413748/d44-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d44-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t44
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-8.333333E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	7.590000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	4.900000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	4.820000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	6.560000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	4.820000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	4.860000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	6.590000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	5.210000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	4.720000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	6.890000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	5.720000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	4.670000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	6.450000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	5.260000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	4.750000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	6.250000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	5.480000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	4.480000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1413748/d50-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d50-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t50
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+1.308997E-01	1.308997E-01	1.308997E-01	2.050000e+01	2.050000e+01	2.050000e+01	3.910000e-02	0.000000e+00	0.000000e+00
+1.308997E-01	1.308997E-01	1.308997E-01	6.650000e+01	2.550000e+01	2.550000e+01	1.850000e-02	0.000000e+00	0.000000e+00
+1.308997E-01	1.308997E-01	1.308997E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.160000e-02	0.000000e+00	0.000000e+00
+3.926991E-01	1.308997E-01	1.308997E-01	2.050000e+01	2.050000e+01	2.050000e+01	4.000000e-02	0.000000e+00	0.000000e+00
+3.926991E-01	1.308997E-01	1.308997E-01	6.650000e+01	2.550000e+01	2.550000e+01	2.020000e-02	0.000000e+00	0.000000e+00
+3.926991E-01	1.308997E-01	1.308997E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.570000e-02	0.000000e+00	0.000000e+00
+6.544985E-01	1.308997E-01	1.308997E-01	2.050000e+01	2.050000e+01	2.050000e+01	4.050000e-02	0.000000e+00	0.000000e+00
+6.544985E-01	1.308997E-01	1.308997E-01	6.650000e+01	2.550000e+01	2.550000e+01	1.880000e-02	0.000000e+00	0.000000e+00
+6.544985E-01	1.308997E-01	1.308997E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.580000e-02	0.000000e+00	0.000000e+00
+9.162979E-01	1.308997E-01	1.308997E-01	2.050000e+01	2.050000e+01	2.050000e+01	4.060000e-02	0.000000e+00	0.000000e+00
+9.162979E-01	1.308997E-01	1.308997E-01	6.650000e+01	2.550000e+01	2.550000e+01	2.130000e-02	0.000000e+00	0.000000e+00
+9.162979E-01	1.308997E-01	1.308997E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.310000e-02	0.000000e+00	0.000000e+00
+1.178097E+00	1.308997E-01	1.308997E-01	2.050000e+01	2.050000e+01	2.050000e+01	4.100000e-02	0.000000e+00	0.000000e+00
+1.178097E+00	1.308997E-01	1.308997E-01	6.650000e+01	2.550000e+01	2.550000e+01	2.110000e-02	0.000000e+00	0.000000e+00
+1.178097E+00	1.308997E-01	1.308997E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.470000e-02	0.000000e+00	0.000000e+00
+1.439897E+00	1.308997E-01	1.308997E-01	2.050000e+01	2.050000e+01	2.050000e+01	4.380000e-02	0.000000e+00	0.000000e+00
+1.439897E+00	1.308997E-01	1.308997E-01	6.650000e+01	2.550000e+01	2.550000e+01	2.270000e-02	0.000000e+00	0.000000e+00
+1.439897E+00	1.308997E-01	1.308997E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.450000e-02	0.000000e+00	0.000000e+00
+1.701696E+00	1.308997E-01	1.308997E-01	2.050000e+01	2.050000e+01	2.050000e+01	4.250000e-02	0.000000e+00	0.000000e+00
+1.701696E+00	1.308997E-01	1.308997E-01	6.650000e+01	2.550000e+01	2.550000e+01	2.400000e-02	0.000000e+00	0.000000e+00
+1.701696E+00	1.308997E-01	1.308997E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.520000e-02	0.000000e+00	0.000000e+00
+1.963495E+00	1.308997E-01	1.308997E-01	2.050000e+01	2.050000e+01	2.050000e+01	4.620000e-02	0.000000e+00	0.000000e+00
+1.963495E+00	1.308997E-01	1.308997E-01	6.650000e+01	2.550000e+01	2.550000e+01	2.460000e-02	0.000000e+00	0.000000e+00
+1.963495E+00	1.308997E-01	1.308997E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.590000e-02	0.000000e+00	0.000000e+00
+2.225295E+00	1.308997E-01	1.308997E-01	2.050000e+01	2.050000e+01	2.050000e+01	4.990000e-02	0.000000e+00	0.000000e+00
+2.225295E+00	1.308997E-01	1.308997E-01	6.650000e+01	2.550000e+01	2.550000e+01	2.530000e-02	0.000000e+00	0.000000e+00
+2.225295E+00	1.308997E-01	1.308997E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.580000e-02	0.000000e+00	0.000000e+00
+2.487094E+00	1.308997E-01	1.308997E-01	2.050000e+01	2.050000e+01	2.050000e+01	5.080000e-02	0.000000e+00	0.000000e+00
+2.487094E+00	1.308997E-01	1.308997E-01	6.650000e+01	2.550000e+01	2.550000e+01	2.600000e-02	0.000000e+00	0.000000e+00
+2.487094E+00	1.308997E-01	1.308997E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.500000e-02	0.000000e+00	0.000000e+00
+2.748894E+00	1.308997E-01	1.308997E-01	2.050000e+01	2.050000e+01	2.050000e+01	5.430000e-02	0.000000e+00	0.000000e+00
+2.748894E+00	1.308997E-01	1.308997E-01	6.650000e+01	2.550000e+01	2.550000e+01	2.680000e-02	0.000000e+00	0.000000e+00
+2.748894E+00	1.308997E-01	1.308997E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.580000e-02	0.000000e+00	0.000000e+00
+3.010693E+00	1.308997E-01	1.308997E-01	2.050000e+01	2.050000e+01	2.050000e+01	5.640000e-02	0.000000e+00	0.000000e+00
+3.010693E+00	1.308997E-01	1.308997E-01	6.650000e+01	2.550000e+01	2.550000e+01	2.580000e-02	0.000000e+00	0.000000e+00
+3.010693E+00	1.308997E-01	1.308997E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.640000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1413748/d56-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d56-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t56
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-8.333333E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	7.910000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	3.320000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	2.220000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	8.350000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	3.740000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	2.760000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	8.700000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.670000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	3.300000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	9.130000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	5.180000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	3.080000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	9.330000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	5.340000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	3.440000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	1.091000e-01	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	5.310000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	3.290000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1413748/d62-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d62-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t62
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-7.000000E-01	3.000000E-01	3.000000E-01	2.050000e+01	2.050000e+01	2.050000e+01	7.700000e-02	0.000000e+00	0.000000e+00
+-7.000000E-01	3.000000E-01	3.000000E-01	6.650000e+01	2.550000e+01	2.550000e+01	3.420000e-02	0.000000e+00	0.000000e+00
+-7.000000E-01	3.000000E-01	3.000000E-01	1.960000E+02	1.040000E+02	1.040000E+02	2.310000e-02	0.000000e+00	0.000000e+00
+-2.833333E-01	1.166667E-01	1.166667E-01	2.050000e+01	2.050000e+01	2.050000e+01	7.780000e-02	0.000000e+00	0.000000e+00
+-2.833333E-01	1.166667E-01	1.166667E-01	6.650000e+01	2.550000e+01	2.550000e+01	3.900000e-02	0.000000e+00	0.000000e+00
+-2.833333E-01	1.166667E-01	1.166667E-01	1.960000E+02	1.040000E+02	1.040000E+02	3.360000e-02	0.000000e+00	0.000000e+00
+-8.333333E-02	8.333333E-02	8.333333E-02	2.050000e+01	2.050000e+01	2.050000e+01	1.374000e-01	0.000000e+00	0.000000e+00
+-8.333333E-02	8.333333E-02	8.333333E-02	6.650000e+01	2.550000e+01	2.550000e+01	7.260000e-02	0.000000e+00	0.000000e+00
+-8.333333E-02	8.333333E-02	8.333333E-02	1.960000E+02	1.040000E+02	1.040000E+02	4.130000e-02	0.000000e+00	0.000000e+00
+8.333333E-02	8.333333E-02	8.333333E-02	2.050000e+01	2.050000e+01	2.050000e+01	1.229000e-01	0.000000e+00	0.000000e+00
+8.333333E-02	8.333333E-02	8.333333E-02	6.650000e+01	2.550000e+01	2.550000e+01	6.170000e-02	0.000000e+00	0.000000e+00
+8.333333E-02	8.333333E-02	8.333333E-02	1.960000E+02	1.040000E+02	1.040000E+02	4.050000e-02	0.000000e+00	0.000000e+00
+2.833333E-01	1.166667E-01	1.166667E-01	2.050000e+01	2.050000e+01	2.050000e+01	6.890000e-02	0.000000e+00	0.000000e+00
+2.833333E-01	1.166667E-01	1.166667E-01	6.650000e+01	2.550000e+01	2.550000e+01	3.460000e-02	0.000000e+00	0.000000e+00
+2.833333E-01	1.166667E-01	1.166667E-01	1.960000E+02	1.040000E+02	1.040000E+02	2.470000e-02	0.000000e+00	0.000000e+00
+7.000000E-01	3.000000E-01	3.000000E-01	2.050000e+01	2.050000e+01	2.050000e+01	6.060000e-02	0.000000e+00	0.000000e+00
+7.000000E-01	3.000000E-01	3.000000E-01	6.650000e+01	2.550000e+01	2.550000e+01	3.300000e-02	0.000000e+00	0.000000e+00
+7.000000E-01	3.000000E-01	3.000000E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.720000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1413748/d68-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d68-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t68
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-8.333333E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	9.500000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.650000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	3.460000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	9.030000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.170000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	2.940000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	9.050000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.560000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	3.340000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	9.280000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	5.160000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	2.660000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	8.790000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.840000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	2.490000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	8.660000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.180000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	3.260000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1413748/d74-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d74-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t74
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-8.333333E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	9.510000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.520000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	3.130000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	8.520000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.650000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	2.940000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	8.760000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.820000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	3.100000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	9.570000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.890000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	2.910000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	9.280000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.340000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	2.510000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	8.700000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.310000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	3.530000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1413748/d80-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d80-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t80
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+1.308997E-01	1.308997E-01	1.308997E-01	1.700000e-01	1.700000e-01	1.700000e-01	1.720000e-02	0.000000e+00	0.000000e+00
+1.308997E-01	1.308997E-01	1.308997E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.050000e-02	0.000000e+00	0.000000e+00
+1.308997E-01	1.308997E-01	1.308997E-01	1.125000E+00	3.750000E-01	3.750000E-01	3.270000e-02	0.000000e+00	0.000000e+00
+3.926991E-01	1.308997E-01	1.308997E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.130000e-02	0.000000e+00	0.000000e+00
+3.926991E-01	1.308997E-01	1.308997E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.240000e-02	0.000000e+00	0.000000e+00
+3.926991E-01	1.308997E-01	1.308997E-01	1.125000E+00	3.750000E-01	3.750000E-01	3.280000e-02	0.000000e+00	0.000000e+00
+6.544985E-01	1.308997E-01	1.308997E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.150000e-02	0.000000e+00	0.000000e+00
+6.544985E-01	1.308997E-01	1.308997E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.200000e-02	0.000000e+00	0.000000e+00
+6.544985E-01	1.308997E-01	1.308997E-01	1.125000E+00	3.750000E-01	3.750000E-01	3.120000e-02	0.000000e+00	0.000000e+00
+9.162979E-01	1.308997E-01	1.308997E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.040000e-02	0.000000e+00	0.000000e+00
+9.162979E-01	1.308997E-01	1.308997E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.460000e-02	0.000000e+00	0.000000e+00
+9.162979E-01	1.308997E-01	1.308997E-01	1.125000E+00	3.750000E-01	3.750000E-01	2.930000e-02	0.000000e+00	0.000000e+00
+1.178097E+00	1.308997E-01	1.308997E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.190000e-02	0.000000e+00	0.000000e+00
+1.178097E+00	1.308997E-01	1.308997E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.290000e-02	0.000000e+00	0.000000e+00
+1.178097E+00	1.308997E-01	1.308997E-01	1.125000E+00	3.750000E-01	3.750000E-01	3.160000e-02	0.000000e+00	0.000000e+00
+1.439897E+00	1.308997E-01	1.308997E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.470000e-02	0.000000e+00	0.000000e+00
+1.439897E+00	1.308997E-01	1.308997E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.290000e-02	0.000000e+00	0.000000e+00
+1.439897E+00	1.308997E-01	1.308997E-01	1.125000E+00	3.750000E-01	3.750000E-01	3.280000e-02	0.000000e+00	0.000000e+00
+1.701696E+00	1.308997E-01	1.308997E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.460000e-02	0.000000e+00	0.000000e+00
+1.701696E+00	1.308997E-01	1.308997E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.370000e-02	0.000000e+00	0.000000e+00
+1.701696E+00	1.308997E-01	1.308997E-01	1.125000E+00	3.750000E-01	3.750000E-01	3.310000e-02	0.000000e+00	0.000000e+00
+1.963495E+00	1.308997E-01	1.308997E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.540000e-02	0.000000e+00	0.000000e+00
+1.963495E+00	1.308997E-01	1.308997E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.360000e-02	0.000000e+00	0.000000e+00
+1.963495E+00	1.308997E-01	1.308997E-01	1.125000E+00	3.750000E-01	3.750000E-01	3.820000e-02	0.000000e+00	0.000000e+00
+2.225295E+00	1.308997E-01	1.308997E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.610000e-02	0.000000e+00	0.000000e+00
+2.225295E+00	1.308997E-01	1.308997E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.770000e-02	0.000000e+00	0.000000e+00
+2.225295E+00	1.308997E-01	1.308997E-01	1.125000E+00	3.750000E-01	3.750000E-01	3.700000e-02	0.000000e+00	0.000000e+00
+2.487094E+00	1.308997E-01	1.308997E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.620000e-02	0.000000e+00	0.000000e+00
+2.487094E+00	1.308997E-01	1.308997E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.840000e-02	0.000000e+00	0.000000e+00
+2.487094E+00	1.308997E-01	1.308997E-01	1.125000E+00	3.750000E-01	3.750000E-01	3.680000e-02	0.000000e+00	0.000000e+00
+2.748894E+00	1.308997E-01	1.308997E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.740000e-02	0.000000e+00	0.000000e+00
+2.748894E+00	1.308997E-01	1.308997E-01	5.450000e-01	2.050000e-01	2.050000e-01	3.000000e-02	0.000000e+00	0.000000e+00
+2.748894E+00	1.308997E-01	1.308997E-01	1.125000E+00	3.750000E-01	3.750000E-01	3.950000e-02	0.000000e+00	0.000000e+00
+3.010693E+00	1.308997E-01	1.308997E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.640000e-02	0.000000e+00	0.000000e+00
+3.010693E+00	1.308997E-01	1.308997E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.960000e-02	0.000000e+00	0.000000e+00
+3.010693E+00	1.308997E-01	1.308997E-01	1.125000E+00	3.750000E-01	3.750000E-01	4.360000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1413748/d86-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d86-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t86
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-8.333333E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	3.380000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	3.980000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	6.420000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	4.050000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	4.370000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	6.490000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	5.060000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	5.030000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	6.380000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	4.970000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	5.220000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	6.840000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	5.070000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	5.960000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	7.020000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	5.710000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	5.690000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	8.350000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1413748/d92-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d92-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t92
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-7.000000E-01	3.000000E-01	3.000000E-01	1.700000e-01	1.700000e-01	1.700000e-01	3.850000e-02	0.000000e+00	0.000000e+00
+-7.000000E-01	3.000000E-01	3.000000E-01	5.450000e-01	2.050000e-01	2.050000e-01	4.360000e-02	0.000000e+00	0.000000e+00
+-7.000000E-01	3.000000E-01	3.000000E-01	1.125000E+00	3.750000E-01	3.750000E-01	5.140000e-02	0.000000e+00	0.000000e+00
+-2.833333E-01	1.166667E-01	1.166667E-01	1.700000e-01	1.700000e-01	1.700000e-01	3.990000e-02	0.000000e+00	0.000000e+00
+-2.833333E-01	1.166667E-01	1.166667E-01	5.450000e-01	2.050000e-01	2.050000e-01	4.670000e-02	0.000000e+00	0.000000e+00
+-2.833333E-01	1.166667E-01	1.166667E-01	1.125000E+00	3.750000E-01	3.750000E-01	6.390000e-02	0.000000e+00	0.000000e+00
+-8.333333E-02	8.333333E-02	8.333333E-02	1.700000e-01	1.700000e-01	1.700000e-01	7.110000e-02	0.000000e+00	0.000000e+00
+-8.333333E-02	8.333333E-02	8.333333E-02	5.450000e-01	2.050000e-01	2.050000e-01	7.270000e-02	0.000000e+00	0.000000e+00
+-8.333333E-02	8.333333E-02	8.333333E-02	1.125000E+00	3.750000E-01	3.750000E-01	1.106000e-01	0.000000e+00	0.000000e+00
+8.333333E-02	8.333333E-02	8.333333E-02	1.700000e-01	1.700000e-01	1.700000e-01	6.750000e-02	0.000000e+00	0.000000e+00
+8.333333E-02	8.333333E-02	8.333333E-02	5.450000e-01	2.050000e-01	2.050000e-01	6.590000e-02	0.000000e+00	0.000000e+00
+8.333333E-02	8.333333E-02	8.333333E-02	1.125000E+00	3.750000E-01	3.750000E-01	8.950000e-02	0.000000e+00	0.000000e+00
+2.833333E-01	1.166667E-01	1.166667E-01	1.700000e-01	1.700000e-01	1.700000e-01	3.360000e-02	0.000000e+00	0.000000e+00
+2.833333E-01	1.166667E-01	1.166667E-01	5.450000e-01	2.050000e-01	2.050000e-01	4.630000e-02	0.000000e+00	0.000000e+00
+2.833333E-01	1.166667E-01	1.166667E-01	1.125000E+00	3.750000E-01	3.750000E-01	4.610000e-02	0.000000e+00	0.000000e+00
+7.000000E-01	3.000000E-01	3.000000E-01	1.700000e-01	1.700000e-01	1.700000e-01	3.070000e-02	0.000000e+00	0.000000e+00
+7.000000E-01	3.000000E-01	3.000000E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.870000e-02	0.000000e+00	0.000000e+00
+7.000000E-01	3.000000E-01	3.000000E-01	1.125000E+00	3.750000E-01	3.750000E-01	5.330000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1413748/d98-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d98-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t98
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-8.333333E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	5.120000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	5.540000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	6.660000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	4.370000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	5.040000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	6.850000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	4.870000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	4.800000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	7.240000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	5.160000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	5.070000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	6.930000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	4.430000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	5.090000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	6.670000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	4.280000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	4.870000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	7.020000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1413748/d104-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1413748/d104-x01-y01
+Title=doi:10.17182/hepdata.70879.v1/t104
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-8.333333E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	4.870000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	5.240000e-02	0.000000e+00	0.000000e+00
+-8.333333E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	6.980000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	4.250000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	5.030000e-02	0.000000e+00	0.000000e+00
+-5.000000E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	6.930000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	4.900000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	4.750000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	7.120000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	5.100000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	5.120000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	7.070000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	4.570000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	5.110000e-02	0.000000e+00	0.000000e+00
+5.000000E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	6.580000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	4.530000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	5.120000e-02	0.000000e+00	0.000000e+00
+8.333333E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	6.710000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
diff --git a/analyses/pluginCMS/CMS_2016_I1421646.cc b/analyses/pluginCMS/CMS_2016_I1421646.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1421646.cc
@@ -0,0 +1,61 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Tools/BinnedHistogram.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+
+namespace Rivet {
+
+
+  /// CMS azimuthal decorrelations at 8 TeV
+  class CMS_2016_I1421646 : public Analysis {
+  public:
+
+    DEFAULT_RIVET_ANALYSIS_CTOR(CMS_2016_I1421646);
+
+
+    /// Book projections and histograms
+    void init() {
+
+      FastJets akt(FinalState(), FastJets::ANTIKT, 0.7);
+      addProjection(akt, "antikT");
+
+      _h_deltaPhi.addHistogram( 200.,  300., bookHisto1D(1, 1, 1));
+      _h_deltaPhi.addHistogram( 300.,  400., bookHisto1D(2, 1, 1));
+      _h_deltaPhi.addHistogram( 400.,  500., bookHisto1D(3, 1, 1));
+      _h_deltaPhi.addHistogram( 500.,  700., bookHisto1D(4, 1, 1));
+      _h_deltaPhi.addHistogram( 700.,  900., bookHisto1D(5, 1, 1));
+      _h_deltaPhi.addHistogram( 900.,  1100., bookHisto1D(6, 1, 1));
+      _h_deltaPhi.addHistogram( 1100., 4000., bookHisto1D(7, 1, 1));
+    }
+
+
+    /// Per-event analysis
+    void analyze(const Event & event) {
+
+      const Jets& jets = apply<JetAlg>(event, "antikT").jetsByPt(Cuts::absrap < 2.5 && Cuts::pT > 100*GeV);
+      if (jets.size() < 2) vetoEvent;
+      if (jets[0].pT() < 200*GeV) vetoEvent;
+
+      const double dphi = deltaPhi(jets[0].phi(), jets[1].phi());
+      _h_deltaPhi.fill(jets[0].pT(), dphi, event.weight());
+    }
+
+
+    /// Scale histograms
+    void finalize() {
+      for (Histo1DPtr histo : _h_deltaPhi.getHistograms()) normalize(histo);
+    }
+
+
+  private:
+
+    BinnedHistogram<double> _h_deltaPhi;
+
+  };
+
+
+  // A hook for the plugin system
+  DECLARE_RIVET_PLUGIN(CMS_2016_I1421646);
+
+}
diff --git a/analyses/pluginCMS/CMS_2016_I1421646.info b/analyses/pluginCMS/CMS_2016_I1421646.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1421646.info
@@ -0,0 +1,47 @@
+Name: CMS_2016_I1421646
+Year: 2016
+Summary: Dijet azimuthal decorrelations in $pp$ collisions at $\sqrt{s} = 8$ TeV
+Experiment: CMS
+Collider: LHC
+SpiresID: 1421646
+Status: VALIDATED
+Authors:
+ - Giannis Flouris, Panos Kokkas, Evangelos Paradas
+ - Klaus Rabbertz, Georg Sieber
+References:
+ - arXiv:1602.04384  [hep-ex]
+ - CERN-PH-EP-2016-013
+RunInfo:
+   QCD at $\sqrt{s} = 8\;\TeV$
+Beams: [p+, p+]
+Energies: [8000]
+PtCuts: [100]
+Description:
+ 'A measurement of the decorrelation of azimuthal angles between the two jets with the
+ largest transverse momenta is presented for seven regions of leading jet transverse
+ momentum up to 2.2 TeV. The analysis is based on the proton-proton collision data
+ collected with the CMS experiment at a centre-of-mass energy of 8 TeV corresponding
+ to an integrated luminosity of 19.7/fb. The dijet azimuthal decorrelation is caused by
+ the radiation of additional jets and probes the dynamics of multijet production. The
+ results are compared to fixed-order predictions of perturbative quantum chromodynamics
+ (QCD), and to simulations using Monte Carlo event generators that include parton showers,
+ hadronization, and multiparton interactions.  Event generators with only two outgoing
+ high transverse momentum partons fail to describe the measurement, even when supplemented
+ with next-to-leading-order QCD corrections and parton showers. Much better agreement
+ is achieved when at least three outgoing partons are complemented through either
+ next-to-leading-order predictions or parton showers.  This observation emphasizes
+ the need to improve predictions for multijet production.'
+BibKey: Khachatryan:2016hkr
+BibTeX: '@article{Khachatryan:2016hkr,
+      author         = "Khachatryan, Vardan and others",
+      title          = "{Measurement of dijet azimuthal decorrelation in $pp$
+                        collisions at $\sqrt{s}$ = 8 TeV}",
+      collaboration  = "CMS",
+      journal        = "Submitted to: Eur. Phys. J. C",
+      year           = "2016",
+      eprint         = "1602.04384",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CMS-SMP-14-015, CERN-PH-EP-2016-013, CERN-EP-2016-013",
+      SLACcitation   = "%%CITATION = ARXIV:1602.04384;%%"
+}'
diff --git a/analyses/pluginCMS/CMS_2016_I1421646.plot b/analyses/pluginCMS/CMS_2016_I1421646.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1421646.plot
@@ -0,0 +1,31 @@
+# BEGIN PLOT /CMS_2016_I1421646/d.*
+XLabel=$\Delta\phi$ [rad]
+YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\Delta\phi}$ [rad$^{-1}$]
+FullRange=1
+LogY=1
+LegendXPos=0.1
+NormalizeToIntegral=1
+RatioPlotYMin=0.39
+RatioPlotYMax=2.51
+# END PLOT
+# BEGIN PLOT /CMS_2016_I1421646/d01-x01-y01
+Title=CMS, 8 TeV, Di-jet azimuthal decorrel., $200<p_{T}^\text{leading}<300$~GeV
+# END PLOT
+# BEGIN PLOT /CMS_2016_I1421646/d02-x01-y01
+Title=CMS, 8 TeV, Di-jet azimuthal decorrel., $300<p_{T}^\text{leading}<400$~GeV
+# END PLOT
+# BEGIN PLOT /CMS_2016_I1421646/d03-x01-y01
+Title=CMS, 8 TeV, Di-jet azimuthal decorrel., $400<p_{T}^\text{leading}<500$~GeV
+# END PLOT
+# BEGIN PLOT /CMS_2016_I1421646/d04-x01-y01
+Title=CMS, 8 TeV, Di-jet azimuthal decorrel.,$ 500<p_{T}^\text{leading}<700$~GeV
+# END PLOT
+# BEGIN PLOT /CMS_2016_I1421646/d05-x01-y01
+Title=CMS, 8 TeV, Di-jet azimuthal decorrel.,$ 700<p_{T}^\text{leading}<900$~GeV
+# END PLOT
+# BEGIN PLOT /CMS_2016_I1421646/d06-x01-y01
+Title=CMS, 8 TeV, Di-jet azimuthal decorrelation,$ 900<p_{T}^\text{leading}<1100$~GeV
+# END PLOT
+# BEGIN PLOT /CMS_2016_I1421646/d07-x01-y01
+Title=CMS, 8 TeV, Di-jet azimuthal decorrel., $p_{T}^\text{leading}>1100$~GeV
+# END PLOT
diff --git a/analyses/pluginCMS/CMS_2016_I1421646.yoda b/analyses/pluginCMS/CMS_2016_I1421646.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1421646.yoda
@@ -0,0 +1,203 @@
+# BEGIN YODA_SCATTER2D 
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1421646/d01-x01-y01
+PolyMarker=*
+Title=Dphi Xsection
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.745329e-01	1.745329e-01	1.745329e-01	7.767575e-05	1.518546e-05	1.518546e-05
+4.799655e-01	1.308997e-01	1.308997e-01	8.701873e-05	1.836334e-05	1.836334e-05
+7.417649e-01	1.308997e-01	1.308997e-01	2.744180e-04	3.601370e-05	3.601370e-05
+9.599311e-01	8.726646e-02	8.726646e-02	4.589361e-04	5.701513e-05	5.701513e-05
+1.134464e+00	8.726647e-02	8.726647e-02	5.118623e-04	5.786918e-05	5.786918e-05
+1.308997e+00	8.726646e-02	8.726646e-02	1.203780e-03	9.284249e-05	9.284249e-05
+1.483530e+00	8.726647e-02	8.726647e-02	1.932253e-03	1.172729e-04	1.172729e-04
+1.614430e+00	4.363323e-02	4.363323e-02	2.849008e-03	2.095548e-04	2.095548e-04
+1.701696e+00	4.363323e-02	4.363323e-02	4.564153e-03	2.663183e-04	2.663183e-04
+1.788962e+00	4.363323e-02	4.363323e-02	7.309459e-03	3.463909e-04	3.463909e-04
+1.876229e+00	4.363323e-02	4.363323e-02	9.805345e-03	4.055917e-04	4.055917e-04
+1.963495e+00	4.363323e-02	4.363323e-02	1.580006e-02	5.101016e-04	5.101016e-04
+2.050762e+00	4.363323e-02	4.363323e-02	2.415441e-02	6.464507e-04	6.464507e-04
+2.138028e+00	4.363323e-02	4.363323e-02	3.847388e-02	8.498316e-04	8.498316e-04
+2.225295e+00	4.363323e-02	4.363323e-02	5.888829e-02	1.109193e-03	1.109193e-03
+2.312561e+00	4.363323e-02	4.363323e-02	9.177187e-02	1.480794e-03	1.480794e-03
+2.399828e+00	4.363323e-02	4.363323e-02	1.353775e-01	1.952873e-03	1.952873e-03
+2.487094e+00	4.363323e-02	4.363323e-02	2.010864e-01	2.644717e-03	2.644717e-03
+2.574361e+00	4.363323e-02	4.363323e-02	3.066337e-01	3.710494e-03	3.710494e-03
+2.661627e+00	4.363323e-02	4.363323e-02	4.500335e-01	5.168968e-03	5.168968e-03
+2.748894e+00	4.363323e-02	4.363323e-02	6.601370e-01	7.314300e-03	7.314300e-03
+2.836160e+00	4.363323e-02	4.363323e-02	9.827929e-01	1.059776e-02	1.059776e-02
+2.923426e+00	4.363323e-02	4.363323e-02	1.507658e+00	1.593221e-02	1.593221e-02
+3.010693e+00	4.363323e-02	4.363323e-02	2.490035e+00	2.590226e-02	2.590226e-02
+3.097959e+00	4.363323e-02	4.363323e-02	4.462178e+00	4.577877e-02	4.577877e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D 
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1421646/d02-x01-y01
+PolyMarker=*
+Title=Unfold Response hdummy_pt300_400 \rightarrow hdummy_pt300_400
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.181662e-01	2.181662e-01	2.181662e-01	1.979248e-05	8.531870e-06	8.531870e-06
+6.544985e-01	2.181662e-01	2.181662e-01	7.790991e-05	1.690694e-05	1.690694e-05
+1.003564e+00	1.308997e-01	1.308997e-01	1.367205e-04	2.817626e-05	2.817626e-05
+1.265364e+00	1.308997e-01	1.308997e-01	5.764713e-04	5.928378e-05	5.928378e-05
+1.483530e+00	8.726647e-02	8.726647e-02	9.416152e-04	9.591634e-05	9.591634e-05
+1.614430e+00	4.363323e-02	4.363323e-02	1.793934e-03	1.929270e-04	1.929270e-04
+1.701696e+00	4.363323e-02	4.363323e-02	2.999194e-03	2.518535e-04	2.518535e-04
+1.788962e+00	4.363323e-02	4.363323e-02	4.003329e-03	2.935553e-04	2.935553e-04
+1.876229e+00	4.363323e-02	4.363323e-02	5.472286e-03	3.456075e-04	3.456075e-04
+1.963495e+00	4.363323e-02	4.363323e-02	1.089571e-02	4.935716e-04	4.935716e-04
+2.050762e+00	4.363323e-02	4.363323e-02	1.519258e-02	5.988775e-04	5.988775e-04
+2.138028e+00	4.363323e-02	4.363323e-02	2.651699e-02	8.238367e-04	8.238367e-04
+2.225295e+00	4.363323e-02	4.363323e-02	4.489768e-02	1.103188e-03	1.103188e-03
+2.312561e+00	4.363323e-02	4.363323e-02	6.996383e-02	1.442175e-03	1.442175e-03
+2.399828e+00	4.363323e-02	4.363323e-02	1.083535e-01	1.916562e-03	1.916562e-03
+2.487094e+00	4.363323e-02	4.363323e-02	1.691232e-01	2.617613e-03	2.617613e-03
+2.574361e+00	4.363323e-02	4.363323e-02	2.600564e-01	3.565035e-03	3.565035e-03
+2.661627e+00	4.363323e-02	4.363323e-02	3.882854e-01	4.877454e-03	4.877454e-03
+2.748894e+00	4.363323e-02	4.363323e-02	5.938023e-01	6.995717e-03	6.995717e-03
+2.836160e+00	4.363323e-02	4.363323e-02	8.935184e-01	1.004880e-02	1.004880e-02
+2.923426e+00	4.363323e-02	4.363323e-02	1.397751e+00	1.514499e-02	1.514499e-02
+3.010693e+00	4.363323e-02	4.363323e-02	2.433724e+00	2.566876e-02	2.566876e-02
+3.097959e+00	4.363323e-02	4.363323e-02	5.028295e+00	5.185160e-02	5.185160e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D 
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1421646/d03-x01-y01
+PolyMarker=*
+Title=Unfold Response hdummy_pt400_500 \rightarrow hdummy_pt400_500
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.181662e-01	2.181662e-01	2.181662e-01	8.592449e-06	6.337442e-06	6.337442e-06
+6.544985e-01	2.181662e-01	2.181662e-01	3.595683e-05	1.316612e-05	1.316612e-05
+1.003564e+00	1.308997e-01	1.308997e-01	7.932875e-05	2.439404e-05	2.439404e-05
+1.265364e+00	1.308997e-01	1.308997e-01	2.587423e-04	4.738320e-05	4.738320e-05
+1.483530e+00	8.726647e-02	8.726647e-02	5.245839e-04	8.403074e-05	8.403074e-05
+1.614430e+00	4.363323e-02	4.363323e-02	9.050810e-04	1.640561e-04	1.640561e-04
+1.701696e+00	4.363323e-02	4.363323e-02	1.957607e-03	2.401256e-04	2.401256e-04
+1.788962e+00	4.363323e-02	4.363323e-02	2.695950e-03	2.906798e-04	2.906798e-04
+1.876229e+00	4.363323e-02	4.363323e-02	4.548537e-03	3.705005e-04	3.705005e-04
+1.963495e+00	4.363323e-02	4.363323e-02	6.438627e-03	4.449785e-04	4.449785e-04
+2.050762e+00	4.363323e-02	4.363323e-02	1.092064e-02	5.925918e-04	5.925918e-04
+2.138028e+00	4.363323e-02	4.363323e-02	1.910224e-02	7.914597e-04	7.914597e-04
+2.225295e+00	4.363323e-02	4.363323e-02	3.132281e-02	1.059421e-03	1.059421e-03
+2.312561e+00	4.363323e-02	4.363323e-02	5.574588e-02	1.445045e-03	1.445045e-03
+2.399828e+00	4.363323e-02	4.363323e-02	9.081493e-02	1.954306e-03	1.954306e-03
+2.487094e+00	4.363323e-02	4.363323e-02	1.387391e-01	2.528321e-03	2.528321e-03
+2.574361e+00	4.363323e-02	4.363323e-02	2.179307e-01	3.414657e-03	3.414657e-03
+2.661627e+00	4.363323e-02	4.363323e-02	3.359284e-01	4.718641e-03	4.718641e-03
+2.748894e+00	4.363323e-02	4.363323e-02	5.252143e-01	6.719342e-03	6.719342e-03
+2.836160e+00	4.363323e-02	4.363323e-02	8.130246e-01	9.686422e-03	9.686422e-03
+2.923426e+00	4.363323e-02	4.363323e-02	1.298870e+00	1.454370e-02	1.454370e-02
+3.010693e+00	4.363323e-02	4.363323e-02	2.349199e+00	2.516738e-02	2.516738e-02
+3.097959e+00	4.363323e-02	4.363323e-02	5.553512e+00	5.746097e-02	5.746097e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D 
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1421646/d04-x01-y01
+PolyMarker=*
+Title=Unfold Response hdummy_pt500_700 \rightarrow hdummy_pt500_700
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.181662e-01	2.181662e-01	2.181662e-01	4.712108e-06	1.793612e-06	1.793612e-06
+6.544985e-01	2.181662e-01	2.181662e-01	1.623108e-05	3.454152e-06	3.454152e-06
+1.003564e+00	1.308997e-01	1.308997e-01	4.078939e-05	7.247204e-06	7.247204e-06
+1.265364e+00	1.308997e-01	1.308997e-01	9.995382e-05	1.142390e-05	1.142390e-05
+1.483530e+00	8.726647e-02	8.726647e-02	2.623369e-04	2.360114e-05	2.360114e-05
+1.614430e+00	4.363323e-02	4.363323e-02	6.018251e-04	5.159070e-05	5.159070e-05
+1.701696e+00	4.363323e-02	4.363323e-02	9.655323e-04	6.748668e-05	6.748668e-05
+1.788962e+00	4.363323e-02	4.363323e-02	1.477317e-03	8.656513e-05	8.656513e-05
+1.876229e+00	4.363323e-02	4.363323e-02	2.442400e-03	1.140483e-04	1.140483e-04
+1.963495e+00	4.363323e-02	4.363323e-02	4.373574e-03	1.480384e-04	1.480384e-04
+2.050762e+00	4.363323e-02	4.363323e-02	7.227919e-03	2.028067e-04	2.028067e-04
+2.138028e+00	4.363323e-02	4.363323e-02	1.342482e-02	2.944947e-04	2.944947e-04
+2.225295e+00	4.363323e-02	4.363323e-02	2.422545e-02	4.472349e-04	4.472349e-04
+2.312561e+00	4.363323e-02	4.363323e-02	4.167945e-02	6.692490e-04	6.692490e-04
+2.399828e+00	4.363323e-02	4.363323e-02	6.954502e-02	1.022796e-03	1.022796e-03
+2.487094e+00	4.363323e-02	4.363323e-02	1.136216e-01	1.526841e-03	1.526841e-03
+2.574361e+00	4.363323e-02	4.363323e-02	1.821959e-01	2.302481e-03	2.302481e-03
+2.661627e+00	4.363323e-02	4.363323e-02	2.903313e-01	3.456395e-03	3.456395e-03
+2.748894e+00	4.363323e-02	4.363323e-02	4.587184e-01	5.345521e-03	5.345521e-03
+2.836160e+00	4.363323e-02	4.363323e-02	7.320102e-01	8.334045e-03	8.334045e-03
+2.923426e+00	4.363323e-02	4.363323e-02	1.202309e+00	1.341780e-02	1.341780e-02
+3.010693e+00	4.363323e-02	4.363323e-02	2.266886e+00	2.504032e-02	2.504032e-02
+3.097959e+00	4.363323e-02	4.363323e-02	6.046069e+00	6.592012e-02	6.592012e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D 
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1421646/d05-x01-y01
+PolyMarker=*
+Title=Unfold Response hdummy_pt700_900 \rightarrow hdummy_pt700_900
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.352630e+00	2.181662e-01	2.181662e-01	7.033542e-05	2.181057e-05	2.181057e-05
+1.658063e+00	8.726646e-02	8.726646e-02	3.016951e-04	7.381825e-05	7.381825e-05
+1.832596e+00	8.726647e-02	8.726647e-02	1.017503e-03	1.361114e-04	1.361114e-04
+1.963495e+00	4.363323e-02	4.363323e-02	2.378573e-03	3.032188e-04	3.032188e-04
+2.050762e+00	4.363323e-02	4.363323e-02	3.752332e-03	3.929195e-04	3.929195e-04
+2.138028e+00	4.363323e-02	4.363323e-02	7.562117e-03	5.644491e-04	5.644491e-04
+2.225295e+00	4.363323e-02	4.363323e-02	1.452862e-02	8.026528e-04	8.026528e-04
+2.312561e+00	4.363323e-02	4.363323e-02	2.771569e-02	1.134157e-03	1.134157e-03
+2.399828e+00	4.363323e-02	4.363323e-02	4.576235e-02	1.526454e-03	1.526454e-03
+2.487094e+00	4.363323e-02	4.363323e-02	8.039223e-02	2.147319e-03	2.147319e-03
+2.574361e+00	4.363323e-02	4.363323e-02	1.330747e-01	2.975316e-03	2.975316e-03
+2.661627e+00	4.363323e-02	4.363323e-02	2.208746e-01	4.173581e-03	4.173581e-03
+2.748894e+00	4.363323e-02	4.363323e-02	3.725030e-01	6.091676e-03	6.091676e-03
+2.836160e+00	4.363323e-02	4.363323e-02	6.102004e-01	8.909738e-03	8.909738e-03
+2.923426e+00	4.363323e-02	4.363323e-02	1.039225e+00	1.374732e-02	1.374732e-02
+3.010693e+00	4.363323e-02	4.363323e-02	2.098361e+00	2.567240e-02	2.567240e-02
+3.097959e+00	4.363323e-02	4.363323e-02	6.799805e+00	7.860153e-02	7.860153e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D 
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1421646/d06-x01-y01
+PolyMarker=*
+Title=Unfold Response hdummy_pt900_1100 \rightarrow hdummy_pt900_1100
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.701696e+00	1.308997e-01	1.308997e-01	2.050838e-04	1.222391e-04	1.222391e-04
+1.963495e+00	1.308997e-01	1.308997e-01	1.299515e-03	3.102811e-04	3.102811e-04
+2.181662e+00	8.726647e-02	8.726647e-02	5.999294e-03	8.368988e-04	8.368988e-04
+2.312561e+00	4.363323e-02	4.363323e-02	1.507544e-02	1.930274e-03	1.930274e-03
+2.399828e+00	4.363323e-02	4.363323e-02	2.893973e-02	2.705860e-03	2.705860e-03
+2.487094e+00	4.363323e-02	4.363323e-02	5.670413e-02	3.855044e-03	3.855044e-03
+2.574361e+00	4.363323e-02	4.363323e-02	1.058549e-01	5.326412e-03	5.326412e-03
+2.661627e+00	4.363323e-02	4.363323e-02	1.721036e-01	6.963611e-03	6.963611e-03
+2.748894e+00	4.363323e-02	4.363323e-02	3.007192e-01	9.558624e-03	9.558624e-03
+2.836160e+00	4.363323e-02	4.363323e-02	5.143609e-01	1.312908e-02	1.312908e-02
+2.923426e+00	4.363323e-02	4.363323e-02	9.000551e-01	1.851747e-02	1.851747e-02
+3.010693e+00	4.363323e-02	4.363323e-02	1.906966e+00	3.167640e-02	3.167640e-02
+3.097959e+00	4.363323e-02	4.363323e-02	7.441865e+00	9.743503e-02	9.743503e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D 
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1421646/d07-x01-y01
+PolyMarker=*
+Title=Unfold Response hdummy_pt1100 \rightarrow hdummy_pt1100
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.225295e+00	1.308997e-01	1.308997e-01	3.573956e-03	1.035018e-03	1.035018e-03
+2.443461e+00	8.726646e-02	8.726646e-02	2.922177e-02	3.683667e-03	3.683667e-03
+2.574361e+00	4.363323e-02	4.363323e-02	5.574701e-02	7.458388e-03	7.458388e-03
+2.661627e+00	4.363323e-02	4.363323e-02	1.123989e-01	1.064458e-02	1.064458e-02
+2.748894e+00	4.363323e-02	4.363323e-02	2.117295e-01	1.480840e-02	1.480840e-02
+2.836160e+00	4.363323e-02	4.363323e-02	3.936362e-01	2.058910e-02	2.058910e-02
+2.923426e+00	4.363323e-02	4.363323e-02	7.120483e-01	2.862755e-02	2.862755e-02
+3.010693e+00	4.363323e-02	4.363323e-02	1.721823e+00	4.821293e-02	4.821293e-02
+3.097959e+00	4.363323e-02	4.363323e-02	8.182634e+00	1.449799e-01	1.449799e-01
+# END YODA_SCATTER2D
+
diff --git a/analyses/pluginCMS/CMS_2016_I1430892.cc b/analyses/pluginCMS/CMS_2016_I1430892.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1430892.cc
@@ -0,0 +1,259 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/IdentifiedFinalState.hh"
+#include "Rivet/Projections/PromptFinalState.hh"
+#include "Rivet/Projections/DressedLeptons.hh"
+#include "Rivet/Projections/PartonicTops.hh"
+
+namespace Rivet {
+
+
+  /// CMS 8 TeV dilepton channel ttbar charge asymmetry analysis
+  class CMS_2016_I1430892 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(CMS_2016_I1430892);
+
+
+    /// Book histograms and initialise projections
+    void init() {
+
+      // Complete final state
+      FinalState fs(-MAXDOUBLE, MAXDOUBLE, 0*GeV);
+
+      // Projection for dressed electrons and muons
+      IdentifiedFinalState photons(fs);
+      photons.acceptIdPair(PID::PHOTON);
+
+      IdentifiedFinalState el_id(fs);
+      el_id.acceptIdPair(PID::ELECTRON);
+      PromptFinalState electrons(el_id);
+      addProjection(electrons, "Electrons");
+      DressedLeptons dressed_electrons(photons, electrons, 0.1, Cuts::open(), true, false);
+      addProjection(dressed_electrons, "DressedElectrons");
+
+      IdentifiedFinalState mu_id(fs);
+      mu_id.acceptIdPair(PID::MUON);
+      PromptFinalState muons(mu_id);
+      addProjection(muons, "Muons");
+      DressedLeptons dressed_muons(photons, muons, 0.1, Cuts::open(), true, false);
+      addProjection(dressed_muons, "DressedMuons");
+
+      // Parton-level top quarks
+      declare(PartonicTops(PartonicTops::E_MU, false), "LeptonicPartonTops");
+
+
+      // Booking of histograms
+
+      // This histogram is independent of the parton-level information, and is an
+      // addition to the original analysis. It is compared to the same data as
+      // the parton-level delta_abseta histogram d05-x01-y01.
+      _h_dabsetadressedleptons = bookHisto1D("d00-x01-y01", _bins_dabseta);
+
+      // The remaining histos use parton-level information
+      _h_dabseta = bookHisto1D("d05-x01-y01", _bins_dabseta);
+      _h_dabsrapidity = bookHisto1D("d02-x01-y01", _bins_dabsrapidity);
+
+      // 2D histos
+      _h_dabsrapidity_var[0] = bookHisto2D("d11-x01-y01", _bins_dabsrapidity, _bins_tt_mass);
+      _h_dabseta_var[0] = bookHisto2D("d17-x01-y01", _bins_dabseta, _bins_tt_mass);
+
+      _h_dabsrapidity_var[1] = bookHisto2D("d23-x01-y01", _bins_dabsrapidity, _bins_tt_pT);
+      _h_dabseta_var[1] = bookHisto2D("d29-x01-y01", _bins_dabseta, _bins_tt_pT);
+
+      _h_dabsrapidity_var[2] = bookHisto2D("d35-x01-y01", _bins_dabsrapidity, _bins_tt_absrapidity);
+      _h_dabseta_var[2] = bookHisto2D("d41-x01-y01", _bins_dabseta, _bins_tt_absrapidity);
+
+      // Profile histos for asymmetries
+      _h_dabsrapidity_profile[0] = bookProfile1D("d08-x01-y01", _bins_tt_mass);
+      _h_dabseta_profile[0] = bookProfile1D("d14-x01-y01", _bins_tt_mass);
+
+      _h_dabsrapidity_profile[1] = bookProfile1D("d20-x01-y01", _bins_tt_pT);
+      _h_dabseta_profile[1] = bookProfile1D("d26-x01-y01", _bins_tt_pT);
+
+      _h_dabsrapidity_profile[2] = bookProfile1D("d32-x01-y01", _bins_tt_absrapidity);
+      _h_dabseta_profile[2] = bookProfile1D("d38-x01-y01", _bins_tt_absrapidity);
+
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      const double weight = event.weight();
+
+      // Use particle-level leptons for the first histogram
+      const DressedLeptons& dressed_electrons = applyProjection<DressedLeptons>(event, "DressedElectrons");
+      const DressedLeptons& dressed_muons = applyProjection<DressedLeptons>(event, "DressedMuons");
+
+      const std::vector<DressedLepton> dressedels = dressed_electrons.dressedLeptons();
+      const std::vector<DressedLepton> dressedmus = dressed_muons.dressedLeptons();
+
+      const size_t ndressedel = dressedels.size();
+      const size_t ndressedmu = dressedmus.size();
+
+      // For the particle-level histogram, require exactly one electron and exactly one muon, to select the ttbar->emu channel.
+      // Note this means ttbar->emu events with additional PromptFinalState dilepton pairs from the shower are vetoed - for PYTHIA8,
+      // this affects ~0.5% of events, so the effect is well below the level of sensitivity of the measured distribution.
+      if ( ndressedel == 1 && ndressedmu == 1 ) {
+
+        const int electrontouse = 0, muontouse = 0;
+
+        // Opposite-charge leptons only
+        if ( sameSign(dressedels[electrontouse], dressedmus[muontouse]) ) {
+          MSG_INFO("Error, e and mu have same charge, skipping event");
+        } else {
+          // Get the four-momenta of the positively- and negatively-charged leptons
+          FourMomentum lepPlus = dressedels[electrontouse].charge() > 0 ? dressedels[electrontouse] : dressedmus[muontouse];
+          FourMomentum lepMinus = dressedels[electrontouse].charge() > 0 ? dressedmus[muontouse] : dressedels[electrontouse];
+
+          // Now calculate the variable
+          double dabseta_temp = lepPlus.abseta() - lepMinus.abseta();
+
+          fillWithUFOF( _h_dabsetadressedleptons, dabseta_temp, weight );
+        }
+
+      }
+
+
+      // The remaining variables use parton-level information.
+
+      // Get the leptonically decaying tops
+      const Particles leptonicpartontops = apply<ParticleFinder>(event, "LeptonicPartonTops").particlesByPt();
+      Particles chargedleptons;
+
+      unsigned int ntrueleptonictops = 0;
+      bool oppositesign = false;
+
+      if ( leptonicpartontops.size() == 2 ) {
+        for (size_t k = 0; k < leptonicpartontops.size(); ++k) {
+
+          // Get the lepton
+          const Particle lepTop = leptonicpartontops[k];
+          const auto isPromptChargedLepton = [](const Particle& p){return (isChargedLepton(p) && isPrompt(p, false, false));};
+          Particles lepton_candidates = lepTop.allDescendants(firstParticleWith(isPromptChargedLepton), false);
+          if ( lepton_candidates.size() < 1 ) MSG_WARNING("error, PartonicTops::E_MU top quark had no daughter lepton candidate, skipping event.");
+
+          // In some cases there is no lepton from the W decay but only leptons from the decay of a radiated gamma.
+          // These hadronic PartonicTops are currently being mistakenly selected by PartonicTops::E_MU (as of April 2017), and need to be rejected.
+          // PartonicTops::E_MU is being fixed in Rivet, and when it is the veto below should do nothing.
+          /// @todo Should no longer be necessary -- remove
+          bool istrueleptonictop = false;
+          for (size_t i = 0; i < lepton_candidates.size(); ++i) {
+            const Particle& lepton_candidate = lepton_candidates[i];
+            if ( lepton_candidate.hasParent(PID::PHOTON) ) {
+              MSG_DEBUG("Found gamma parent, top: " << k+1 << " of " << leptonicpartontops.size() << " , lepton: " << i+1 << " of " << lepton_candidates.size());
+              continue;
+            }
+            if ( !istrueleptonictop && sameSign(lepTop,lepton_candidate) ) {
+              chargedleptons.push_back(lepton_candidate);
+              istrueleptonictop = true;
+            }
+            else MSG_WARNING("Error, found extra prompt charged lepton from top decay (and without gamma parent), ignoring it.");
+          }
+          if ( istrueleptonictop ) ++ntrueleptonictops;
+        }
+      }
+
+      if ( ntrueleptonictops == 2 ) {
+        oppositesign = !( sameSign(chargedleptons[0],chargedleptons[1]) );
+        if ( !oppositesign ) MSG_WARNING("error, same charge tops, skipping event.");
+      }
+
+      if ( ntrueleptonictops == 2 && oppositesign ) {
+
+        // Get the four-momenta of the positively- and negatively-charged leptons
+        const FourMomentum lepPlus = chargedleptons[0].charge() > 0 ? chargedleptons[0] : chargedleptons[1];
+        const FourMomentum lepMinus = chargedleptons[0].charge() > 0 ? chargedleptons[1] : chargedleptons[0];
+
+        const double dabseta_temp = lepPlus.abseta() - lepMinus.abseta();
+
+        // Get the four-momenta of the positively- and negatively-charged tops
+        const FourMomentum topPlus_p4 = leptonicpartontops[0].pdgId() > 0 ? leptonicpartontops[0] : leptonicpartontops[1];
+        const FourMomentum topMinus_p4 = leptonicpartontops[0].pdgId() > 0 ? leptonicpartontops[1] : leptonicpartontops[0];
+
+        const FourMomentum ttbar_p4 = topPlus_p4 + topMinus_p4;
+
+        const double tt_mass_temp = ttbar_p4.mass();
+        const double tt_absrapidity_temp = ttbar_p4.absrapidity();
+        const double tt_pT_temp = ttbar_p4.pT();
+        const double dabsrapidity_temp = topPlus_p4.absrapidity() - topMinus_p4.absrapidity();
+
+        // Fill parton-level histos
+        fillWithUFOF( _h_dabseta, dabseta_temp, weight );
+        fillWithUFOF( _h_dabsrapidity, dabsrapidity_temp, weight );
+
+        // Now fill the same variables in the 2D and profile histos vs ttbar invariant mass, pT, and absolute rapidity
+        for (int i_var = 0; i_var < 3; ++i_var) {
+          double var;
+          if ( i_var == 0 ) {
+            var = tt_mass_temp;
+          } else if ( i_var == 1 ) {
+            var = tt_pT_temp;
+          } else {
+            var = tt_absrapidity_temp;
+          }
+
+          fillWithUFOF( _h_dabsrapidity_var[i_var], dabsrapidity_temp, var, weight );
+          fillWithUFOF( _h_dabseta_var[i_var], dabseta_temp, var, weight );
+
+          fillWithUFOF( _h_dabsrapidity_profile[i_var], dabsrapidity_temp, var, weight, (_h_dabsrapidity->xMax() + _h_dabsrapidity->xMin())/2. );
+          fillWithUFOF( _h_dabseta_profile[i_var], dabseta_temp, var, weight, (_h_dabseta->xMax() + _h_dabseta->xMin())/2. );
+        }
+
+      }
+
+    }
+
+
+    /// Normalise histograms to unit area
+    void finalize() {
+
+      normalize(_h_dabsetadressedleptons);
+
+      normalize(_h_dabseta);
+      normalize(_h_dabsrapidity);
+
+      for (int i_var = 0; i_var < 3; ++i_var) {
+        normalize(_h_dabsrapidity_var[i_var]);
+        normalize(_h_dabseta_var[i_var]);
+      }
+
+    }
+
+
+  private:
+
+    Histo1DPtr _h_dabsetadressedleptons, _h_dabseta, _h_dabsrapidity;
+    Histo2DPtr _h_dabseta_var[3], _h_dabsrapidity_var[3];
+    Profile1DPtr _h_dabseta_profile[3], _h_dabsrapidity_profile[3];
+
+    const vector<double> _bins_tt_mass = {300., 430., 530., 1200.};
+    const vector<double> _bins_tt_pT = {0., 41., 92., 300.};
+    const vector<double> _bins_tt_absrapidity = {0., 0.34, 0.75, 1.5};
+    const vector<double> _bins_dabseta = { -2., -68./60., -48./60., -32./60., -20./60., -8./60., 0., 8./60., 20./60., 32./60., 48./60., 68./60., 2.};
+    const vector<double> _bins_dabsrapidity = {-2., -44./60., -20./60., 0., 20./60., 44./60., 2.};
+
+    void fillWithUFOF(Histo1DPtr h, double x, double w) {
+      h->fill(std::max(std::min(x, h->xMax()-1e-9),h->xMin()+1e-9), w);
+    }
+
+    void fillWithUFOF(Histo2DPtr h, double x, double y, double w) {
+      h->fill(std::max(std::min(x, h->xMax()-1e-9),h->xMin()+1e-9), std::max(std::min(y, h->yMax()-1e-9),h->yMin()+1e-9), w);
+    }
+
+    void fillWithUFOF(Profile1DPtr h, double x, double y, double w, double c) {
+      h->fill(std::max(std::min(y, h->xMax()-1e-9),h->xMin()+1e-9), float(x > c) - float(x < c), w);
+    }
+
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(CMS_2016_I1430892);
+
+
+}
diff --git a/analyses/pluginCMS/CMS_2016_I1430892.info b/analyses/pluginCMS/CMS_2016_I1430892.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1430892.info
@@ -0,0 +1,52 @@
+Name: CMS_2016_I1430892
+Year: 2016
+Summary: Measurements of ttbar charge asymmetry using dilepton final states in pp collisions at sqrt(s) = 8 TeV
+Experiment: CMS
+Collider: LHC
+InspireID: 1430892
+Status: VALIDATED
+Authors:
+ - Jacob Linacre <jacob.linacre@cern.ch>
+References:
+ - Phys. Lett. B 760 (2016) 365
+ - DOI:10.1016/j.physletb.2016.07.006
+ - arXiv:1603.06221
+ - https://hepdata.net/record/ins1430892
+RunInfo: 'Dilepton ttbar events at $\sqrt{s}=8\;\TeV$, where the leptons are prompt elecrons or muons (not from tau). No other cuts. All but one of the variables require top quarks in the event record.'
+NeedCrossSection: no
+Luminosity: 19.5/fb
+Beams: [p+, p+]
+Energies: [8000]
+Description:
+  '
+  $\textbf{Abstract:}$
+  The charge asymmetry in $\mathrm{t\bar{t}}$ events is measured using dilepton final states produced in pp collisions at the LHC at $\sqrt{s}=8\:$TeV. The data sample, collected with the CMS detector, corresponds to an integrated luminosity of 19.5 $\mathrm{fb^{-1}}$. The measurements are performed using events with two oppositely charged leptons (electrons or muons) and two or more jets, where at least one of the jets is identified as originating from a bottom quark. The charge asymmetry is measured from differences in kinematic distributions, unfolded to the parton level, of positively and negatively charged top quarks and leptons. The $\mathrm{t\bar{t}}$ and leptonic charge asymmetries are found to be 0.011 +/- 0.011 (stat) +/- 0.007 (syst) and 0.003 +/- 0.006 (stat) +/- 0.003 (syst), respectively. These results, as well as charge asymmetry measurements made as a function of $\mathrm{t\bar{t}}$ system kinematic properties, are in agreement with predictions of the standard model.
+
+  $\textbf{Particle-level addition to Rivet routine:}$
+  While the analysis was performed at the parton-level only, $\Delta|\eta_{\ell}|$ is a purely leptonic variable and it has been checked that the results of the analysis would have been essentially unchanged had it been defined at particle-level using dressed leptons instead of using the parton-level top quark daughter leptons. We therefore include both particle- and parton-level versions of this distribution in the Rivet routine, with the former identified in the plot title. For same-flavour dilepton final states, the particle-level definition in the full phase space is problematic because the two leptons can come from fully-hadronic $\mathrm{t\bar{t}}$ plus a dilepton pair from radiation. Such pairs have invariant mass $M_{\ell\ell}\sim 0$ and produce a peak near zero in the $\Delta|\eta_{\ell}|$ distribution. We therefore select only the $\mathrm{t\bar{t}}\to e\mu$ final state, by requiring exactly one electron and exactly one muon. Note this means $\mathrm{t\bar{t}}\to e\mu$ events with additional dilepton pairs from radiation are vetoed. For PYTHIA8 this amounts to ~0.5% of $\mathrm{t\bar{t}}\to e\mu$ events - well below the level of sensitivity of the measured distribution.
+
+  $\textbf{Histograms and covariance matrices:}$
+  The error bars in the measured distributions should not be used for fitting because there are significant correlations between bins.  
+  The covariance matrices for the statistical and systematic uncertainties in each distribution can be found in hepdata. The single-differential cross sections in hepdata are normalised to unit area (i.e. the integral is equal to one), while the double-differential cross sections in hepdata are normalised to the sum of entries (such that the sum of all bin heights is equal to one). This should be taken into account when comparing the measured distributions to the Rivet results and when using the covariance matrices.
+
+  $\textbf{Underflow and overflow bins:}$
+  The lower and upper $\Delta|y_\mathrm{t}|$ and $\Delta|\eta_{\ell}|$ bins (starting and ending at -2 and +2, respectively) contain underflow and overflow events, i.e. the complete distribution from -infinity to +infinity is covered. Similarly, the upper $M_\mathrm{t\bar{t}}$, $p_\mathrm{T}^\mathrm{t\bar{t}}$, and $\left|y_\mathrm{t\bar{t}}\right|$ bins contain overflow events up to +infinity.
+  '
+BibKey: Khachatryan:2016ysn
+BibTeX: '@article{Khachatryan:2016ysn,
+      author         = "Khachatryan, Vardan and others",
+      title          = "{Measurements of $t \bar t$ charge asymmetry using
+                        dilepton final states in pp collisions at $\sqrt s=8$
+                        TeV}",
+      collaboration  = "CMS",
+      journal        = "Phys. Lett.",
+      volume         = "B760",
+      year           = "2016",
+      pages          = "365-386",
+      doi            = "10.1016/j.physletb.2016.07.006",
+      eprint         = "1603.06221",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CMS-TOP-15-009, CERN-EP-2016-059",
+      SLACcitation   = "%%CITATION = ARXIV:1603.06221;%%"
+}'
diff --git a/analyses/pluginCMS/CMS_2016_I1430892.plot b/analyses/pluginCMS/CMS_2016_I1430892.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1430892.plot
@@ -0,0 +1,114 @@
+# BEGIN PLOT /CMS_2016_I1430892/*
+LogY=0
+ShowZero=0
+XTwosidedTicks=1
+YTwosidedTicks=1
+RatioPlotYMin=0.9
+RatioPlotYMax=1.1
+Legend=1
+Title=CMS, 8 TeV, $\mathrm{t\bar{t}}$ dilepton channel, parton-level
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1430892/d00-x01-y01
+XLabel=$\Delta\left|\eta_{\ell}\right|$
+YLabel=$\frac{1}{\sigma}\frac{\mathrm{d}\sigma}{\mathrm{d}\Delta\left|\eta_{\ell}\right|}$
+Title=CMS, 8 TeV, $\mathrm{t\bar{t}}$ dilepton, parton-level. Rivet particle-level, $e\mu$ only.
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1430892/d02-x01-y01
+XLabel=$\Delta\left|y_\mathrm{t}\right|$
+YLabel=$\frac{1}{\sigma}\frac{\mathrm{d}\sigma}{\mathrm{d}\Delta\left|y_\mathrm{t}\right|}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1430892/d05-x01-y01
+XLabel=$\Delta\left|\eta_{\ell}\right|$
+YLabel=$\frac{1}{\sigma}\frac{\mathrm{d}\sigma}{\mathrm{d}\Delta\left|\eta_{\ell}\right|}$
+# END PLOT
+
+
+# BEGIN PLOT /CMS_2016_I1430892/d08-x01-y01
+XLabel=$M_\mathrm{t\bar{t}}$
+YLabel=$A_{\mathrm{C}}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1430892/d14-x01-y01
+XLabel=$M_\mathrm{t\bar{t}}$
+YLabel=$A^{\mathrm{lep}}_{\mathrm{C}}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1430892/d20-x01-y01
+XLabel=$p_\mathrm{T}^\mathrm{t\bar{t}}$
+YLabel=$A_{\mathrm{C}}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1430892/d26-x01-y01
+XLabel=$p_\mathrm{T}^\mathrm{t\bar{t}}$
+YLabel=$A^{\mathrm{lep}}_{\mathrm{C}}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1430892/d32-x01-y01
+XLabel=$\left|y_\mathrm{t\bar{t}}\right|$
+YLabel=$A_{\mathrm{C}}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1430892/d38-x01-y01
+XLabel=$\left|y_\mathrm{t\bar{t}}\right|$
+YLabel=$A^{\mathrm{lep}}_{\mathrm{C}}$
+RatioPlotMode=deviation
+RatioPlotYMin=-3
+RatioPlotYMax=3
+# END PLOT
+
+
+# BEGIN PLOT /CMS_2016_I1430892/d11-x01-y01
+XLabel=$\Delta\left|y_\mathrm{t}\right|$
+YLabel=$M_\mathrm{t\bar{t}}$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\Delta\left|y_\mathrm{t}\right|\mathrm{d}M_\mathrm{t\bar{t}}}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1430892/d17-x01-y01
+XLabel=$\Delta\left|\eta_{\ell}\right|$
+YLabel=$M_\mathrm{t\bar{t}}$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\Delta\left|\eta_{\ell}\right|\mathrm{d}M_\mathrm{t\bar{t}}}$
+# END PLOT
+
+
+# BEGIN PLOT /CMS_2016_I1430892/d23-x01-y01
+XLabel=$\Delta\left|y_\mathrm{t}\right|$
+YLabel=$p_\mathrm{T}^\mathrm{t\bar{t}}$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\Delta\left|y_\mathrm{t}\right|\mathrm{d}p_\mathrm{T}^\mathrm{t\bar{t}}}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1430892/d29-x01-y01
+XLabel=$\Delta\left|\eta_{\ell}\right|$
+YLabel=$p_\mathrm{T}^\mathrm{t\bar{t}}$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\Delta\left|\eta_{\ell}\right|\mathrm{d}p_\mathrm{T}^\mathrm{t\bar{t}}}$
+# END PLOT
+
+
+# BEGIN PLOT /CMS_2016_I1430892/d35-x01-y01
+XLabel=$\Delta\left|y_\mathrm{t}\right|$
+YLabel=$\left|y_\mathrm{t\bar{t}}\right|$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\Delta\left|y_\mathrm{t}\right|\mathrm{d}\left|y_\mathrm{t\bar{t}}\right|}$
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1430892/d41-x01-y01
+XLabel=$\Delta\left|\eta_{\ell}\right|$
+YLabel=$\left|y_\mathrm{t\bar{t}}\right|$
+ZLabel=$\frac{1}{\sigma}\frac{\mathrm{d}^2\sigma}{\mathrm{d}\Delta\left|\eta_{\ell}\right|\mathrm{d}\left|y_\mathrm{t\bar{t}}\right|}$
+# END PLOT
diff --git a/analyses/pluginCMS/CMS_2016_I1430892.yoda b/analyses/pluginCMS/CMS_2016_I1430892.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1430892.yoda
@@ -0,0 +1,331 @@
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1430892/d00-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1430892/d00-x01-y01
+Title=doi:10.17182/hepdata.71444.v1/t5
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-1.566667E+00	4.333333E-01	4.333333E-01	1.718000e-01	3.614244E-03	3.614244E-03
+-9.666667E-01	1.666667E-01	1.666667E-01	2.232000e-01	4.677729E-03	4.677729E-03
+-6.666667E-01	1.333333E-01	1.333333E-01	2.890000e-01	6.187868E-03	6.187868E-03
+-4.333333E-01	1.000000E-01	1.000000E-01	3.217000e-01	7.062112E-03	7.062112E-03
+-2.333333E-01	1.000000E-01	1.000000E-01	3.916000e-01	8.610640E-03	8.610640E-03
+-6.666667E-02	6.666667E-02	6.666667E-02	4.174000e-01	1.032487E-02	1.032487E-02
+6.666667E-02	6.666667E-02	6.666667E-02	4.023000e-01	1.020248E-02	1.020248E-02
+2.333333E-01	1.000000E-01	1.000000E-01	3.704000e-01	7.962778E-03	7.962778E-03
+4.333333E-01	1.000000E-01	1.000000E-01	3.332000e-01	7.331571E-03	7.331571E-03
+6.666667E-01	1.333333E-01	1.333333E-01	2.904000e-01	5.859984E-03	5.859984E-03
+9.666667E-01	1.666667E-01	1.666667E-01	2.352000e-01	4.759801E-03	4.759801E-03
+1.566667E+00	4.333333E-01	4.333333E-01	1.743000e-01	3.518938E-03	3.518938E-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1430892/d02-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1430892/d02-x01-y01
+Title=doi:10.17182/hepdata.71444.v1/t2
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-1.366667E+00	6.333333E-01	6.333333E-01	1.462000e-01	5.135059E-03	5.135059E-03
+-5.333333E-01	2.000000E-01	2.000000E-01	3.734000e-01	1.672367E-02	1.672367E-02
+-1.666667E-01	1.666667E-01	1.666667E-01	4.807000e-01	1.734925E-02	1.734925E-02
+1.666667E-01	1.666667E-01	1.666667E-01	4.788000e-01	1.892370E-02	1.892370E-02
+5.333333E-01	2.000000E-01	2.000000E-01	3.819000e-01	1.574594E-02	1.574594E-02
+1.366667E+00	6.333333E-01	6.333333E-01	1.523000e-01	4.516602E-03	4.516602E-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1430892/d05-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1430892/d05-x01-y01
+Title=doi:10.17182/hepdata.71444.v1/t5
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-1.566667E+00	4.333333E-01	4.333333E-01	1.718000e-01	3.614244E-03	3.614244E-03
+-9.666667E-01	1.666667E-01	1.666667E-01	2.232000e-01	4.677729E-03	4.677729E-03
+-6.666667E-01	1.333333E-01	1.333333E-01	2.890000e-01	6.187868E-03	6.187868E-03
+-4.333333E-01	1.000000E-01	1.000000E-01	3.217000e-01	7.062112E-03	7.062112E-03
+-2.333333E-01	1.000000E-01	1.000000E-01	3.916000e-01	8.610640E-03	8.610640E-03
+-6.666667E-02	6.666667E-02	6.666667E-02	4.174000e-01	1.032487E-02	1.032487E-02
+6.666667E-02	6.666667E-02	6.666667E-02	4.023000e-01	1.020248E-02	1.020248E-02
+2.333333E-01	1.000000E-01	1.000000E-01	3.704000e-01	7.962778E-03	7.962778E-03
+4.333333E-01	1.000000E-01	1.000000E-01	3.332000e-01	7.331571E-03	7.331571E-03
+6.666667E-01	1.333333E-01	1.333333E-01	2.904000e-01	5.859984E-03	5.859984E-03
+9.666667E-01	1.666667E-01	1.666667E-01	2.352000e-01	4.759801E-03	4.759801E-03
+1.566667E+00	4.333333E-01	4.333333E-01	1.743000e-01	3.518938E-03	3.518938E-03
+END YODA_SCATTER2D
+
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1430892/d08-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1430892/d08-x01-y01
+Title=doi:10.17182/hepdata.71444.v1/t8
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+3.650000E+02	6.500000E+01	6.500000E+01	7.000000e-03	3.599903e-02	3.599903e-02
+4.800000e+02	5.000000e+01	5.000000e+01	1.490000e-02	3.243532e-02	3.243532e-02
+8.650000E+02	3.350000E+02	3.350000E+02	4.400000e-03	2.503917e-02	2.503917e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1430892/d14-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1430892/d14-x01-y01
+Title=doi:10.17182/hepdata.71444.v1/t14
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+3.650000E+02	6.500000E+01	6.500000E+01	-2.300000e-02	1.626038e-02	1.626038e-02
+4.800000e+02	5.000000e+01	5.000000e+01	1.010000e-02	1.826499e-02	1.826499e-02
+8.650000E+02	3.350000E+02	3.350000E+02	1.550000e-02	1.869358e-02	1.869358e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1430892/d20-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1430892/d20-x01-y01
+Title=doi:10.17182/hepdata.71444.v1/t20
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.050000e+01	2.050000e+01	2.050000e+01	9.300000e-03	2.146835e-02	2.146835e-02
+6.650000e+01	2.550000e+01	2.550000e+01	-3.290000e-02	4.291946e-02	4.291946e-02
+1.960000E+02	1.040000E+02	1.040000E+02	8.440000e-02	4.394383e-02	4.394383e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1430892/d26-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1430892/d26-x01-y01
+Title=doi:10.17182/hepdata.71444.v1/t26
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.050000e+01	2.050000e+01	2.050000e+01	6.500000e-03	1.095901e-02	1.095901e-02
+6.650000e+01	2.550000e+01	2.550000e+01	-1.970000e-02	2.185887e-02	2.185887e-02
+1.960000E+02	1.040000E+02	1.040000E+02	1.460000e-02	2.103806e-02	2.103806e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1430892/d32-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1430892/d32-x01-y01
+Title=doi:10.17182/hepdata.71444.v1/t32
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.700000e-01	1.700000e-01	1.700000e-01	-2.500000e-03	3.374641e-02	3.374641e-02
+5.450000e-01	2.050000e-01	2.050000e-01	1.590000e-02	3.164253e-02	3.164253e-02
+1.125000E+00	3.750000E-01	3.750000E-01	2.870000e-02	2.610785e-02	2.610785e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1430892/d38-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1430892/d38-x01-y01
+Title=doi:10.17182/hepdata.71444.v1/t38
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.700000e-01	1.700000e-01	1.700000e-01	-6.000000e-04	1.747713e-02	1.747713e-02
+5.450000e-01	2.050000e-01	2.050000e-01	-2.350000e-02	1.811105e-02	1.811105e-02
+1.125000E+00	3.750000E-01	3.750000E-01	2.260000e-02	1.413223e-02	1.413223e-02
+END YODA_SCATTER2D
+
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1430892/d11-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1430892/d11-x01-y01
+Title=doi:10.17182/hepdata.71444.v1/t11
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-1.366667E+00	6.333333E-01	6.333333E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.990000e-02	0.000000e+00	0.000000e+00
+-1.366667E+00	6.333333E-01	6.333333E-01	4.800000e+02	5.000000e+01	5.000000e+01	7.090000e-02	0.000000e+00	0.000000e+00
+-1.366667E+00	6.333333E-01	6.333333E-01	8.650000E+02	3.350000E+02	3.350000E+02	7.650000e-02	0.000000e+00	0.000000e+00
+-5.333333E-01	2.000000E-01	2.000000E-01	3.650000E+02	6.500000E+01	6.500000E+01	7.130000e-02	0.000000e+00	0.000000e+00
+-5.333333E-01	2.000000E-01	2.000000E-01	4.800000e+02	5.000000e+01	5.000000e+01	4.240000e-02	0.000000e+00	0.000000e+00
+-5.333333E-01	2.000000E-01	2.000000E-01	8.650000E+02	3.350000E+02	3.350000E+02	3.330000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	8.910000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	4.200000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	3.030000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	9.120000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	3.960000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	2.680000e-02	0.000000e+00	0.000000e+00
+5.333333E-01	2.000000E-01	2.000000E-01	3.650000E+02	6.500000E+01	6.500000E+01	7.490000e-02	0.000000e+00	0.000000e+00
+5.333333E-01	2.000000E-01	2.000000E-01	4.800000e+02	5.000000e+01	5.000000e+01	4.430000e-02	0.000000e+00	0.000000e+00
+5.333333E-01	2.000000E-01	2.000000E-01	8.650000E+02	3.350000E+02	3.350000E+02	3.500000e-02	0.000000e+00	0.000000e+00
+1.366667E+00	6.333333E-01	6.333333E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.710000e-02	0.000000e+00	0.000000e+00
+1.366667E+00	6.333333E-01	6.333333E-01	4.800000e+02	5.000000e+01	5.000000e+01	7.600000e-02	0.000000e+00	0.000000e+00
+1.366667E+00	6.333333E-01	6.333333E-01	8.650000E+02	3.350000E+02	3.350000E+02	7.960000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1430892/d17-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1430892/d17-x01-y01
+Title=doi:10.17182/hepdata.71444.v1/t17
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-1.566667E+00	4.333333E-01	4.333333E-01	3.650000E+02	6.500000E+01	6.500000E+01	5.360000e-02	0.000000e+00	0.000000e+00
+-1.566667E+00	4.333333E-01	4.333333E-01	4.800000e+02	5.000000e+01	5.000000e+01	4.740000e-02	0.000000e+00	0.000000e+00
+-1.566667E+00	4.333333E-01	4.333333E-01	8.650000E+02	3.350000E+02	3.350000E+02	4.920000e-02	0.000000e+00	0.000000e+00
+-9.666667E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.010000e-02	0.000000e+00	0.000000e+00
+-9.666667E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.300000e-02	0.000000e+00	0.000000e+00
+-9.666667E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	2.120000e-02	0.000000e+00	0.000000e+00
+-6.666667E-01	1.333333E-01	1.333333E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.370000e-02	0.000000e+00	0.000000e+00
+-6.666667E-01	1.333333E-01	1.333333E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.270000e-02	0.000000e+00	0.000000e+00
+-6.666667E-01	1.333333E-01	1.333333E-01	8.650000E+02	3.350000E+02	3.350000E+02	2.050000e-02	0.000000e+00	0.000000e+00
+-4.333333E-01	1.000000E-01	1.000000E-01	3.650000E+02	6.500000E+01	6.500000E+01	2.810000e-02	0.000000e+00	0.000000e+00
+-4.333333E-01	1.000000E-01	1.000000E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.070000e-02	0.000000e+00	0.000000e+00
+-4.333333E-01	1.000000E-01	1.000000E-01	8.650000E+02	3.350000E+02	3.350000E+02	1.630000e-02	0.000000e+00	0.000000e+00
+-2.333333E-01	1.000000E-01	1.000000E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.550000e-02	0.000000e+00	0.000000e+00
+-2.333333E-01	1.000000E-01	1.000000E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.520000e-02	0.000000e+00	0.000000e+00
+-2.333333E-01	1.000000E-01	1.000000E-01	8.650000E+02	3.350000E+02	3.350000E+02	1.740000e-02	0.000000e+00	0.000000e+00
+-6.666667E-02	6.666667E-02	6.666667E-02	3.650000E+02	6.500000E+01	6.500000E+01	2.530000e-02	0.000000e+00	0.000000e+00
+-6.666667E-02	6.666667E-02	6.666667E-02	4.800000e+02	5.000000e+01	5.000000e+01	1.790000e-02	0.000000e+00	0.000000e+00
+-6.666667E-02	6.666667E-02	6.666667E-02	8.650000E+02	3.350000E+02	3.350000E+02	1.310000e-02	0.000000e+00	0.000000e+00
+6.666667E-02	6.666667E-02	6.666667E-02	3.650000E+02	6.500000E+01	6.500000E+01	2.510000e-02	0.000000e+00	0.000000e+00
+6.666667E-02	6.666667E-02	6.666667E-02	4.800000e+02	5.000000e+01	5.000000e+01	1.690000e-02	0.000000e+00	0.000000e+00
+6.666667E-02	6.666667E-02	6.666667E-02	8.650000E+02	3.350000E+02	3.350000E+02	1.260000e-02	0.000000e+00	0.000000e+00
+2.333333E-01	1.000000E-01	1.000000E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.290000e-02	0.000000e+00	0.000000e+00
+2.333333E-01	1.000000E-01	1.000000E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.090000e-02	0.000000e+00	0.000000e+00
+2.333333E-01	1.000000E-01	1.000000E-01	8.650000E+02	3.350000E+02	3.350000E+02	1.950000e-02	0.000000e+00	0.000000e+00
+4.333333E-01	1.000000E-01	1.000000E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.060000e-02	0.000000e+00	0.000000e+00
+4.333333E-01	1.000000E-01	1.000000E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.030000e-02	0.000000e+00	0.000000e+00
+4.333333E-01	1.000000E-01	1.000000E-01	8.650000E+02	3.350000E+02	3.350000E+02	1.640000e-02	0.000000e+00	0.000000e+00
+6.666667E-01	1.333333E-01	1.333333E-01	3.650000E+02	6.500000E+01	6.500000E+01	3.120000e-02	0.000000e+00	0.000000e+00
+6.666667E-01	1.333333E-01	1.333333E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.540000e-02	0.000000e+00	0.000000e+00
+6.666667E-01	1.333333E-01	1.333333E-01	8.650000E+02	3.350000E+02	3.350000E+02	2.030000e-02	0.000000e+00	0.000000e+00
+9.666667E-01	1.666667E-01	1.666667E-01	3.650000E+02	6.500000E+01	6.500000E+01	2.870000e-02	0.000000e+00	0.000000e+00
+9.666667E-01	1.666667E-01	1.666667E-01	4.800000e+02	5.000000e+01	5.000000e+01	2.670000e-02	0.000000e+00	0.000000e+00
+9.666667E-01	1.666667E-01	1.666667E-01	8.650000E+02	3.350000E+02	3.350000E+02	2.190000e-02	0.000000e+00	0.000000e+00
+1.566667E+00	4.333333E-01	4.333333E-01	3.650000E+02	6.500000E+01	6.500000E+01	4.860000e-02	0.000000e+00	0.000000e+00
+1.566667E+00	4.333333E-01	4.333333E-01	4.800000e+02	5.000000e+01	5.000000e+01	4.990000e-02	0.000000e+00	0.000000e+00
+1.566667E+00	4.333333E-01	4.333333E-01	8.650000E+02	3.350000E+02	3.350000E+02	5.130000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1430892/d23-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1430892/d23-x01-y01
+Title=doi:10.17182/hepdata.71444.v1/t23
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-1.366667E+00	6.333333E-01	6.333333E-01	2.050000e+01	2.050000e+01	2.050000e+01	1.023000e-01	0.000000e+00	0.000000e+00
+-1.366667E+00	6.333333E-01	6.333333E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.640000e-02	0.000000e+00	0.000000e+00
+-1.366667E+00	6.333333E-01	6.333333E-01	1.960000E+02	1.040000E+02	1.040000E+02	3.720000e-02	0.000000e+00	0.000000e+00
+-5.333333E-01	2.000000E-01	2.000000E-01	2.050000e+01	2.050000e+01	2.050000e+01	8.030000e-02	0.000000e+00	0.000000e+00
+-5.333333E-01	2.000000E-01	2.000000E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.710000e-02	0.000000e+00	0.000000e+00
+-5.333333E-01	2.000000E-01	2.000000E-01	1.960000E+02	1.040000E+02	1.040000E+02	2.140000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	8.640000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.830000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	2.510000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	8.660000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.120000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	3.190000e-02	0.000000e+00	0.000000e+00
+5.333333E-01	2.000000E-01	2.000000E-01	2.050000e+01	2.050000e+01	2.050000e+01	8.420000e-02	0.000000e+00	0.000000e+00
+5.333333E-01	2.000000E-01	2.000000E-01	6.650000e+01	2.550000e+01	2.550000e+01	3.920000e-02	0.000000e+00	0.000000e+00
+5.333333E-01	2.000000E-01	2.000000E-01	1.960000E+02	1.040000E+02	1.040000E+02	2.990000e-02	0.000000e+00	0.000000e+00
+1.366667E+00	6.333333E-01	6.333333E-01	2.050000e+01	2.050000e+01	2.050000e+01	1.032000e-01	0.000000e+00	0.000000e+00
+1.366667E+00	6.333333E-01	6.333333E-01	6.650000e+01	2.550000e+01	2.550000e+01	5.230000e-02	0.000000e+00	0.000000e+00
+1.366667E+00	6.333333E-01	6.333333E-01	1.960000E+02	1.040000E+02	1.040000E+02	3.730000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1430892/d29-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1430892/d29-x01-y01
+Title=doi:10.17182/hepdata.71444.v1/t29
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-1.566667E+00	4.333333E-01	4.333333E-01	2.050000e+01	2.050000e+01	2.050000e+01	8.490000e-02	0.000000e+00	0.000000e+00
+-1.566667E+00	4.333333E-01	4.333333E-01	6.650000e+01	2.550000e+01	2.550000e+01	4.020000e-02	0.000000e+00	0.000000e+00
+-1.566667E+00	4.333333E-01	4.333333E-01	1.960000E+02	1.040000E+02	1.040000E+02	2.410000e-02	0.000000e+00	0.000000e+00
+-9.666667E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	3.990000e-02	0.000000e+00	0.000000e+00
+-9.666667E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	2.020000e-02	0.000000e+00	0.000000e+00
+-9.666667E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.440000e-02	0.000000e+00	0.000000e+00
+-6.666667E-01	1.333333E-01	1.333333E-01	2.050000e+01	2.050000e+01	2.050000e+01	4.070000e-02	0.000000e+00	0.000000e+00
+-6.666667E-01	1.333333E-01	1.333333E-01	6.650000e+01	2.550000e+01	2.550000e+01	2.290000e-02	0.000000e+00	0.000000e+00
+-6.666667E-01	1.333333E-01	1.333333E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.300000e-02	0.000000e+00	0.000000e+00
+-4.333333E-01	1.000000E-01	1.000000E-01	2.050000e+01	2.050000e+01	2.050000e+01	3.500000e-02	0.000000e+00	0.000000e+00
+-4.333333E-01	1.000000E-01	1.000000E-01	6.650000e+01	2.550000e+01	2.550000e+01	1.750000e-02	0.000000e+00	0.000000e+00
+-4.333333E-01	1.000000E-01	1.000000E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.290000e-02	0.000000e+00	0.000000e+00
+-2.333333E-01	1.000000E-01	1.000000E-01	2.050000e+01	2.050000e+01	2.050000e+01	4.190000e-02	0.000000e+00	0.000000e+00
+-2.333333E-01	1.000000E-01	1.000000E-01	6.650000e+01	2.550000e+01	2.550000e+01	2.230000e-02	0.000000e+00	0.000000e+00
+-2.333333E-01	1.000000E-01	1.000000E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.370000e-02	0.000000e+00	0.000000e+00
+-6.666667E-02	6.666667E-02	6.666667E-02	2.050000e+01	2.050000e+01	2.050000e+01	2.780000e-02	0.000000e+00	0.000000e+00
+-6.666667E-02	6.666667E-02	6.666667E-02	6.650000e+01	2.550000e+01	2.550000e+01	1.740000e-02	0.000000e+00	0.000000e+00
+-6.666667E-02	6.666667E-02	6.666667E-02	1.960000E+02	1.040000E+02	1.040000E+02	1.100000e-02	0.000000e+00	0.000000e+00
+6.666667E-02	6.666667E-02	6.666667E-02	2.050000e+01	2.050000e+01	2.050000e+01	2.830000e-02	0.000000e+00	0.000000e+00
+6.666667E-02	6.666667E-02	6.666667E-02	6.650000e+01	2.550000e+01	2.550000e+01	1.590000e-02	0.000000e+00	0.000000e+00
+6.666667E-02	6.666667E-02	6.666667E-02	1.960000E+02	1.040000E+02	1.040000E+02	1.040000e-02	0.000000e+00	0.000000e+00
+2.333333E-01	1.000000E-01	1.000000E-01	2.050000e+01	2.050000e+01	2.050000e+01	3.980000e-02	0.000000e+00	0.000000e+00
+2.333333E-01	1.000000E-01	1.000000E-01	6.650000e+01	2.550000e+01	2.550000e+01	1.970000e-02	0.000000e+00	0.000000e+00
+2.333333E-01	1.000000E-01	1.000000E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.400000e-02	0.000000e+00	0.000000e+00
+4.333333E-01	1.000000E-01	1.000000E-01	2.050000e+01	2.050000e+01	2.050000e+01	3.720000e-02	0.000000e+00	0.000000e+00
+4.333333E-01	1.000000E-01	1.000000E-01	6.650000e+01	2.550000e+01	2.550000e+01	1.850000e-02	0.000000e+00	0.000000e+00
+4.333333E-01	1.000000E-01	1.000000E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.180000e-02	0.000000e+00	0.000000e+00
+6.666667E-01	1.333333E-01	1.333333E-01	2.050000e+01	2.050000e+01	2.050000e+01	4.200000e-02	0.000000e+00	0.000000e+00
+6.666667E-01	1.333333E-01	1.333333E-01	6.650000e+01	2.550000e+01	2.550000e+01	2.000000e-02	0.000000e+00	0.000000e+00
+6.666667E-01	1.333333E-01	1.333333E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.510000e-02	0.000000e+00	0.000000e+00
+9.666667E-01	1.666667E-01	1.666667E-01	2.050000e+01	2.050000e+01	2.050000e+01	4.070000e-02	0.000000e+00	0.000000e+00
+9.666667E-01	1.666667E-01	1.666667E-01	6.650000e+01	2.550000e+01	2.550000e+01	2.150000e-02	0.000000e+00	0.000000e+00
+9.666667E-01	1.666667E-01	1.666667E-01	1.960000E+02	1.040000E+02	1.040000E+02	1.520000e-02	0.000000e+00	0.000000e+00
+1.566667E+00	4.333333E-01	4.333333E-01	2.050000e+01	2.050000e+01	2.050000e+01	8.570000e-02	0.000000e+00	0.000000e+00
+1.566667E+00	4.333333E-01	4.333333E-01	6.650000e+01	2.550000e+01	2.550000e+01	3.940000e-02	0.000000e+00	0.000000e+00
+1.566667E+00	4.333333E-01	4.333333E-01	1.960000E+02	1.040000E+02	1.040000E+02	2.510000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1430892/d35-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1430892/d35-x01-y01
+Title=doi:10.17182/hepdata.71444.v1/t35
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-1.366667E+00	6.333333E-01	6.333333E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.600000e-03	0.000000e+00	0.000000e+00
+-1.366667E+00	6.333333E-01	6.333333E-01	5.450000e-01	2.050000e-01	2.050000e-01	8.310000e-02	0.000000e+00	0.000000e+00
+-1.366667E+00	6.333333E-01	6.333333E-01	1.125000E+00	3.750000E-01	3.750000E-01	1.002000e-01	0.000000e+00	0.000000e+00
+-5.333333E-01	2.000000E-01	2.000000E-01	1.700000e-01	1.700000e-01	1.700000e-01	5.440000e-02	0.000000e+00	0.000000e+00
+-5.333333E-01	2.000000E-01	2.000000E-01	5.450000e-01	2.050000e-01	2.050000e-01	4.160000e-02	0.000000e+00	0.000000e+00
+-5.333333E-01	2.000000E-01	2.000000E-01	1.125000E+00	3.750000E-01	3.750000E-01	5.050000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	8.490000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.380000e-02	0.000000e+00	0.000000e+00
+-1.666667E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	5.090000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	8.370000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.850000e-02	0.000000e+00	0.000000e+00
+1.666667E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	4.870000e-02	0.000000e+00	0.000000e+00
+5.333333E-01	2.000000E-01	2.000000E-01	1.700000e-01	1.700000e-01	1.700000e-01	5.640000e-02	0.000000e+00	0.000000e+00
+5.333333E-01	2.000000E-01	2.000000E-01	5.450000e-01	2.050000e-01	2.050000e-01	4.460000e-02	0.000000e+00	0.000000e+00
+5.333333E-01	2.000000E-01	2.000000E-01	1.125000E+00	3.750000E-01	3.750000E-01	5.130000e-02	0.000000e+00	0.000000e+00
+1.366667E+00	6.333333E-01	6.333333E-01	1.700000e-01	1.700000e-01	1.700000e-01	1.100000e-03	0.000000e+00	0.000000e+00
+1.366667E+00	6.333333E-01	6.333333E-01	5.450000e-01	2.050000e-01	2.050000e-01	8.020000e-02	0.000000e+00	0.000000e+00
+1.366667E+00	6.333333E-01	6.333333E-01	1.125000E+00	3.750000E-01	3.750000E-01	1.135000e-01	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
+BEGIN YODA_SCATTER3D /REF/CMS_2016_I1430892/d41-x01-y01
+IsRef=1
+Path=/REF/CMS_2016_I1430892/d41-x01-y01
+Title=doi:10.17182/hepdata.71444.v1/t41
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+-1.566667E+00	4.333333E-01	4.333333E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.960000e-02	0.000000e+00	0.000000e+00
+-1.566667E+00	4.333333E-01	4.333333E-01	5.450000e-01	2.050000e-01	2.050000e-01	3.730000e-02	0.000000e+00	0.000000e+00
+-1.566667E+00	4.333333E-01	4.333333E-01	1.125000E+00	3.750000E-01	3.750000E-01	8.290000e-02	0.000000e+00	0.000000e+00
+-9.666667E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.070000e-02	0.000000e+00	0.000000e+00
+-9.666667E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.230000e-02	0.000000e+00	0.000000e+00
+-9.666667E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	3.130000e-02	0.000000e+00	0.000000e+00
+-6.666667E-01	1.333333E-01	1.333333E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.290000e-02	0.000000e+00	0.000000e+00
+-6.666667E-01	1.333333E-01	1.333333E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.560000e-02	0.000000e+00	0.000000e+00
+-6.666667E-01	1.333333E-01	1.333333E-01	1.125000E+00	3.750000E-01	3.750000E-01	2.780000e-02	0.000000e+00	0.000000e+00
+-4.333333E-01	1.000000E-01	1.000000E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.160000e-02	0.000000e+00	0.000000e+00
+-4.333333E-01	1.000000E-01	1.000000E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.250000e-02	0.000000e+00	0.000000e+00
+-4.333333E-01	1.000000E-01	1.000000E-01	1.125000E+00	3.750000E-01	3.750000E-01	2.050000e-02	0.000000e+00	0.000000e+00
+-2.333333E-01	1.000000E-01	1.000000E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.770000e-02	0.000000e+00	0.000000e+00
+-2.333333E-01	1.000000E-01	1.000000E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.620000e-02	0.000000e+00	0.000000e+00
+-2.333333E-01	1.000000E-01	1.000000E-01	1.125000E+00	3.750000E-01	3.750000E-01	2.390000e-02	0.000000e+00	0.000000e+00
+-6.666667E-02	6.666667E-02	6.666667E-02	1.700000e-01	1.700000e-01	1.700000e-01	2.160000e-02	0.000000e+00	0.000000e+00
+-6.666667E-02	6.666667E-02	6.666667E-02	5.450000e-01	2.050000e-01	2.050000e-01	1.800000e-02	0.000000e+00	0.000000e+00
+-6.666667E-02	6.666667E-02	6.666667E-02	1.125000E+00	3.750000E-01	3.750000E-01	1.660000e-02	0.000000e+00	0.000000e+00
+6.666667E-02	6.666667E-02	6.666667E-02	1.700000e-01	1.700000e-01	1.700000e-01	2.130000e-02	0.000000e+00	0.000000e+00
+6.666667E-02	6.666667E-02	6.666667E-02	5.450000e-01	2.050000e-01	2.050000e-01	1.760000e-02	0.000000e+00	0.000000e+00
+6.666667E-02	6.666667E-02	6.666667E-02	1.125000E+00	3.750000E-01	3.750000E-01	1.530000e-02	0.000000e+00	0.000000e+00
+2.333333E-01	1.000000E-01	1.000000E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.780000e-02	0.000000e+00	0.000000e+00
+2.333333E-01	1.000000E-01	1.000000E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.190000e-02	0.000000e+00	0.000000e+00
+2.333333E-01	1.000000E-01	1.000000E-01	1.125000E+00	3.750000E-01	3.750000E-01	2.340000e-02	0.000000e+00	0.000000e+00
+4.333333E-01	1.000000E-01	1.000000E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.180000e-02	0.000000e+00	0.000000e+00
+4.333333E-01	1.000000E-01	1.000000E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.120000e-02	0.000000e+00	0.000000e+00
+4.333333E-01	1.000000E-01	1.000000E-01	1.125000E+00	3.750000E-01	3.750000E-01	2.510000e-02	0.000000e+00	0.000000e+00
+6.666667E-01	1.333333E-01	1.333333E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.330000e-02	0.000000e+00	0.000000e+00
+6.666667E-01	1.333333E-01	1.333333E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.440000e-02	0.000000e+00	0.000000e+00
+6.666667E-01	1.333333E-01	1.333333E-01	1.125000E+00	3.750000E-01	3.750000E-01	2.930000e-02	0.000000e+00	0.000000e+00
+9.666667E-01	1.666667E-01	1.666667E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.080000e-02	0.000000e+00	0.000000e+00
+9.666667E-01	1.666667E-01	1.666667E-01	5.450000e-01	2.050000e-01	2.050000e-01	2.290000e-02	0.000000e+00	0.000000e+00
+9.666667E-01	1.666667E-01	1.666667E-01	1.125000E+00	3.750000E-01	3.750000E-01	3.390000e-02	0.000000e+00	0.000000e+00
+1.566667E+00	4.333333E-01	4.333333E-01	1.700000e-01	1.700000e-01	1.700000e-01	2.900000e-02	0.000000e+00	0.000000e+00
+1.566667E+00	4.333333E-01	4.333333E-01	5.450000e-01	2.050000e-01	2.050000e-01	3.680000e-02	0.000000e+00	0.000000e+00
+1.566667E+00	4.333333E-01	4.333333E-01	1.125000E+00	3.750000E-01	3.750000E-01	8.540000e-02	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
diff --git a/analyses/pluginCMS/CMS_2016_I1454211.cc b/analyses/pluginCMS/CMS_2016_I1454211.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1454211.cc
@@ -0,0 +1,275 @@
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Projections/PartonicTops.hh"
+#include "Rivet/Projections/DressedLeptons.hh"
+#include "Rivet/Projections/IdentifiedFinalState.hh"
+#include "Rivet/Projections/PromptFinalState.hh"
+#include "Rivet/Projections/VetoedFinalState.hh"
+#include "Rivet/Projections/InvMassFinalState.hh"
+#include "Rivet/Projections/MissingMomentum.hh"
+
+namespace Rivet {
+
+
+  /// Boosted ttbar in pp collisions at sqrtS = 8 TeV
+  /// @todo Use persistent weight counters
+  class CMS_2016_I1454211 : public Analysis {
+  public:
+
+    DEFAULT_RIVET_ANALYSIS_CTOR(CMS_2016_I1454211);
+
+
+    // Set up projections and book histograms
+    void init() {
+
+      // Complete final state
+      FinalState fs;
+
+      // Partonic tops
+      declare(PartonicTops(PartonicTops::ELECTRON, false), "ElectronPartonTops");
+      declare(PartonicTops(PartonicTops::MUON, false),     "MuonPartonTops");
+      declare(PartonicTops(PartonicTops::HADRONIC),        "HadronicPartonTops");
+
+      // Projection for electrons and muons
+      IdentifiedFinalState photons(fs, PID::PHOTON);
+
+      const Cut leptonCuts = Cuts::pt > 45*GeV && Cuts::abseta < 2.1;
+
+      IdentifiedFinalState el_id(fs, {{PID::ELECTRON, -PID::ELECTRON}});
+      PromptFinalState electrons(el_id);
+      DressedLeptons dressed_electrons(photons, electrons, 0.1, leptonCuts, true, false);
+      declare(dressed_electrons, "DressedElectrons");
+
+      IdentifiedFinalState mu_id(fs, {{PID::MUON, -PID::MUON}});
+      PromptFinalState muons(mu_id);
+      DressedLeptons dressed_muons(photons, muons, 0.1, leptonCuts, true, false);
+      declare(dressed_muons, "DressedMuons");
+
+      // Projection for jets
+      VetoedFinalState fs_jets(fs);
+      fs_jets.addVetoOnThisFinalState(dressed_muons);
+      fs_jets.addVetoOnThisFinalState(dressed_electrons);
+      fs_jets.vetoNeutrinos();
+      declare(FastJets(fs_jets, FastJets::ANTIKT, 0.5), "ak5jets");
+      declare(FastJets(fs_jets, FastJets::CAM, 0.8), "ca8jets");
+
+      _hEl_topPt_parton          = bookHisto1D("d01-x01-y01"); // dsigma/dpt(top quark), el ch
+      _hEl_topPt_particle        = bookHisto1D("d02-x01-y01"); // dsigma/dpt(top jet), el ch
+      _hEl_topY_parton           = bookHisto1D("d03-x01-y01"); // dsigma/dy(top quark), el ch
+      _hEl_topY_particle         = bookHisto1D("d04-x01-y01"); // dsigma/dy(top jet), el ch
+      _hMu_topPt_parton          = bookHisto1D("d05-x01-y01"); // dsigma/dpt(top quark), mu ch
+      _hMu_topPt_particle        = bookHisto1D("d06-x01-y01"); // dsigma/dpt(top jet), mu ch
+      _hMu_topY_parton           = bookHisto1D("d07-x01-y01"); // dsigma/dy(top quark), mu ch
+      _hMu_topY_particle         = bookHisto1D("d08-x01-y01"); // dsigma/dy(top jet), mu ch
+      _hComb_topPt_parton        = bookHisto1D("d09-x01-y01"); // dsigma/dpt(top quark), comb ch
+      _hComb_topPt_particle      = bookHisto1D("d10-x01-y01"); // dsigma/dpt(top jet), comb ch
+      _hComb_topY_parton         = bookHisto1D("d11-x01-y01"); // dsigma/dy(top quark), comb ch
+      _hComb_topY_particle       = bookHisto1D("d12-x01-y01"); // dsigma/dy(top jet), comb ch
+
+      _hEl_topPt_parton_norm     = bookHisto1D("d13-x01-y01"); // 1/sigma dsigma/dpt(top quark), el ch
+      _hEl_topPt_particle_norm   = bookHisto1D("d14-x01-y01"); // 1/sigma dsigma/dpt(top jet), el ch
+      _hEl_topY_parton_norm      = bookHisto1D("d15-x01-y01"); // 1/sigma dsigma/dy(top quark), el ch
+      _hEl_topY_particle_norm    = bookHisto1D("d16-x01-y01"); // 1/sigma dsigma/dy(top jet), el ch
+      _hMu_topPt_parton_norm     = bookHisto1D("d17-x01-y01"); // 1/sigma dsigma/dpt(top quark), mu ch
+      _hMu_topPt_particle_norm   = bookHisto1D("d18-x01-y01"); // 1/sigma dsigma/dpt(top jet), mu ch
+      _hMu_topY_parton_norm      = bookHisto1D("d19-x01-y01"); // 1/sigma dsigma/dy(top quark), mu ch
+      _hMu_topY_particle_norm    = bookHisto1D("d20-x01-y01"); // 1/sigma dsigma/dy(top jet), mu ch
+      _hComb_topPt_parton_norm   = bookHisto1D("d21-x01-y01"); // 1/sigma dsigma/dpt(top quark), comb ch
+      _hComb_topPt_particle_norm = bookHisto1D("d22-x01-y01"); // 1/sigma dsigma/dpt(top jet), comb ch
+      _hComb_topY_parton_norm    = bookHisto1D("d23-x01-y01"); // 1/sigma dsigma/dy(top quark), comb ch
+      _hComb_topY_particle_norm  = bookHisto1D("d24-x01-y01"); // 1/sigma dsigma/dy(top jet), comb ch
+
+      _hMu_cutflow = bookHisto1D("mu_cutflow", 7, -0.5, 6.5);
+      _hEl_cutflow = bookHisto1D("el_cutflow", 7, -0.5, 6.5);
+    }
+
+
+    // per event analysis
+    void analyze(const Event& event) {
+
+       // Total-events cutflow entries
+      _hMu_cutflow->fill(0.);
+      _hEl_cutflow->fill(0.);
+
+      // Do parton-level selection and channel determination
+      int partonCh = 0; //0 non-semi-lep, 1 muon, 2 electron
+      const Particles muonpartontops = apply<ParticleFinder>(event, "MuonPartonTops").particlesByPt();
+      const Particles electronpartontops = apply<ParticleFinder>(event, "ElectronPartonTops").particlesByPt();
+      if (electronpartontops.size() == 0 && muonpartontops.size() == 1) partonCh = 1;
+      else if (electronpartontops.size() == 1 && muonpartontops.size() == 0) partonCh = 2;
+      else vetoEvent;
+      const Particles hadronicpartontops = apply<ParticleFinder>(event, "HadronicPartonTops").particlesByPt();
+      if (hadronicpartontops.size() != 1) vetoEvent;
+
+      if (partonCh == 1) _hMu_cutflow->fill(1.); // muon at parton level
+      if (partonCh == 2) _hEl_cutflow->fill(1.); // electron at parton level
+
+      // Get hadronic parton-level top
+      const FourMomentum& partonTopP4 = hadronicpartontops.front();
+
+      // Do particle-level selection and channel determination
+      const DressedLeptons& dressed_electrons = apply<DressedLeptons>(event, "DressedElectrons");
+      const DressedLeptons& dressed_muons = apply<DressedLeptons>(event, "DressedMuons");
+
+      bool passParticleLep = false, passParticleTop = false;
+      FourMomentum lepton, particleTopP4;
+      if (partonCh == 1 && dressed_muons.dressedLeptons().size() == 1 && dressed_electrons.dressedLeptons().size() == 0) {
+        passParticleLep = true;
+        _hMu_cutflow->fill(3.); //muon at particle level
+        lepton = dressed_muons.dressedLeptons()[0].momentum();
+      }
+      if (partonCh == 2 && dressed_muons.dressedLeptons().size() == 0 && dressed_electrons.dressedLeptons().size() == 1) {
+        passParticleLep = true;
+        _hEl_cutflow->fill(3.); //electron at particle level
+        lepton = dressed_electrons.dressedLeptons()[0].momentum();
+      }
+
+      if (passParticleLep) {
+
+        // Jet cuts
+        Cut jetCuts = Cuts::pt > 30*GeV && Cuts::abseta < 2.4;
+        Jets genBjets, genTjets;
+        int nGenBjets = 0, nGenTjets = 0;
+
+        const FastJets& AK5jets = apply<FastJets>(event, "ak5jets");
+        for (const Jet& jet : AK5jets.jetsByPt(jetCuts)) {
+          if (deltaR(jet, lepton) > M_PI / 2.0) continue;
+          if (deltaR(jet, lepton) < 0.1) continue;
+          genBjets.push_back(jet);
+          nGenBjets += 1;
+        }
+
+        const FastJets& CA8jets = apply<FastJets>(event, "ca8jets");
+        for (const Jet& jet : CA8jets.jetsByPt(jetCuts)) {
+          if (deltaR(jet, lepton) < M_PI / 2.0) continue;
+          if (jet.mass() < 140*GeV) continue;
+          if (jet.mass() > 250*GeV) continue;
+          genTjets.push_back(jet);
+          nGenTjets += 1;
+        }
+
+        if (nGenBjets >=1) {
+          if (partonCh == 1) _hMu_cutflow->fill(4.); // muon at parton level
+          if (partonCh == 2) _hEl_cutflow->fill(4.); // electron at parton level
+          if (nGenTjets >= 1) {
+            passParticleTop = true;
+            if (partonCh == 1) _hMu_cutflow->fill(5.); // muon at parton level
+            if (partonCh == 2) _hEl_cutflow->fill(5.); // electron at parton level
+            particleTopP4 = genTjets[0];
+          }
+        }
+      }
+
+      const double weight = event.weight();
+      if (partonCh == 1) {
+        _nMu += weight;
+        _hMu_topPt_parton->fill(partonTopP4.pT()/GeV, weight);
+        _hMu_topPt_parton_norm->fill(partonTopP4.pT()/GeV, weight);
+        _hComb_topPt_parton->fill(partonTopP4.pT()/GeV, weight);
+        _hComb_topPt_parton_norm->fill(partonTopP4.pT()/GeV, weight);
+
+        if (partonTopP4.pT() >= 400*GeV) {
+          _nPassParton_mu += weight;
+          _hMu_cutflow->fill(2.);
+          _hMu_topY_parton->fill(partonTopP4.rapidity(), weight);
+          _hMu_topY_parton_norm->fill(partonTopP4.rapidity(), weight);
+          _hComb_topY_parton->fill(partonTopP4.rapidity(), weight);
+          _hComb_topY_parton_norm->fill(partonTopP4.rapidity(), weight);
+        }
+
+        if (passParticleTop) {
+          _hMu_topPt_particle->fill(particleTopP4.pT()/GeV, weight);
+          _hMu_topPt_particle_norm->fill(particleTopP4.pT()/GeV, weight);
+          _hComb_topPt_particle->fill(particleTopP4.pT()/GeV, weight);
+          _hComb_topPt_particle_norm->fill(particleTopP4.pT()/GeV, weight);
+
+          if (particleTopP4.pT() >= 400*GeV) {
+            _nPassParticle_mu += weight;
+            _hMu_cutflow->fill(6.);
+            _hMu_topY_particle->fill(particleTopP4.rapidity(), weight);
+            _hMu_topY_particle_norm->fill(particleTopP4.rapidity(), weight);
+            _hComb_topY_particle->fill(particleTopP4.rapidity(), weight);
+            _hComb_topY_particle_norm->fill(particleTopP4.rapidity(), weight);
+          }
+        }
+      }
+
+      if (partonCh == 2){
+        _nEl += weight;
+        _hEl_topPt_parton->fill(partonTopP4.pT()/GeV, weight);
+        _hEl_topPt_parton_norm->fill(partonTopP4.pT()/GeV, weight);
+        _hComb_topPt_parton->fill(partonTopP4.pT()/GeV, weight);
+        _hComb_topPt_parton_norm->fill(partonTopP4.pT()/GeV, weight);
+
+        if (partonTopP4.pT() >= 400*GeV) {
+          _nPassParton_el += weight;
+          _hEl_cutflow->fill(2.);
+          _hEl_topY_parton->fill(partonTopP4.rapidity(), weight);
+          _hEl_topY_parton_norm->fill(partonTopP4.rapidity(), weight);
+          _hComb_topY_parton->fill(partonTopP4.rapidity(), weight);
+          _hComb_topY_parton_norm->fill(partonTopP4.rapidity(), weight);
+        }
+
+        if (passParticleTop) {
+          _hEl_topPt_particle->fill(particleTopP4.pT()/GeV, weight);
+          _hEl_topPt_particle_norm->fill(particleTopP4.pT()/GeV, weight);
+          _hComb_topPt_particle->fill(particleTopP4.pT()/GeV, weight);
+          _hComb_topPt_particle_norm->fill(particleTopP4.pT()/GeV, weight);
+
+          if (particleTopP4.pT() >= 400*GeV) {
+            _nPassParticle_el += weight;
+            _hEl_cutflow->fill(6.);
+            _hEl_topY_particle->fill(particleTopP4.rapidity(), weight);
+            _hEl_topY_particle_norm->fill(particleTopP4.rapidity(), weight);
+            _hComb_topY_particle->fill(particleTopP4.rapidity(), weight);
+            _hComb_topY_particle_norm->fill(particleTopP4.rapidity(), weight);
+          }
+        }
+      }
+    }
+
+
+    void finalize() {
+
+      normalize({_hMu_topPt_parton_norm, _hMu_topY_parton_norm, _hEl_topPt_parton_norm,
+            _hEl_topY_parton_norm, _hComb_topPt_parton_norm, _hComb_topY_parton_norm}, 1.0, false);
+      normalize({_hMu_topPt_particle_norm, _hMu_topY_particle_norm, _hEl_topPt_particle_norm,
+            _hEl_topY_particle_norm, _hComb_topPt_particle_norm, _hComb_topY_particle_norm}, 1.0, false);
+
+      scale(_hMu_topPt_particle, crossSection()/femtobarn / sumOfWeights());
+      scale(_hEl_topPt_particle, crossSection()/femtobarn / sumOfWeights());
+      scale(_hMu_topY_particle, crossSection()/femtobarn / sumOfWeights());
+      scale(_hEl_topY_particle, crossSection()/femtobarn / sumOfWeights());
+      scale(_hComb_topPt_particle, crossSection()/femtobarn / sumOfWeights());
+      scale(_hComb_topY_particle, crossSection()/femtobarn / sumOfWeights());
+
+      scale(_hMu_topPt_parton, crossSection()/femtobarn / sumOfWeights());
+      scale(_hEl_topPt_parton, crossSection()/femtobarn / sumOfWeights());
+      scale(_hMu_topY_parton, crossSection()/femtobarn / sumOfWeights());
+      scale(_hEl_topY_parton, crossSection()/femtobarn / sumOfWeights());
+      scale(_hComb_topPt_parton, crossSection()/femtobarn / sumOfWeights());
+      scale(_hComb_topY_parton, crossSection()/femtobarn / sumOfWeights());
+
+    }
+
+
+  private:
+
+    Histo1DPtr _hMu_topPt_parton, _hMu_topY_parton, _hEl_topPt_parton, _hEl_topY_parton, _hComb_topPt_parton, _hComb_topY_parton;
+    Histo1DPtr _hMu_topPt_particle, _hMu_topY_particle, _hEl_topPt_particle, _hEl_topY_particle, _hComb_topPt_particle, _hComb_topY_particle;
+    Histo1DPtr _hMu_topPt_parton_norm, _hMu_topY_parton_norm, _hEl_topPt_parton_norm, _hEl_topY_parton_norm, _hComb_topPt_parton_norm, _hComb_topY_parton_norm;
+    Histo1DPtr _hMu_topPt_particle_norm, _hMu_topY_particle_norm, _hEl_topPt_particle_norm, _hEl_topY_particle_norm, _hComb_topPt_particle_norm, _hComb_topY_particle_norm;
+    Histo1DPtr _hMu_cutflow, _hEl_cutflow;
+
+    double _nMu = 0., _nEl = 0.;
+    double _nPassParton_mu = 0.,_nPassParton_el = 0.;
+    double _nPassParticle_mu = 0., _nPassParticle_el = 0.;
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(CMS_2016_I1454211);
+
+}
diff --git a/analyses/pluginCMS/CMS_2016_I1454211.info b/analyses/pluginCMS/CMS_2016_I1454211.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1454211.info
@@ -0,0 +1,73 @@
+Name: CMS_2016_I1454211
+Year: 2016
+Summary: Boosted $t\bar{t}$ in $pp$ collisions at $\sqrt{s} = 8~\TeV$
+Experiment: CMS
+Collider: LHC
+InspireID: 1454211
+Status: VALIDATED
+Authors:
+ - Salvatore Rappoccio <rappoccio@gmail.com>
+ - Maral Alyari <maralaly@buffalo.edu>
+ - Julia Thom <thom.julia@gmail.com>
+ - Louise Skinnari <louise.skinnari@cern.ch>
+ - Susan Dittmer <Susan.Dittmer@cern.ch>
+ - Matthew Bellis <mbellis@sienna.edu>
+References:
+ - CMS-PAS-TOP-14-012 (PAS)
+ - CERN-EP-2016-078   (paper)
+RunInfo:
+  '$pp$ QCD interactions at $\sqrt{s} = 8~\TeV with $t\bar{t}$ process. Data collected by CMS
+  during the year 2012. Boosted topology restricts phase space, requiring high statistics in
+  a single run or custom merging of the YODA files.'
+Luminosity: 19.7 /fb
+Beams: [p+, p+]
+Energies: [8000]
+Description:
+  'The cross section for pair production of top quarks with high transverse momenta
+  ($p_{\rm T} > 400$~GeV) is measured in 19.7~fb$^{-1}$ of $\mathrm{pp}$
+  collisions, collected with the CMS detector at $\sqrt{s} = 8$~TeV. The
+  measurement is performed for lepton+jets events, where one top quark decays
+  according to $t \rightarrow Wb \rightarrow \ell \nu b$, with $\ell$ denoting an
+  electron or muon, and the second top quark decays to an hadronic final state and
+  is reconstructed as a single, large-radius jet and identified as a top quark
+  candidate using jet substructure techniques. Integrated cross sections, as well
+  as differential cross sections as a function of the top quark $p_{\rm T}$ and
+  rapidity, are measured both at particle level within a fiducial region
+  resembling the detector-level selections and at parton level.
+
+  RIVET:
+  This analysis is to be run on ${\rm t\bar{t}}$ Monte Carlo.  It utilizes the
+  PartonicTops projection, which assumes top quarks in the event record. The
+  analysis has been validated with Powheg+Pythia6.
+
+  The parton-level phase space is defined by requiring two PartonicTops.
+  Exactly one PartonicTop must decay directly to a muon or electron (no
+  intermediate tau), and exactly one PartonicTop decays hadronically.  For for
+  $t\bar{t}$ Monte Carlo, this is equivalent to requiring the event to be
+  semileptonic at parton level.  The parton-level top quark is defined as the
+  hadronically decaying top. The parton-level top quark is required to have
+  $p_{T} > 400$~GeV.
+
+  The particle-level phase space is defined using the following object definitions:
+  - Lepton: A dressed electron or muon, meaning the lepton has been clustered with all photons within a cone of $R=0.1$. The DressedLepton projection is used to construct the dressed lepton.  The lepton is required to have $p_{T} > 45$~GeV and $|\eta| < 2.1$.
+  - B Jet Candidate: Gen AK5 jets are formed by clustering the final state particles in the event using the anti-$k_{T}$ algorithm with distance parameter $R=0.5$.  Neutrinos are excluded from the clustering, as are any particles included in the dressed lepton.  The gen AK5 jet is required to have $p_{T} > 30$~GeV and $|\eta| < 2.4$. Gen AK5 jets in the same hemisphere as the lepton ($\Delta {\rm R(e/\mu,~jet)} < \pi/2$) are defined as b-jet candidates.
+  - Top Jet Candidate: Gen CA8 jets are formed by clustering the final state particles in the event using the Cambridge-Aachen algorithm with distance parameter $R=0.8$. Neutrinos are excluded from the clustering, as are any particles included in the dressed lepton. The gen CA8 jet is required to have $p_{T} > 30$~GeV and $|\eta| < 2.4$. Gen CA8 jets which have $p_{T} > 400$~GeV, 140 GeV $<$ mass $<$ 250 GeV, and are in the opposite hemisphere from the lepton ($\Delta{\rm R(e/\mu,~jet)} > \pi/2$) are defined as top jet candidates.
+
+  The particle-level phase space is defined by requiring $\geq 1$ b jet
+  candidate, $\geq 1$ top jet candidate, and exactly one lepton. This is in
+  addition to the parton-level semileptonic requirement. The highest-$p_{T}$ top
+  jet candidate is defined as the particle-level t jet.'
+BibKey: Khachatryan:2016gxp
+BibTex: '@article{Khachatryan:2016gxp,
+      author         = "Khachatryan, Vardan and others",
+      title          = "{Measurement of the integrated and differential t-tbar
+                        production cross sections for high-pt top quarks in pp
+                        collisions at sqrt(s) = 8 TeV}",
+      collaboration  = "CMS",
+      year           = "2016",
+      eprint         = "1605.00116",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CMS-TOP-14-012, CERN-EP-2016-078",
+      SLACcitation   = "%%CITATION = ARXIV:1605.00116;%%"
+}'
diff --git a/analyses/pluginCMS/CMS_2016_I1454211.plot b/analyses/pluginCMS/CMS_2016_I1454211.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1454211.plot
@@ -0,0 +1,273 @@
+# BEGIN PLOT /CMS_2016_I1454211/d*
+Title=CMS, 8 TeV, $t\bar{t}$ boosted lepton+jets
+YLabelSep=6
+RatioPlotErrorBandColor=cyan!50!blue!40
+RatioPlotYSize=2.6
+PlotSize=10.7,7.2
+CustomLegend=\colorbox{cyan!50!blue!40}{Stat+Sys Uncertainty}
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d01-x01-y01
+XLabel={\large Top quark ${\rm p_{T}}$ (GeV)}
+YLabel={\large ${\rm d}\sigma/{\rm dp_{T} \ (fb / GeV)}$}
+YMin=0.015 
+YMax=30.0
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d02-x01-y01
+XLabel={\large Particle-level t jet ${\rm p_{T}}$ (GeV)}
+YLabel={\large ${\rm d}\sigma/{\rm dp_{T} \ (fb / GeV)}$}
+YMin=0.015
+YMax=10.0
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d03-x01-y01
+XLabel={\large Top quark y}
+YLabel={\large ${\rm d}\sigma/{\rm dy \ (fb)}$}
+YMin=0.0
+YMax=900.0
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+LegendXPos=0.3
+LegendYPos=0.4
+LogY=0
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d04-x01-y01
+XLabel={\large Particle-level t jet y}
+YLabel={\large ${\rm d}\sigma/{\rm dy \ (fb)}$}
+YMin=0.0
+YMax=320.0
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+LegendXPos=0.3
+LegendYPos=0.4
+LogY=0
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d05-x01-y01
+XLabel={\large Top quark ${\rm p_{T}}$ (GeV)}
+YLabel={\large ${\rm d}\sigma/{\rm dp_{T} \ (fb / GeV)}$}
+YMin=0.015
+YMax=30.0
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d06-x01-y01
+XLabel={\large Particle-level t jet ${\rm p_{T}}$ (GeV)}
+YLabel={\large ${\rm d}\sigma/{\rm dp_{T} \ (fb / GeV)}$}
+YMin=0.015
+YMax=10.0
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d07-x01-y01
+XLabel={\large Top quark y}
+YLabel={\large ${\rm d}\sigma/{\rm dy \ (fb)}$}
+YMin=0.0
+YMax=900.0
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+LegendXPos=0.3
+LegendYPos=0.4
+LogY=0
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d08-x01-y01
+XLabel={\large Particle-level t jet y}
+YLabel={\large ${\rm d}\sigma/{\rm dy \ (fb)}$}
+YMin=0.0
+YMax=320.0
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+LegendXPos=0.3
+LegendYPos=0.4
+LogY=0
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d09-x01-y01
+XLabel={\large Top quark ${\rm p_{T}}$ (GeV)}
+YLabel={\large ${\rm d}\sigma/{\rm dp_{T} \ (fb / GeV)}$}
+YMin=0.015
+YMax=30.0
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d10-x01-y01
+XLabel={\large Particle-level t jet ${\rm p_{T}}$ (GeV)}
+YLabel={\large ${\rm d}\sigma/{\rm dp_{T} \ (fb / GeV)}$}
+YMin=0.015
+YMax=10.0
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d11-x01-y01
+XLabel={\large Top quark y}
+YLabel={\large ${\rm d}\sigma/{\rm dy \ (fb)}$}
+YMin=0.0
+YMax=900.0
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+LegendXPos=0.3
+LegendYPos=0.4
+LogY=0
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d12-x01-y01
+XLabel={\large Particle-level t jet y}
+YLabel={\large ${\rm d}\sigma/{\rm dy \ (fb)}$}
+YMin=0.0
+YMax=320.0
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+LegendXPos=0.3
+LegendYPos=0.4
+LogY=0
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d13-x01-y01
+XLabel={\large Top quark ${\rm p_{T}}$ (GeV)}
+YLabel={\large ${\rm 1}/\sigma \ {\rm d}\sigma/{\rm dp_{T} \ (1 / GeV)}$}
+NormalizeToIntegral=1
+YMin=0.000015
+YMax=0.015
+RatioPlotYMin=0.6
+RatioPlotYMax=1.4
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d14-x01-y01
+XLabel={\large Particle-level t jet ${\rm p_{T}}$ (GeV)}
+YLabel={\large ${\rm 1}/\sigma \ {\rm d}\sigma/{\rm dp_{T} \ (1 / GeV)}$}
+NormalizeToIntegral=1
+YMin=0.00003
+YMax=0.015
+RatioPlotYMin=0.6
+RatioPlotYMax=1.4
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d15-x01-y01
+XLabel={\large Top quark y}
+YLabel={\large ${\rm 1}/\sigma \ {\rm d}\sigma/{\rm dy} $}
+NormalizeToIntegral=1
+YMin=0.0
+YMax=0.5
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+LegendXPos=0.3
+LegendYPos=0.4
+LogY=0
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d16-x01-y01
+XLabel={\large Particle-level t jet y}
+YLabel={\large ${\rm 1}/\sigma \ {\rm d}\sigma/{\rm dy} $}
+NormalizeToIntegral=1
+YMin=0.0
+YMax=0.5
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+LegendXPos=0.3
+LegendYPos=0.4
+LogY=0
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d17-x01-y01
+XLabel={\large Top quark ${\rm p_{T}}$ (GeV)}
+YLabel={\large ${\rm 1}/\sigma \ {\rm d}\sigma/{\rm dp_{T} \ (1 / GeV)}$}
+NormalizeToIntegral=1
+YMin=0.000015
+YMax=0.015
+RatioPlotYMin=0.6
+RatioPlotYMax=1.4
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d18-x01-y01
+XLabel={\large Particle-level t jet ${\rm p_{T}}$ (GeV)}
+YLabel={\large ${\rm 1}/\sigma \ {\rm d}\sigma/{\rm dp_{T} \ (1 / GeV)}$}
+NormalizeToIntegral=1
+YMin=0.00003
+YMax=0.015
+RatioPlotYMin=0.6
+RatioPlotYMax=1.4
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d19-x01-y01
+XLabel={\large Top quark y}
+YLabel={\large ${\rm 1}/\sigma \ {\rm d}\sigma/{\rm dy} $}
+NormalizeToIntegral=1
+YMin=0.0
+YMax=0.5
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+LegendXPos=0.3
+LegendYPos=0.4
+LogY=0
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d20-x01-y01
+XLabel={\large Particle-level t jet y}
+YLabel={\large $1/\sigma \ {\rm d}\sigma/{\rm dy} $}
+NormalizeToIntegral=1
+YMin=0.0
+YMax=0.5
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+LegendXPos=0.3
+LegendYPos=0.4
+LogY=0
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d21-x01-y01
+XLabel={\large Top quark ${\rm p_{T}}$ (GeV)}
+YLabel={\large $1/\sigma \ {\rm d}\sigma/{\rm dp_{T} \ (1 / GeV)}$}
+NormalizeToIntegral=1
+YMin=0.000015
+YMax=0.015
+RatioPlotYMin=0.6
+RatioPlotYMax=1.4
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d22-x01-y01
+XLabel={\large Particle-level t jet ${\rm p_{T}}$ (GeV)}
+YLabel={\large $1/\sigma \ {\rm d}\sigma/{\rm dp_{T} \ (1 / GeV)}$}
+NormalizeToIntegral=1
+YMin=0.00003
+YMax=0.015
+RatioPlotYMin=0.6
+RatioPlotYMax=1.4
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d23-x01-y01
+XLabel={\large Top quark y}
+YLabel={\large $1/\sigma \ {\rm d}\sigma/{\rm dy} $}
+NormalizeToIntegral=1
+YMin=0.0
+YMax=0.5
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+LegendXPos=0.3
+LegendYPos=0.4
+LogY=0
+#END PLOT
+
+# BEGIN PLOT /CMS_2016_I1454211/d24-x01-y01
+XLabel={\large Particle-level t jet y}
+YLabel={\large $1/\sigma \ {\rm d}\sigma/{\rm dy} $}
+NormalizeToIntegral=1
+YMin=0.0
+YMax=0.5
+RatioPlotYMin=0.45
+RatioPlotYMax=1.55
+LegendXPos=0.3
+LegendYPos=0.4
+LogY=0
+#END PLOT
+
diff --git a/analyses/pluginCMS/CMS_2016_I1454211.yoda b/analyses/pluginCMS/CMS_2016_I1454211.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1454211.yoda
@@ -0,0 +1,372 @@
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d01-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d01-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+4.500000e+02    5.000000e+01    5.000000e+01    1.031508e+01    1.128690e+00    1.128690e+00
+5.500000e+02    5.000000e+01    5.000000e+01    2.758525e+00    3.792882e-01    3.792882e-01
+6.500000e+02    5.000000e+01    5.000000e+01    8.036734e-01    1.790923e-01    1.790923e-01
+7.500000e+02    5.000000e+01    5.000000e+01    2.596428e-01    4.861078e-02    4.861078e-02
+1.000000e+03    2.000000e+02    2.000000e+02    4.102608e-02    1.353176e-02    1.353176e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d02-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d02-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+4.500000e+02    5.000000e+01    5.000000e+01    2.882694e+00    3.556590e-01    3.556590e-01
+5.500000e+02    5.000000e+01    5.000000e+01    1.287015e+00    1.855723e-01    1.855723e-01
+6.500000e+02    5.000000e+01    5.000000e+01    4.920342e-01    1.078293e-01    1.078293e-01
+7.500000e+02    5.000000e+01    5.000000e+01    1.849118e-01    3.754525e-02    3.754525e-02
+1.000000e+03    2.000000e+02    2.000000e+02    2.764141e-02    9.112670e-03    9.112670e-03
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d03-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d03-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+-1.800000e+00   6.000000e-01    6.000000e-01    8.499947e+01    1.518884e+01    1.518884e+01
+-9.000000e-01   3.000000e-01    3.000000e-01    4.184479e+02    4.917906e+01    4.917906e+01
+-3.000000e-01   3.000000e-01    3.000000e-01    6.330678e+02    7.801154e+01    7.801154e+01
+3.000000e-01    3.000000e-01    3.000000e-01    6.165554e+02    7.801154e+01    7.801154e+01
+9.000000e-01    3.000000e-01    3.000000e-01    3.932040e+02    4.917906e+01    4.917906e+01
+1.800000e+00    6.000000e-01    6.000000e-01    7.611504e+01    1.518884e+01    1.518884e+01
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d04-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d04-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+-1.800000e+00   6.000000e-01    6.000000e-01    3.106421e+01    6.920476e+00    6.920476e+00
+-9.000000e-01   3.000000e-01    3.000000e-01    1.487446e+02    2.363351e+01    2.363351e+01
+-3.000000e-01   3.000000e-01    3.000000e-01    2.173160e+02    2.836563e+01    2.836563e+01
+3.000000e-01    3.000000e-01    3.000000e-01    2.109915e+02    2.836563e+01    2.836563e+01
+9.000000e-01    3.000000e-01    3.000000e-01    1.366730e+02    2.363351e+01    2.363351e+01
+1.800000e+00    6.000000e-01    6.000000e-01    2.517494e+01    6.920476e+00    6.920476e+00
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d05-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d05-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+4.500000e+02    5.000000e+01    5.000000e+01    1.051272e+01    1.347735e+00    1.347735e+00
+5.500000e+02    5.000000e+01    5.000000e+01    2.723801e+00    4.277446e-01    4.277446e-01
+6.500000e+02    5.000000e+01    5.000000e+01    7.765608e-01    1.697990e-01    1.697990e-01
+7.500000e+02    5.000000e+01    5.000000e+01    2.503761e-01    6.428047e-02    6.428047e-02
+1.000000e+03    2.000000e+02    2.000000e+02    3.387926e-02    1.102703e-02    1.102703e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d06-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d06-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+4.500000e+02    5.000000e+01    5.000000e+01    2.992817e+00    3.047843e-01    3.047843e-01
+5.500000e+02    5.000000e+01    5.000000e+01    1.284560e+00    1.830560e-01    1.830560e-01
+6.500000e+02    5.000000e+01    5.000000e+01    4.608286e-01    9.991781e-02    9.991781e-02
+7.500000e+02    5.000000e+01    5.000000e+01    1.580880e-01    3.764355e-02    3.764355e-02
+1.000000e+03    2.000000e+02    2.000000e+02    2.976591e-02    1.354074e-02    1.354074e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d07-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d07-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+-1.800000e+00   6.000000e-01    6.000000e-01    8.186086e+01    1.386628e+01    1.386628e+01
+-9.000000e-01   3.000000e-01    3.000000e-01    4.174869e+02    4.108060e+01    4.108060e+01
+-3.000000e-01   3.000000e-01    3.000000e-01    6.174619e+02    7.336331e+01    7.336331e+01
+3.000000e-01    3.000000e-01    3.000000e-01    6.433784e+02    7.336331e+01    7.336331e+01
+9.000000e-01    3.000000e-01    3.000000e-01    3.983684e+02    4.108060e+01    4.108060e+01
+1.800000e+00    6.000000e-01    6.000000e-01    7.970628e+01    1.386628e+01    1.386628e+01
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d08-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d08-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+-1.800000e+00   6.000000e-01    6.000000e-01    2.512857e+01    4.650371e+00    4.650371e+00
+-9.000000e-01   3.000000e-01    3.000000e-01    1.451208e+02    1.875452e+01    1.875452e+01
+-3.000000e-01   3.000000e-01    3.000000e-01    2.226904e+02    2.487128e+01    2.487128e+01
+3.000000e-01    3.000000e-01    3.000000e-01    2.265068e+02    2.487128e+01    2.487128e+01
+9.000000e-01    3.000000e-01    3.000000e-01    1.387088e+02    1.875452e+01    1.875452e+01
+1.800000e+00    6.000000e-01    6.000000e-01    2.630441e+01    4.650371e+00    4.650371e+00
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d09-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d09-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+4.500000e+02    5.000000e+01    5.000000e+01    1.044302e+01    1.179956e+00    1.179956e+00
+5.500000e+02    5.000000e+01    5.000000e+01    2.735903e+00    3.922825e-01    3.922825e-01
+6.500000e+02    5.000000e+01    5.000000e+01    7.861072e-01    1.641850e-01    1.641850e-01
+7.500000e+02    5.000000e+01    5.000000e+01    2.537667e-01    5.180456e-02    5.180456e-02
+1.000000e+03    2.000000e+02    2.000000e+02    3.607550e-02    1.198957e-02    1.198957e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d10-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d10-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+4.500000e+02    5.000000e+01    5.000000e+01    2.953715e+00    2.835658e-01    2.835658e-01
+5.500000e+02    5.000000e+01    5.000000e+01    1.285429e+00    1.694500e-01    1.694500e-01
+6.500000e+02    5.000000e+01    5.000000e+01    4.711078e-01    9.719153e-02    9.719153e-02
+7.500000e+02    5.000000e+01    5.000000e+01    1.663055e-01    3.670400e-02    3.670400e-02
+1.000000e+03    2.000000e+02    2.000000e+02    2.884538e-02    1.188891e-02    1.188891e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d11-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d11-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+-1.800000e+00   6.000000e-01    6.000000e-01    8.292483e+01    1.378834e+01    1.378834e+01
+-9.000000e-01   3.000000e-01    3.000000e-01    4.178235e+02    4.062367e+01    4.062367e+01
+-3.000000e-01   3.000000e-01    3.000000e-01    6.226553e+02    7.176831e+01    7.176831e+01
+3.000000e-01    3.000000e-01    3.000000e-01    6.338986e+02    7.176831e+01    7.176831e+01
+9.000000e-01    3.000000e-01    3.000000e-01    3.966619e+02    4.062367e+01    4.062367e+01
+1.800000e+00    6.000000e-01    6.000000e-01    7.848446e+01    1.378834e+01    1.378834e+01
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d12-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d12-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+-1.800000e+00   6.000000e-01    6.000000e-01    2.678385e+01    5.084816e+00    5.084816e+00
+-9.000000e-01   3.000000e-01    3.000000e-01    1.463931e+02    1.764640e+01    1.764640e+01
+-3.000000e-01   3.000000e-01    3.000000e-01    2.207858e+02    2.255939e+01    2.255939e+01
+3.000000e-01    3.000000e-01    3.000000e-01    2.209164e+02    2.255939e+01    2.255939e+01
+9.000000e-01    3.000000e-01    3.000000e-01    1.380491e+02    1.764640e+01    1.764640e+01
+1.800000e+00    6.000000e-01    6.000000e-01    2.592329e+01    5.084816e+00    5.084816e+00
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d13-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d13-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+4.500000e+02    5.000000e+01    5.000000e+01    7.210543e-03    3.979490e-04    3.979490e-04
+5.500000e+02    5.000000e+01    5.000000e+01    1.928290e-03    1.494819e-04    1.494819e-04
+6.500000e+02    5.000000e+01    5.000000e+01    5.617912e-04    1.017508e-04    1.017508e-04
+7.500000e+02    5.000000e+01    5.000000e+01    1.814979e-04    2.262509e-05    2.262509e-05
+1.000000e+03    2.000000e+02    2.000000e+02    2.867843e-05    8.507071e-06    8.507071e-06
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d14-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d14-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+4.500000e+02    5.000000e+01    5.000000e+01    5.810921e-03    5.394970e-04    5.394970e-04
+5.500000e+02    5.000000e+01    5.000000e+01    2.594359e-03    2.275866e-04    2.275866e-04
+6.500000e+02    5.000000e+01    5.000000e+01    9.918400e-04    1.672290e-04    1.672290e-04
+7.500000e+02    5.000000e+01    5.000000e+01    3.727444e-04    6.185906e-05    6.185906e-05
+1.000000e+03    2.000000e+02    2.000000e+02    5.571943e-05    1.540655e-05    1.540655e-05
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d15-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d15-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+-1.800000e+00   6.000000e-01    6.000000e-01    5.943593e-02    8.467803e-03    8.467803e-03
+-9.000000e-01   3.000000e-01    3.000000e-01    2.925999e-01    1.845278e-02    1.845278e-02
+-3.000000e-01   3.000000e-01    3.000000e-01    4.426730e-01    2.763462e-02    2.763462e-02
+3.000000e-01    3.000000e-01    3.000000e-01    4.311267e-01    2.763462e-02    2.763462e-02
+9.000000e-01    3.000000e-01    3.000000e-01    2.749481e-01    1.845278e-02    1.845278e-02
+1.800000e+00    6.000000e-01    6.000000e-01    5.322349e-02    8.467803e-03    8.467803e-03
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d16-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d16-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+-1.800000e+00   6.000000e-01    6.000000e-01    6.266457e-02    1.053793e-02    1.053793e-02
+-9.000000e-01   3.000000e-01    3.000000e-01    3.000564e-01    3.523171e-02    3.523171e-02
+-3.000000e-01   3.000000e-01    3.000000e-01    4.383828e-01    4.256317e-02    4.256317e-02
+3.000000e-01    3.000000e-01    3.000000e-01    4.256245e-01    4.256317e-02    4.256317e-02
+9.000000e-01    3.000000e-01    3.000000e-01    2.757050e-01    3.523171e-02    3.523171e-02
+1.800000e+00    6.000000e-01    6.000000e-01    5.078439e-02    1.053793e-02    1.053793e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d17-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d17-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+4.500000e+02    5.000000e+01    5.000000e+01    7.299827e-03    2.686488e-04    2.686488e-04
+5.500000e+02    5.000000e+01    5.000000e+01    1.891354e-03    8.701970e-05    8.701970e-05
+6.500000e+02    5.000000e+01    5.000000e+01    5.392285e-04    5.867628e-05    5.867628e-05
+7.500000e+02    5.000000e+01    5.000000e+01    1.738562e-04    2.780555e-05    2.780555e-05
+1.000000e+03    2.000000e+02    2.000000e+02    2.352508e-05    5.855551e-06    5.855551e-06
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d18-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d18-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+4.500000e+02    5.000000e+01    5.000000e+01    5.960441e-03    4.444360e-04    4.444360e-04
+5.500000e+02    5.000000e+01    5.000000e+01    2.558307e-03    1.687219e-04    1.687219e-04
+6.500000e+02    5.000000e+01    5.000000e+01    9.177781e-04    1.240276e-04    1.240276e-04
+7.500000e+02    5.000000e+01    5.000000e+01    3.148453e-04    5.302363e-05    5.302363e-05
+1.000000e+03    2.000000e+02    2.000000e+02    5.928126e-05    2.482370e-05    2.482370e-05
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d19-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d19-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+-1.800000e+00   6.000000e-01    6.000000e-01    5.685185e-02    7.821434e-03    7.821434e-03
+-9.000000e-01   3.000000e-01    3.000000e-01    2.899420e-01    1.743507e-02    1.743507e-02
+-3.000000e-01   3.000000e-01    3.000000e-01    4.288234e-01    2.823772e-02    2.823772e-02
+3.000000e-01    3.000000e-01    3.000000e-01    4.468222e-01    2.823772e-02    2.823772e-02
+9.000000e-01    3.000000e-01    3.000000e-01    2.766643e-01    1.743507e-02    1.743507e-02
+1.800000e+00    6.000000e-01    6.000000e-01    5.535551e-02    7.821434e-03    7.821434e-03
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d20-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d20-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+-1.800000e+00   6.000000e-01    6.000000e-01    5.010326e-02    7.381551e-03    7.381551e-03
+-9.000000e-01   3.000000e-01    3.000000e-01    2.893530e-01    2.774289e-02    2.774289e-02
+-3.000000e-01   3.000000e-01    3.000000e-01    4.440170e-01    3.939730e-02    3.939730e-02
+3.000000e-01    3.000000e-01    3.000000e-01    4.516265e-01    3.939730e-02    3.939730e-02
+9.000000e-01    3.000000e-01    3.000000e-01    2.765681e-01    2.774289e-02    2.774289e-02
+1.800000e+00    6.000000e-01    6.000000e-01    5.244774e-02    7.381551e-03    7.381551e-03
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d21-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d21-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+4.500000e+02    5.000000e+01    5.000000e+01    7.268612e-03    2.754494e-04    2.754494e-04
+5.500000e+02    5.000000e+01    5.000000e+01    1.904114e-03    1.054634e-04    1.054634e-04
+6.500000e+02    5.000000e+01    5.000000e+01    5.471043e-04    7.097935e-05    7.097935e-05
+7.500000e+02    5.000000e+01    5.000000e+01    1.766286e-04    2.037357e-05    2.037357e-05
+1.000000e+03    2.000000e+02    2.000000e+02    2.509412e-05    6.648062e-06    6.648062e-06
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d22-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d22-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+4.500000e+02    5.000000e+01    5.000000e+01    5.908174e-03    3.922144e-04    3.922144e-04
+5.500000e+02    5.000000e+01    5.000000e+01    2.570868e-03    1.490016e-04    1.490016e-04
+6.500000e+02    5.000000e+01    5.000000e+01    9.417805e-04    1.229604e-04    1.229604e-04
+7.500000e+02    5.000000e+01    5.000000e+01    3.322866e-04    5.077530e-05    5.077530e-05
+1.000000e+03    2.000000e+02    2.000000e+02    5.775905e-05    2.085898e-05    2.085898e-05
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d23-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d23-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+-1.800000e+00   6.000000e-01    6.000000e-01    5.771995e-02    7.685350e-03    7.685350e-03
+-9.000000e-01   3.000000e-01    3.000000e-01    2.908648e-01    1.267432e-02    1.267432e-02
+-3.000000e-01   3.000000e-01    3.000000e-01    4.333905e-01    2.370656e-02    2.370656e-02
+3.000000e-01    3.000000e-01    3.000000e-01    4.413240e-01    2.370656e-02    2.370656e-02
+9.000000e-01    3.000000e-01    3.000000e-01    2.761024e-01    1.267432e-02    1.267432e-02
+1.800000e+00    6.000000e-01    6.000000e-01    5.463667e-02    7.685350e-03    7.685350e-03
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2016_I1454211/d24-x01-y01
+ErrorBars=1
+LineColor=black
+Path=/REF/CMS_2016_I1454211/d24-x01-y01
+PolyMarker=*
+Title=
+Type=Scatter2D
+# xval   xerr-   xerr+   yval    yerr-   yerr+
+-1.800000e+00   6.000000e-01    6.000000e-01    5.354764e-02    7.536052e-03    7.536052e-03
+-9.000000e-01   3.000000e-01    3.000000e-01    2.930541e-01    2.213384e-02    2.213384e-02
+-3.000000e-01   3.000000e-01    3.000000e-01    4.420503e-01    3.146182e-02    3.146182e-02
+3.000000e-01    3.000000e-01    3.000000e-01    4.423969e-01    3.146182e-02    3.146182e-02
+9.000000e-01    3.000000e-01    3.000000e-01    2.762928e-01    2.213384e-02    2.213384e-02
+1.800000e+00    6.000000e-01    6.000000e-01    5.189510e-02    7.536052e-03    7.536052e-03
+# END YODA_SCATTER2D
+
diff --git a/src/Analyses/CMS_2016_I1459051.cc b/analyses/pluginCMS/CMS_2016_I1459051.cc
rename from src/Analyses/CMS_2016_I1459051.cc
rename to analyses/pluginCMS/CMS_2016_I1459051.cc
diff --git a/data/anainfo/CMS_2016_I1459051.info b/analyses/pluginCMS/CMS_2016_I1459051.info
rename from data/anainfo/CMS_2016_I1459051.info
rename to analyses/pluginCMS/CMS_2016_I1459051.info
--- a/data/anainfo/CMS_2016_I1459051.info
+++ b/analyses/pluginCMS/CMS_2016_I1459051.info
@@ -1,55 +1,55 @@
 Name: CMS_2016_I1459051
 Year: 2016
 Summary: Measurement of the inclusive jet cross-section in $pp$ collisions at $\sqrt{s} = 13\;\TeV$
 Experiment: CMS
 Collider: LHC
 SpiresID: 1459051
 Status: VALIDATED
 Authors:
  - Paolo Gunnellini <paolo.gunnellini@desy.de>
 References:
  - Eur.Phys.J. C76 (2016) no.8, 451
  - CERN-EP-2016-104
  - CMS-SMP-15-007
 RunInfo:
    Inclusive hard QCD at 13 TeV center-of-mass energy, and ptHat (or equivalent) greater than 90 GeV
 NumEvents: 200k
 Beams: [p+, p+]
 Energies: [13000]
 PtCuts: Jet pT higher than 114 GeV
 Description:
-	'A measurement of the double-differential inclusive jet cross section as a function of
-    jet transverse momentum pT and absolute jet rapidity |y| is presented. The analysis is
-    based on proton-proton collisions collected by the CMS experiment at the LHC at a
-    centre-of-mass energy of 13 TeV. The data samples correspond to integrated luminosities
-    of 71 and 44 pb−1 for |y| < 3 and 3.2 < |y| < 4.7, respectively. Jets are reconstructed
-    with the anti-kt clustering algorithm for two jet sizes, R, of 0.7 and 0.4, in a phase
-    space region covering jet pT up to 2 TeV and jet rapidity up to |y| = 4.7. Predictions
-    of perturbative quantum chromodynamics at next-to-leading order precision, complemented
-    with electroweak and nonperturbative corrections, are used to compute the absolute scale
-    and the shape of the inclusive jet cross section. The cross-section difference in $R$,
-    when going to a smaller jet size of 0.4, is best described by Monte Carlo event generators
-    with next-to-leading order predictions matched to parton showering, hadronisation, and
-    multiparton interactions. In the phase space accessible with the new data, this
-    measurement provides a first indication that jet physics is as well understood at
-    $\sqrt(s) = 13\;\TeV$ as at smaller centre-of-mass energies.'
+  'A measurement of the double-differential inclusive jet cross section as a function of
+  jet transverse momentum pT and absolute jet rapidity |y| is presented. The analysis is
+  based on proton-proton collisions collected by the CMS experiment at the LHC at a
+  centre-of-mass energy of 13 TeV. The data samples correspond to integrated luminosities
+  of 71 and 44 pb−1 for |y| < 3 and 3.2 < |y| < 4.7, respectively. Jets are reconstructed
+  with the anti-kt clustering algorithm for two jet sizes, R, of 0.7 and 0.4, in a phase
+  space region covering jet pT up to 2 TeV and jet rapidity up to |y| = 4.7. Predictions
+  of perturbative quantum chromodynamics at next-to-leading order precision, complemented
+  with electroweak and nonperturbative corrections, are used to compute the absolute scale
+  and the shape of the inclusive jet cross section. The cross-section difference in $R$,
+  when going to a smaller jet size of 0.4, is best described by Monte Carlo event generators
+  with next-to-leading order predictions matched to parton showering, hadronisation, and
+  multiparton interactions. In the phase space accessible with the new data, this
+  measurement provides a first indication that jet physics is as well understood at
+  $\sqrt(s) = 13\;\TeV$ as at smaller centre-of-mass energies.'
 NeedCrossSection: yes
-BibKey: :Khachatryan:2016wdh
+BibKey: Khachatryan:2016wdh
 BibTeX: '@article{Khachatryan:2016wdh,
       author         = "Khachatryan, Vardan and others",
       title          = "{Measurement of the double-differential inclusive jet
                         cross section in proton–proton collisions at $\sqrt{s} =
                         13\,\text {TeV} $}",
       collaboration  = "CMS",
       journal        = "Eur. Phys. J.",
       volume         = "C76",
       year           = "2016",
       number         = "8",
       pages          = "451",
       doi            = "10.1140/epjc/s10052-016-4286-3",
       eprint         = "1605.04436",
       archivePrefix  = "arXiv",
       primaryClass   = "hep-ex",
       reportNumber   = "CMS-SMP-15-007, CERN-EP-2016-104",
       SLACcitation   = "%%CITATION = ARXIV:1605.04436;%%"
 }'
diff --git a/data/plotinfo/CMS_2016_I1459051.plot b/analyses/pluginCMS/CMS_2016_I1459051.plot
rename from data/plotinfo/CMS_2016_I1459051.plot
rename to analyses/pluginCMS/CMS_2016_I1459051.plot
diff --git a/data/refdata/CMS_2016_I1459051.yoda b/analyses/pluginCMS/CMS_2016_I1459051.yoda
rename from data/refdata/CMS_2016_I1459051.yoda
rename to analyses/pluginCMS/CMS_2016_I1459051.yoda
diff --git a/analyses/pluginCMS/CMS_2016_I1473674.cc b/analyses/pluginCMS/CMS_2016_I1473674.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1473674.cc
@@ -0,0 +1,124 @@
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Projections/PartonicTops.hh"
+#include "Rivet/Projections/DressedLeptons.hh"
+#include "Rivet/Projections/IdentifiedFinalState.hh"
+#include "Rivet/Projections/PromptFinalState.hh"
+#include "Rivet/Projections/VetoedFinalState.hh"
+#include "Rivet/Projections/InvMassFinalState.hh"
+#include "Rivet/Projections/MissingMomentum.hh"
+
+namespace Rivet {
+
+
+  class CMS_2016_I1473674 : public Analysis {
+  public:
+
+    // Minimal constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(CMS_2016_I1473674);
+
+
+    // Set up projections and book histograms
+    void init() {
+
+      // Complete final state
+      FinalState fs;
+
+      // Parton level top quarks
+      declare(PartonicTops(PartonicTops::E_MU, false), "LeptonicPartonTops");
+      declare(PartonicTops(PartonicTops::HADRONIC),    "HadronicPartonTops");
+
+      // Projections for dressed electrons and muons
+      IdentifiedFinalState photons(fs);
+      photons.acceptIdPair(PID::PHOTON);
+      //
+      IdentifiedFinalState el_id(fs);
+      el_id.acceptIdPair(PID::ELECTRON);
+      PromptFinalState electrons(el_id);
+      addProjection(electrons, "Electrons");
+      DressedLeptons dressed_electrons(photons, electrons, 0.1, Cuts::open(), true, false);
+      addProjection(dressed_electrons, "DressedElectrons");
+      //
+      IdentifiedFinalState mu_id(fs);
+      mu_id.acceptIdPair(PID::MUON);
+      PromptFinalState muons(mu_id);
+      addProjection(muons, "Muons");
+      DressedLeptons dressed_muons(photons, muons, 0.1, Cuts::open(), true, false);
+      addProjection(dressed_muons, "DressedMuons");
+
+      // Projection for jets
+      VetoedFinalState fs_jets(FinalState(-MAXDOUBLE, MAXDOUBLE, 0*GeV));
+      fs_jets.addVetoOnThisFinalState(dressed_muons);
+      addProjection(FastJets(fs_jets, FastJets::ANTIKT, 0.5), "Jets");
+
+      // Projections for MET
+      addProjection(MissingMomentum(), "MET");
+
+
+      // Booking of histograms
+      _hist_met = bookHisto1D(5, 1, 1);
+      _hist_ht  = bookHisto1D(6, 1, 1);
+      _hist_st  = bookHisto1D(7, 1, 1);
+      _hist_wpt = bookHisto1D(8, 1, 1);
+    }
+
+
+    /// Per-event analysis
+    void analyze(const Event& event) {
+      const double weight = event.weight();
+
+      // Select ttbar -> lepton+jets at parton level, removing tau decays
+      const Particles leptonicpartontops = apply<ParticleFinder>(event, "LeptonicPartonTops").particlesByPt();
+      if (leptonicpartontops.size() != 1) vetoEvent;
+      const Particles hadronicpartontops = apply<ParticleFinder>(event, "HadronicPartonTops").particlesByPt();
+      if (hadronicpartontops.size() != 1) vetoEvent;
+
+      // Select ttbar -> lepton+jets at particle level
+      const DressedLeptons& dressed_electrons = applyProjection<DressedLeptons>(event, "DressedElectrons");
+      const DressedLeptons& dressed_muons = applyProjection<DressedLeptons>(event, "DressedMuons");
+      if (dressed_electrons.dressedLeptons().size() + dressed_muons.dressedLeptons().size() != 1) vetoEvent;
+      const FourMomentum lepton = (dressed_electrons.dressedLeptons().empty() ? dressed_muons : dressed_electrons).dressedLeptons()[0];
+
+      // MET
+      const MissingMomentum& met = applyProjection<MissingMomentum>(event, "MET");
+      _hist_met->fill(met.visibleMomentum().pT()/GeV, weight);
+
+      // HT and ST
+      const FastJets& jetpro = applyProjection<FastJets>(event, "Jets");
+      const Jets jets = jetpro.jetsByPt(20*GeV);
+
+      double ht = 0.0;
+      for (const Jet& j : jets) {
+        if (deltaR(j.momentum(), lepton) > 0.3) {
+          ht += j.pT();
+        }
+      }
+
+      double st = ht + lepton.pT() + met.visibleMomentum().pT();
+      _hist_ht->fill(ht/GeV, weight);
+      _hist_st->fill(st/GeV, weight);
+
+      // WPT
+      const FourMomentum w = lepton - met.visibleMomentum();
+      _hist_wpt->fill(w.pT()/GeV, weight);
+    }
+
+
+    /// Normalize histograms
+    void finalize() {
+      normalize(_hist_met);
+      normalize(_hist_ht);
+      normalize(_hist_st);
+      normalize(_hist_wpt);
+    }
+
+  private:
+    Histo1DPtr _hist_met, _hist_ht, _hist_st, _hist_wpt;
+
+  };
+
+
+  DECLARE_RIVET_PLUGIN(CMS_2016_I1473674);
+
+}
diff --git a/analyses/pluginCMS/CMS_2016_I1473674.info b/analyses/pluginCMS/CMS_2016_I1473674.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1473674.info
@@ -0,0 +1,37 @@
+Name: CMS_2016_I1473674
+Year: 2016
+Summary: Measurement of the differential cross sections for top quark pair production as a function of kinematic event variables at sqrt(s) = 8 TeV
+Experiment: CMS
+Collider: LHC
+InspireID: 1473674
+Status: VALIDATED
+Authors:
+ - Markus Seidel <markus.seidel@cern.ch>
+ - Lukas Kreczko <kreczko@cern.ch>
+ - Emyr Clement <Emyr.Clement@bristol.ac.uk>
+References:
+ - arXiv:1607.00837
+RunInfo:
+  ttbar events at sqrt(s) = 8 TeV (inclusive or lepton+jets decay mode)
+  Top quarks are expected in the event record to identify the decay mode.
+Luminosity: 19.7 / fb
+Beams: [p+, p+]
+Energies: [8000]
+Description:
+  'Measurements are reported of the normalized differential cross sections for top quark pair production with respect to four kinematic event variables: the missing transverse energy; the scalar sum of the jet transverse momentum (pT); the scalar sum of the pT of all objects in the event; and the pT of leptonically decaying W bosons from top quark decays.'
+
+BibKey: Khachatryan:2016oou
+BibTeX: '@article{Khachatryan:2016oou,
+      author         = "Khachatryan, Vardan and others",
+      title          = "{Measurement of the differential cross sections for top
+                        quark pair production as a function of kinematic event
+                        variables in pp collisions at $\sqrt{s}$ = 7 and 8 TeV}",
+      collaboration  = "CMS",
+      journal        = "Submitted to: Phys. Rev. D",
+      year           = "2016",
+      eprint         = "1607.00837",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CMS-TOP-12-042, CERN-EP-2016-139",
+      SLACcitation   = "%%CITATION = ARXIV:1607.00837;%%"
+}'
diff --git a/data/plotinfo/CMS_2016_I1473674.plot b/analyses/pluginCMS/CMS_2016_I1473674.plot
rename from data/plotinfo/CMS_2016_I1473674.plot
rename to analyses/pluginCMS/CMS_2016_I1473674.plot
diff --git a/data/refdata/CMS_2016_I1473674.yoda b/analyses/pluginCMS/CMS_2016_I1473674.yoda
rename from data/refdata/CMS_2016_I1473674.yoda
rename to analyses/pluginCMS/CMS_2016_I1473674.yoda
diff --git a/analyses/pluginCMS/CMS_2016_I1486238.cc b/analyses/pluginCMS/CMS_2016_I1486238.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1486238.cc
@@ -0,0 +1,124 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/InitialQuarks.hh"
+#include "Rivet/Projections/UnstableFinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+
+namespace Rivet {
+
+
+  /// Studies of 2 b-jet + 2 jet production in proton-proton collisions at 7 TeV
+  class CMS_2016_I1486238 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(CMS_2016_I1486238);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      FastJets akt(FinalState(), FastJets::ANTIKT, 0.5);
+      addProjection(akt, "antikT");
+
+      _h_Deltaphi_newway = bookHisto1D(1,1,1);
+      _h_deltaphiafterlight = bookHisto1D(9,1,1);
+      _h_SumPLight = bookHisto1D(5,1,1);
+
+      _h_LeadingBJetpt = bookHisto1D(11,1,1);
+      _h_SubleadingBJetpt = bookHisto1D(15,1,1);
+      _h_LeadingLightJetpt = bookHisto1D(13,1,1);
+      _h_SubleadingLightJetpt = bookHisto1D(17,1,1);
+
+      _h_LeadingBJeteta = bookHisto1D(10,1,1);
+      _h_SubleadingBJeteta = bookHisto1D(14,1,1);
+      _h_LeadingLightJeteta = bookHisto1D(12,1,1);
+      _h_SubleadingLightJeteta = bookHisto1D(16,1,1);
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+      const Jets& jets = apply<JetAlg>(event, "antikT").jetsByPt(Cuts::absrap < 4.7 && Cuts::pT > 20*GeV);
+      if (jets.size() < 4) vetoEvent;
+
+      // Initial quarks
+      /// @note Quark-level tagging...
+      Particles bquarks;
+      for (const GenParticle* p : particles(event.genEvent())) {
+        if (abs(p->pdg_id()) == PID::BQUARK) bquarks += Particle(p);
+      }
+      Jets bjets, ljets;
+      for (const Jet& j : jets) {
+        const bool btag = any(bquarks, deltaRLess(j, 0.3));
+        // for (const Particle& b : bquarks) if (deltaR(j, b) < 0.3) btag = true;
+        (btag && j.abseta() < 2.4 ? bjets : ljets).push_back(j);
+      }
+
+      // Fill histograms
+      const double weight = event.weight();
+      if (bjets.size() >= 2 && ljets.size() >= 2) {
+        _h_LeadingBJetpt->fill(bjets[0].pT()/GeV, weight);
+        _h_SubleadingBJetpt->fill(bjets[1].pT()/GeV, weight);
+        _h_LeadingLightJetpt->fill(ljets[0].pT()/GeV, weight);
+        _h_SubleadingLightJetpt->fill(ljets[1].pT()/GeV, weight);
+        //
+        _h_LeadingBJeteta->fill(bjets[0].eta(), weight);
+        _h_SubleadingBJeteta->fill(bjets[1].eta(), weight);
+        _h_LeadingLightJeteta->fill(ljets[0].eta(), weight);
+        _h_SubleadingLightJeteta->fill(ljets[1].eta(), weight);
+
+        const double lightdphi = deltaPhi(ljets[0], ljets[1]);
+        _h_deltaphiafterlight->fill(lightdphi, weight);
+
+        const double vecsumlightjets = sqrt(sqr(ljets[0].px()+ljets[1].px()) + sqr(ljets[0].py()+ljets[1].py())); //< @todo Just (lj0+lj1).pT()? Or use add_quad
+        const double term2 = vecsumlightjets/(sqrt(sqr(ljets[0].px()) + sqr(ljets[0].py())) + sqrt(sqr(ljets[1].px()) + sqr(ljets[1].py()))); //< @todo lj0.pT() + lj1.pT()? Or add_quad
+        _h_SumPLight->fill(term2, weight);
+
+        const double pxBsyst2 = bjets[0].px()+bjets[1].px(); // @todo (bj0+bj1).px()
+        const double pyBsyst2 = bjets[0].py()+bjets[1].py(); // @todo (bj0+bj1).py()
+        const double pxJetssyst2 = ljets[0].px()+ljets[1].px(); // @todo (lj0+lj1).px()
+        const double pyJetssyst2 = ljets[0].py()+ljets[1].py(); // @todo (lj0+lj1).py()
+        const double modulusB2 = sqrt(sqr(pxBsyst2)+sqr(pyBsyst2)); //< @todo add_quad
+        const double modulusJets2 = sqrt(sqr(pxJetssyst2)+sqr(pyJetssyst2)); //< @todo add_quad
+        const double cosphiBsyst2 = pxBsyst2/modulusB2;
+        const double cosphiJetssyst2 = pxJetssyst2/modulusJets2;
+        const double phiBsyst2 = ((pyBsyst2 > 0) ? 1 : -1) * acos(cosphiBsyst2); //< @todo sign(pyBsyst2)
+        const double phiJetssyst2 = sign(pyJetssyst2) * acos(cosphiJetssyst2);
+        const double Dphi2 = deltaPhi(phiBsyst2, phiJetssyst2);
+        _h_Deltaphi_newway->fill(Dphi2,weight);
+      }
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+      const double invlumi = crossSection()/picobarn/sumOfWeights();
+      normalize({_h_SumPLight, _h_deltaphiafterlight, _h_Deltaphi_newway});
+      scale({_h_LeadingLightJetpt, _h_SubleadingLightJetpt, _h_LeadingBJetpt, _h_SubleadingBJetpt}, invlumi);
+      scale({_h_LeadingLightJeteta, _h_SubleadingLightJeteta, _h_LeadingBJeteta, _h_SubleadingBJeteta}, invlumi);
+    }
+
+    //@}
+
+
+  private:
+
+    /// @name Histograms
+    //@{
+
+    Histo1DPtr _h_deltaphiafterlight, _h_Deltaphi_newway, _h_SumPLight;
+    Histo1DPtr _h_LeadingBJetpt, _h_SubleadingBJetpt, _h_LeadingLightJetpt, _h_SubleadingLightJetpt;
+    Histo1DPtr _h_LeadingBJeteta, _h_SubleadingBJeteta, _h_LeadingLightJeteta, _h_SubleadingLightJeteta;
+
+  };
+
+
+  // Hook for the plugin system
+  DECLARE_RIVET_PLUGIN(CMS_2016_I1486238);
+
+}
diff --git a/analyses/pluginCMS/CMS_2016_I1486238.info b/analyses/pluginCMS/CMS_2016_I1486238.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1486238.info
@@ -0,0 +1,52 @@
+Name: CMS_2016_I1486238
+Year: 2016
+Summary: Studies of 2 $b$-jet + 2 jet production in proton-proton collisions at 7 TeV
+Experiment: CMS
+Collider: LHC
+InspireID: 1486238
+Status: VALIDATED
+Authors:
+ - P. Gunnellini
+References:
+ - CMS-FSQ-13-010
+ - CERN-EP-2016-191
+ - arXiv:1609.03489
+ - Phys.Rev. D94 (2016) no.11, 112005
+RunInfo:
+   'Hard QCD events with \pT cut at generator level of 15 GeV. Needs 2 $b$-jets with
+   $\pT > 20$ GeV in $|\eta|$ $<$ 2.4; 2 jets with $\pT > 20$ GeV in $|\eta|$ $<$ 4.7'
+NumEvents: 20000000
+NeedCrossSection: yes
+Beams: [p+, p+]
+Energies: [7000]
+Description:
+   'Measurements are presented of the cross section for the production of at
+    least four jets, of which at least two originate from $b$ quarks, in
+    proton-proton collisions. Data collected with the CMS detector at the LHC at
+    a center-of-mass energy of 7 TeV are used, corresponding to an integrated
+    luminosity of 3 inverse picobarns. The cross section is measured as a
+    function of the jet transverse momentum for \pT 20 GeV, and of the jet
+    pseudorapidity for $|\eta|<2.4$ ($b$ jets) and 4.7 (untagged jets). The
+    correlations in azimuthal angle and \pT between the jets are also
+    studied. The $\eta$ and \pT distributions of the four jets and the correlations
+    between them are well reproduced by event generators that combine
+    perturbative QCD calculations at next-to-leading-order accuracy with
+    contributions from parton showers and multiparton interactions.'
+BibKey: Khachatryan:2016rjt
+BibTeX: '@article{Khachatryan:2016rjt,
+      author         = "Khachatryan, Vardan and others",
+      title          = "{Studies of inclusive four-jet production with two
+                        $b$-tagged jets in proton-proton collisions at 7 TeV}",
+      collaboration  = "CMS",
+      journal        = "Phys. Rev.",
+      volume         = "D94",
+      year           = "2016",
+      number         = "11",
+      pages          = "112005",
+      doi            = "10.1103/PhysRevD.94.112005",
+      eprint         = "1609.03489",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CMS-FSQ-13-010, CERN-EP-2016-191",
+      SLACcitation   = "%%CITATION = ARXIV:1609.03489;%%"
+}'
diff --git a/analyses/pluginCMS/CMS_2016_I1486238.plot b/analyses/pluginCMS/CMS_2016_I1486238.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1486238.plot
@@ -0,0 +1,120 @@
+# BEGIN PLOT /CMS_2016_I1486238/d10-x01-y01
+Title=CMS, $\sqrt{s}$ = 7 TeV, Leading b jet $\eta$ in pp$\rightarrow$ 2b+2j+X 
+XLabel=$\eta$
+YLabel=$d\sigma/d\eta\; [\text{pb}/rad]$
+FullRange=1
+LegendXPos=0.2
+LegendYPos=0.4
+LogY=1
+RatioPlotYMin=0.1
+RatioPlotYMax=2.5
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1486238/d11-x01-y01
+Title=CMS, $\sqrt{s}$ = 7 TeV, Leading b jet $p_{T}$ in pp$\rightarrow$ 2b+2j+X 
+XLabel=$p_{T}$ [GeV]
+YLabel=$d\sigma/dp_{T}\; [\text{pb}/GeV]$
+FullRange=1
+LogY=1
+RatioPlotYMin=0.1
+RatioPlotYMax=2.5
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1486238/d01-x01-y01
+Title=CMS, $\sqrt{s}$ = 7 TeV, Normalized $\Delta$S in pp$\rightarrow$ 2b+2j+X 
+XLabel=$\Delta$S
+YLabel=$1/\sigma$ $d\sigma/d\Delta S\; [1/rad]$
+FullRange=1
+LogY=1
+LegendXPos=0.1
+RatioPlotYMin=0.1
+RatioPlotYMax=2.5
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1486238/d09-x01-y01
+Title=CMS, $\sqrt{s}$ = 7 TeV, Normalized $\Delta\phi^{light}$ in pp$\rightarrow$ 2b+2j+X 
+XLabel=$\Delta\phi^{light}$
+YLabel=$1/\sigma$ $d\sigma/d\Delta\phi^{light}\; [1/rad]$
+FullRange=1
+LegendXPos=0.1
+RatioPlotYMin=0.1
+RatioPlotYMax=2.5
+LogY=1
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1486238/d05-x01-y01
+Title=CMS, $\sqrt{s}$ = 7 TeV, Normalized $\Delta^{rel}_{light}p_{T}$ in pp$\rightarrow$ 2b+2j+X 
+XLabel=$\Delta^{rel}_{light}p_{T}$
+YLabel=$1/\sigma$ $d\sigma/d\Delta^{rel}_{light}p_{T}\;$
+FullRange=1
+LegendXPos=0.1
+RatioPlotYMin=0.1
+RatioPlotYMax=2.5
+LogY=1
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1486238/d12-x01-y01
+Title=CMS, $\sqrt{s}$ = 7 TeV, Leading other jet $\eta$ in pp$\rightarrow$ 2b+2j+X 
+XLabel=$\eta$
+YLabel=$d\sigma/d\eta\; [\text{pb}/rad]$
+FullRange=1
+LegendXPos=0.2
+LegendYPos=0.4
+RatioPlotYMin=0.1
+RatioPlotYMax=2.5
+LogY=1
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1486238/d13-x01-y01
+Title=CMS, $\sqrt{s}$ = 7 TeV, Leading other jet $p_{T}$ in pp$\rightarrow$ 2b+2j+X 
+XLabel=$p_{T}$ [GeV]
+YLabel=$d\sigma/dp_{T}\; [\text{pb}/GeV]$
+FullRange=1
+LogY=1
+RatioPlotYMin=0.1
+RatioPlotYMax=2.5
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1486238/d16-x01-y01
+Title=CMS, $\sqrt{s}$ = 7 TeV, Subleading other jet $\eta$ in pp$\rightarrow$ 2b+2j+X 
+XLabel=$\eta$
+YLabel=$d\sigma/d\eta\; [\text{pb}/rad]$
+FullRange=1
+LegendXPos=0.2
+LegendYPos=0.4
+RatioPlotYMin=0.1
+RatioPlotYMax=2.5
+LogY=1
+# END PLOT 
+
+# BEGIN PLOT /CMS_2016_I1486238/d17-x01-y01
+Title=CMS, $\sqrt{s}$ = 7 TeV, Subleading other jet $p_{T}$ in pp$\rightarrow$ 2b+2j+X 
+XLabel=$p_{T}$ [GeV]
+YLabel=$d\sigma/dp_{T}\; [\text{pb}/GeV]$
+FullRange=1
+LogY=1
+RatioPlotYMin=0.1
+RatioPlotYMax=2.5
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1486238/d14-x01-y01
+Title=CMS, $\sqrt{s}$ = 7 TeV, Subleading b jet $\eta$ in pp$\rightarrow$ 2b+2j+X 
+XLabel=$\eta$
+YLabel=$d\sigma/d\eta\; [\text{pb}/rad]$
+FullRange=1
+LegendXPos=0.2
+LegendYPos=0.4
+RatioPlotYMin=0.1
+RatioPlotYMax=2.5
+LogY=1
+# END PLOT
+
+# BEGIN PLOT /CMS_2016_I1486238/d15-x01-y01
+Title=CMS, $\sqrt{s}$ = 7 TeV, Subleading b jet $p_{T}$ in pp$\rightarrow$ 2b+2j+X 
+XLabel=$p_{T}$ [GeV] 
+YLabel=$d\sigma/dp_{T}\; [\text{pb}/GeV]$
+FullRange=1
+LogY=1
+RatioPlotYMin=0.1
+RatioPlotYMax=2.5
+# END PLOT
diff --git a/analyses/pluginCMS/CMS_2016_I1486238.yoda b/analyses/pluginCMS/CMS_2016_I1486238.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_I1486238.yoda
@@ -0,0 +1,209 @@
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1486238/d12-x01-y01
+Path=/REF/CMS_2016_I1486238/d12-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-4.275000e+00   4.250000e-01    4.250000e-01    1.192544e+03    5.000759e+02    5.000759e+02
+-3.425000e+00   4.250000e-01    4.250000e-01    3.100113e+03    1.310044e+03    1.310044e+03
+-2.700000e+00   3.000000e-01    3.000000e-01    8.208152e+03    3.387872e+03    3.387872e+03
+-2.100000e+00   3.000000e-01    3.000000e-01    1.032650e+04    4.241226e+03    4.241226e+03
+-1.500000e+00   3.000000e-01    3.000000e-01    1.090225e+04    3.421373e+03    3.421373e+03
+-9.000000e-01   3.000000e-01    3.000000e-01    1.057265e+04    3.315201e+03    3.315201e+03
+-3.000000e-01   3.000000e-01    3.000000e-01    1.124229e+04    3.445418e+03    3.445418e+03
+3.000000e-01    3.000000e-01    3.000000e-01    1.274720e+04    3.906941e+03    3.906941e+03
+9.000000e-01    3.000000e-01    3.000000e-01    1.251175e+04    4.153131e+03    4.153131e+03
+1.500000e+00    3.000000e-01    3.000000e-01    1.032405e+04    3.429114e+03    3.429114e+03
+2.100000e+00    3.000000e-01    3.000000e-01    9.390871e+03    3.865629e+03    3.865629e+03
+2.700000e+00    3.000000e-01    3.000000e-01    7.575796e+03    3.134157e+03    3.134157e+03
+3.425000e+00    4.250000e-01    4.250000e-01    3.153898e+03    1.437378e+03    1.437378e+03
+4.275000e+00    4.250000e-01    4.250000e-01    1.617393e+03    7.553364e+02    7.553364e+02
+
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1486238/d10-x01-y01
+Path=/REF/CMS_2016_I1486238/d10-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-4.275000e+00   4.250000e-01    4.250000e-01    0.000000e+00    0.000000e+00    0.000000e+00
+-3.425000e+00   4.250000e-01    4.250000e-01    0.000000e+00    0.000000e+00    0.000000e+00
+-2.700000e+00   3.000000e-01    3.000000e-01    0.000000e+00    0.000000e+00    0.000000e+00
+-2.100000e+00   3.000000e-01    3.000000e-01    8.326229e+03    3.156592e+03    3.156592e+03
+-1.500000e+00   3.000000e-01    3.000000e-01    1.378809e+04    5.228915e+03    5.228915e+03
+-9.000000e-01   3.000000e-01    3.000000e-01    1.654006e+04    5.467632e+03    5.467632e+03
+-3.000000e-01   3.000000e-01    3.000000e-01    1.840490e+04    6.084884e+03    6.084884e+03
+3.000000e-01    3.000000e-01    3.000000e-01    1.606923e+04    5.515916e+03    5.515916e+03
+9.000000e-01    3.000000e-01    3.000000e-01    1.428923e+04    4.904249e+03    4.904249e+03
+1.500000e+00    3.000000e-01    3.000000e-01    1.398319e+04    6.374746e+03    6.374746e+03
+2.100000e+00    3.000000e-01    3.000000e-01    1.019555e+04    4.644651e+03    4.644651e+03
+2.700000e+00    3.000000e-01    3.000000e-01    0.000000e+00    0.000000e+00    0.000000e+00
+3.425000e+00    4.250000e-01    4.250000e-01    0.000000e+00    0.000000e+00    0.000000e+00
+4.275000e+00    4.250000e-01    4.250000e-01    0.000000e+00    0.000000e+00    0.000000e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1486238/d05-x01-y01
+Path=/REF/CMS_2016_I1486238/d05-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-02    5.000000e-02    5.000000e-02    2.744719e-01    5.226206e-02    5.226206e-02
+1.500000e-01    5.000000e-02    5.000000e-02    5.176917e-01    8.687140e-02    8.687140e-02
+2.500000e-01    5.000000e-02    5.000000e-02    7.621368e-01    7.869287e-02    7.869287e-02
+3.500000e-01    5.000000e-02    5.000000e-02    9.074460e-01    9.124645e-02    9.124645e-02
+4.500000e-01    5.000000e-02    5.000000e-02    1.015232e+00    1.056368e-01    1.056368e-01
+5.500000e-01    5.000000e-02    5.000000e-02    1.008301e+00    1.062154e-01    1.062154e-01
+6.500000e-01    5.000000e-02    5.000000e-02    1.003764e+00    1.030759e-01    1.030759e-01
+7.500000e-01    5.000000e-02    5.000000e-02    9.821298e-01    1.021701e-01    1.021701e-01
+8.500000e-01    5.000000e-02    5.000000e-02    1.065947e+00    8.123748e-02    8.123748e-02
+9.500000e-01    5.000000e-02    5.000000e-02    2.462880e+00    1.379196e-01    1.379196e-01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1486238/d01-x01-y01
+Path=/REF/CMS_2016_I1486238/d01-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.243995e-01    2.243995e-01    2.243995e-01    3.111652e-02    1.031492e-02    1.031492e-02
+6.731984e-01    2.243995e-01    2.243995e-01    4.222092e-02    8.725572e-03    8.725572e-03
+1.121997e+00    2.243995e-01    2.243995e-01    4.199139e-02    6.937666e-03    6.937666e-03
+1.458597e+00    1.121997e-01    1.121997e-01    7.013534e-02    1.074635e-02    1.074635e-02
+1.682996e+00    1.121997e-01    1.121997e-01    9.737357e-02    1.520636e-02    1.520636e-02
+1.907396e+00    1.121997e-01    1.121997e-01    1.451643e-01    2.643645e-02    2.643645e-02
+2.131795e+00    1.121997e-01    1.121997e-01    1.666095e-01    2.902408e-02    2.902408e-02
+2.356194e+00    1.121997e-01    1.121997e-01    2.778748e-01    3.460906e-02    3.460906e-02
+2.580594e+00    1.121997e-01    1.121997e-01    5.368840e-01    6.607886e-02    6.607886e-02
+2.804993e+00    1.121997e-01    1.121997e-01    1.022756e+00    9.339739e-02    9.339739e-02
+3.029393e+00    1.121997e-01    1.121997e-01    1.908883e+00    1.767693e-01    1.767693e-01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1486238/d15-x01-y01
+Path=/REF/CMS_2016_I1486238/d15-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+01    1.000000e+01    1.000000e+01    0.000000e+00    0.000000e+00    0.000000e+00
+3.500000e+01    1.500000e+01    1.500000e+01    2.151576e+03    6.171374e+02    6.171374e+02
+7.500000e+01    2.500000e+01    2.500000e+01    9.522699e+01    2.745337e+01    2.745337e+01
+1.250000e+02    2.500000e+01    2.500000e+01    5.776006e+00    1.764389e+00    1.764389e+00
+1.750000e+02    2.500000e+01    2.500000e+01    7.704340e-01    2.333729e-01    2.333729e-01
+2.300000e+02    3.000000e+01    3.000000e+01    1.489050e-01    5.448116e-02    5.448116e-02
+2.900000e+02    3.000000e+01    3.000000e+01    3.838500e-02    1.569829e-02    1.569829e-02
+3.500000e+02    3.000000e+01    3.000000e+01    2.016427e-02    1.093042e-02    1.093042e-02
+4.100000e+02    3.000000e+01    3.000000e+01    6.615929e-03    4.604335e-03    4.604335e-03
+4.750000e+02    3.500000e+01    3.500000e+01    0.000000e+00    1.064869e-03    1.064869e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1486238/d11-x01-y01
+Path=/REF/CMS_2016_I1486238/d11-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+01    1.000000e+01    1.000000e+01    0.000000e+00    0.000000e+00    0.000000e+00
+3.500000e+01    1.500000e+01    1.500000e+01    1.413665e+03    4.521562e+02    4.521562e+02
+7.500000e+01    2.500000e+01    2.500000e+01    4.398487e+02    1.406612e+02    1.406612e+02
+1.250000e+02    2.500000e+01    2.500000e+01    5.598746e+01    1.725731e+01    1.725731e+01
+1.750000e+02    2.500000e+01    2.500000e+01    1.057803e+01    3.254326e+00    3.254326e+00
+2.300000e+02    3.000000e+01    3.000000e+01    2.297714e+00    7.944971e-01    7.944971e-01
+2.900000e+02    3.000000e+01    3.000000e+01    5.189610e-01    1.810274e-01    1.810274e-01
+3.500000e+02    3.000000e+01    3.000000e+01    1.523442e-01    6.552787e-02    6.552787e-02
+4.100000e+02    3.000000e+01    3.000000e+01    5.593688e-02    2.492170e-02    2.492170e-02
+4.750000e+02    3.500000e+01    3.500000e+01    1.557985e-02    7.033963e-03    7.033963e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1486238/d16-x01-y01
+Path=/REF/CMS_2016_I1486238/d16-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-4.275000e+00   4.250000e-01    4.250000e-01    9.996535e+02    3.988586e+02    3.988586e+02
+-3.425000e+00   4.250000e-01    4.250000e-01    3.386216e+03    1.286588e+03    1.286588e+03
+-2.700000e+00   3.000000e-01    3.000000e-01    7.495488e+03    4.026843e+03    4.026843e+03
+-2.100000e+00   3.000000e-01    3.000000e-01    8.469644e+03    4.541823e+03    4.541823e+03
+-1.500000e+00   3.000000e-01    3.000000e-01    1.127264e+04    3.261594e+03    3.261594e+03
+-9.000000e-01   3.000000e-01    3.000000e-01    1.198686e+04    3.468519e+03    3.468519e+03
+-3.000000e-01   3.000000e-01    3.000000e-01    1.214665e+04    3.794968e+03    3.794968e+03
+3.000000e-01    3.000000e-01    3.000000e-01    1.216764e+04    3.804859e+03    3.804859e+03
+9.000000e-01    3.000000e-01    3.000000e-01    1.198251e+04    3.522750e+03    3.522750e+03
+1.500000e+00    3.000000e-01    3.000000e-01    1.061940e+04    3.120334e+03    3.120334e+03
+2.100000e+00    3.000000e-01    3.000000e-01    1.008688e+04    4.630696e+03    4.630696e+03
+2.700000e+00    3.000000e-01    3.000000e-01    6.444811e+03    2.961932e+03    2.961932e+03
+3.425000e+00    4.250000e-01    4.250000e-01    3.533866e+03    1.456099e+03    1.456099e+03
+4.275000e+00    4.250000e-01    4.250000e-01    1.715312e+03    7.211694e+02    7.211694e+02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1486238/d09-x01-y01
+Path=/REF/CMS_2016_I1486238/d09-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.121997e-01    1.121997e-01    1.121997e-01    2.140556e-01    4.644256e-02    4.644256e-02
+3.365992e-01    1.121997e-01    1.121997e-01    2.570568e-01    5.454568e-02    5.454568e-02
+5.609987e-01    1.121997e-01    1.121997e-01    2.772983e-01    3.035803e-02    3.035803e-02
+7.853982e-01    1.121997e-01    1.121997e-01    3.016015e-01    3.050502e-02    3.050502e-02
+1.009798e+00    1.121997e-01    1.121997e-01    2.901240e-01    3.266099e-02    3.266099e-02
+1.234197e+00    1.121997e-01    1.121997e-01    2.425696e-01    2.335399e-02    2.335399e-02
+1.458597e+00    1.121997e-01    1.121997e-01    2.722467e-01    4.159632e-02    4.159632e-02
+1.682996e+00    1.121997e-01    1.121997e-01    3.266800e-01    4.899339e-02    4.899339e-02
+1.907396e+00    1.121997e-01    1.121997e-01    2.909654e-01    3.009123e-02    3.009123e-02
+2.131795e+00    1.121997e-01    1.121997e-01    3.504282e-01    3.677014e-02    3.677014e-02
+2.356194e+00    1.121997e-01    1.121997e-01    3.773001e-01    3.569086e-02    3.569086e-02
+2.580594e+00    1.121997e-01    1.121997e-01    3.988005e-01    3.456769e-02    3.456769e-02
+2.804993e+00    1.121997e-01    1.121997e-01    3.809570e-01    3.283988e-02    3.283988e-02
+3.029393e+00    1.121997e-01    1.121997e-01    4.762547e-01    4.106398e-02    4.106398e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1486238/d17-x01-y01
+Path=/REF/CMS_2016_I1486238/d17-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+01    1.000000e+01    1.000000e+01    0.000000e+00    0.000000e+00    0.000000e+00
+3.500000e+01    1.500000e+01    1.500000e+01    2.119227e+03    6.591944e+02    6.591944e+02
+7.500000e+01    2.500000e+01    2.500000e+01    9.752716e+01    3.040982e+01    3.040982e+01
+1.250000e+02    2.500000e+01    2.500000e+01    6.581712e+00    1.687560e+00    1.687560e+00
+1.750000e+02    2.500000e+01    2.500000e+01    1.351740e+00    3.453456e-01    3.453456e-01
+2.300000e+02    3.000000e+01    3.000000e+01    2.453402e-01    7.130982e-02    7.130982e-02
+2.900000e+02    3.000000e+01    3.000000e+01    6.582170e-02    2.147453e-02    2.147453e-02
+3.500000e+02    3.000000e+01    3.000000e+01    2.295829e-02    9.871441e-03    9.871441e-03
+4.100000e+02    3.000000e+01    3.000000e+01    9.947780e-03    6.104702e-03    6.104702e-03
+4.750000e+02    3.500000e+01    3.500000e+01    2.960623e-03    2.691549e-03    2.691549e-03
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1486238/d14-x01-y01
+Path=/REF/CMS_2016_I1486238/d14-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-4.275000e+00   4.250000e-01    4.250000e-01    0.000000e+00    0.000000e+00    0.000000e+00
+-3.425000e+00   4.250000e-01    4.250000e-01    0.000000e+00    0.000000e+00    0.000000e+00
+-2.700000e+00   3.000000e-01    3.000000e-01    0.000000e+00    0.000000e+00    0.000000e+00
+-2.100000e+00   3.000000e-01    3.000000e-01    7.546601e+03    2.653337e+03    2.653337e+03
+-1.500000e+00   3.000000e-01    3.000000e-01    1.387498e+04    4.872159e+03    4.872159e+03
+-9.000000e-01   3.000000e-01    3.000000e-01    1.973885e+04    6.723695e+03    6.723695e+03
+-3.000000e-01   3.000000e-01    3.000000e-01    1.901566e+04    6.478105e+03    6.478105e+03
+3.000000e-01    3.000000e-01    3.000000e-01    1.900654e+04    6.715933e+03    6.715933e+03
+9.000000e-01    3.000000e-01    3.000000e-01    1.552125e+04    5.488987e+03    5.488987e+03
+1.500000e+00    3.000000e-01    3.000000e-01    1.418012e+04    5.036146e+03    5.036146e+03
+2.100000e+00    3.000000e-01    3.000000e-01    7.738063e+03    2.747097e+03    2.747097e+03
+2.700000e+00    3.000000e-01    3.000000e-01    0.000000e+00    0.000000e+00    0.000000e+00
+3.425000e+00    4.250000e-01    4.250000e-01    0.000000e+00    0.000000e+00    0.000000e+00
+4.275000e+00    4.250000e-01    4.250000e-01    0.000000e+00    0.000000e+00    0.000000e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/CMS_2016_I1486238/d13-x01-y01
+Path=/REF/CMS_2016_I1486238/d13-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.000000e+01    1.000000e+01    1.000000e+01    0.000000e+00    0.000000e+00    0.000000e+00
+3.500000e+01    1.500000e+01    1.500000e+01    1.474464e+03    4.786739e+02    4.786739e+02
+7.500000e+01    2.500000e+01    2.500000e+01    4.082161e+02    1.324475e+02    1.324475e+02
+1.250000e+02    2.500000e+01    2.500000e+01    5.989647e+01    1.461985e+01    1.461985e+01
+1.750000e+02    2.500000e+01    2.500000e+01    1.260018e+01    3.067899e+00    3.067899e+00
+2.300000e+02    3.000000e+01    3.000000e+01    2.931364e+00    7.633410e-01    7.633410e-01
+2.900000e+02    3.000000e+01    3.000000e+01    7.369223e-01    1.944333e-01    1.944333e-01
+3.500000e+02    3.000000e+01    3.000000e+01    1.984125e-01    6.383172e-02    6.383172e-02
+4.100000e+02    3.000000e+01    3.000000e+01    7.826448e-02    2.667962e-02    2.667962e-02
+4.750000e+02    3.500000e+01    3.500000e+01    2.484914e-02    8.940529e-03    8.940529e-03
+END YODA_SCATTER2D
+
diff --git a/analyses/pluginCMS/CMS_2016_PAS_SUS_16_14.cc b/analyses/pluginCMS/CMS_2016_PAS_SUS_16_14.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_PAS_SUS_16_14.cc
@@ -0,0 +1,221 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/PromptFinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Projections/Sphericity.hh"
+#include "Rivet/Projections/SmearedParticles.hh"
+#include "Rivet/Projections/SmearedJets.hh"
+#include "Rivet/Projections/SmearedMET.hh"
+#include "Rivet/Tools/Cutflow.hh"
+
+namespace Rivet {
+
+
+  /// @brief CMS 2016 0-lepton SUSY search, from 13/fb PAS note
+  class CMS_2016_PAS_SUS_16_14 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(CMS_2016_PAS_SUS_16_14);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      // Initialise and register projections
+      FinalState calofs(Cuts::abseta < 5.0);
+      FastJets fj(calofs, FastJets::ANTIKT, 0.4);
+      declare(fj, "TruthJets");
+      declare(SmearedJets(fj, JET_SMEAR_CMS_RUN2, [](const Jet& j) {
+            if (j.abseta() > 2.5) return 0.;
+            return j.bTagged() ? 0.55 : j.cTagged() ? 0.12 : 0.016; }), "Jets");
+
+      FinalState es(Cuts::abspid == PID::ELECTRON && Cuts::abseta < 2.5);
+      declare(es, "TruthElectrons");
+      declare(SmearedParticles(es, ELECTRON_EFF_CMS_RUN2, ELECTRON_SMEAR_CMS_RUN2), "Electrons");
+
+      FinalState mus(Cuts::abspid == PID::MUON && Cuts::abseta < 2.4);
+      declare(mus, "TruthMuons");
+      declare(SmearedParticles(mus, MUON_EFF_CMS_RUN2, MUON_SMEAR_CMS_RUN2), "Muons");
+
+      FinalState isofs(Cuts::abseta < 3.0 && Cuts::abspid != PID::ELECTRON && Cuts::abspid != PID::MUON);
+      declare(isofs, "IsoFS");
+      FinalState cfs(Cuts::abseta < 2.5 && Cuts::abscharge != 0);
+      declare(cfs, "TruthTracks");
+      declare(SmearedParticles(cfs, TRK_EFF_CMS_RUN2), "Tracks");
+
+      // Book histograms/counters
+      _h_srcounts.resize(160);
+      for (size_t ij = 0; ij < 4; ++ij) {
+        for (size_t ib = 0; ib < 4; ++ib) {
+          for (size_t ih = 0; ih < 10; ++ih) {
+            const size_t i = 40*ij + 10*ib + ih;
+            _h_srcounts[i] = bookCounter(toString(2*ij+3) + "j-" + toString(ib) + "b-" + toString(ih));
+          }
+        }
+      }
+      _h_srcountsagg.resize(12);
+      for (size_t ia = 0; ia < 12; ++ia) {
+        _h_srcountsagg[ia] = bookCounter("agg-" + toString(ia));
+      }
+
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      // Get jets and require Nj >= 3
+      const Jets jets24 = apply<JetAlg>(event, "Jets").jetsByPt(Cuts::pT > 30*GeV && Cuts::abseta < 2.4);
+      if (jets24.size() < 3) vetoEvent;
+
+      // HT cut
+      vector<double> jetpts24; transform(jets24, jetpts24, pT);
+      const double ht = sum(jetpts24, 0.0);
+      if (ht < 300*GeV) vetoEvent;
+
+      // HTmiss cut
+      const Jets jets50 = apply<JetAlg>(event, "Jets").jetsByPt(Cuts::pT > 30*GeV && Cuts::abseta < 5.0);
+      const FourMomentum htmissvec = -sum(jets24, mom, FourMomentum());
+      const double htmiss = htmissvec.pT();
+      if (htmissvec.pT() < 300*GeV) vetoEvent;
+
+
+      // Get baseline electrons & muons
+      Particles elecs = apply<ParticleFinder>(event, "Electrons").particles(Cuts::pT > 10*GeV);
+      Particles muons = apply<ParticleFinder>(event, "Muons").particles(Cuts::pT > 10*GeV);
+
+      // Electron/muon isolation
+      const Particles calofs = apply<ParticleFinder>(event, "IsoFS").particles();
+      ifilter_discard(elecs, [&](const Particle& e) {
+          const double R = max(0.05, min(0.2, 10*GeV/e.pT()));
+          double ptsum = -e.pT();
+          for (const Particle& p : calofs)
+            if (deltaR(p,e) < R) ptsum += p.pT();
+          return ptsum / e.pT() > 0.1;
+        });
+      ifilter_discard(muons, [&](const Particle& m) {
+          const double R = max(0.05, min(0.2, 10*GeV/m.pT()));
+          double ptsum = -m.pT();
+          for (const Particle& p : calofs)
+            if (deltaR(p,m) < R) ptsum += p.pT();
+          return ptsum / m.pT() > 0.2;
+        });
+
+      // Veto the event if there are any remaining baseline leptons
+      if (!elecs.empty()) vetoEvent;
+      if (!muons.empty()) vetoEvent;
+
+
+      // Get isolated tracks
+      Particles trks25 = apply<ParticleFinder>(event, "Tracks").particles();
+      ifilter_discard(trks25, [&](const Particle& t) {
+          double ptsum = -t.pT();
+          for (const Particle& p : trks25)
+            if (deltaR(p,t) < 0.3) ptsum += p.pT();
+          return ptsum/t.pT() > ((t.abspid() == PID::ELECTRON || t.abspid() == PID::MUON) ? 0.2 : 0.1);
+        });
+      const Particles trks = filter_select(trks25, Cuts::abseta < 2.4);
+
+      // Isolated track pT, pTmiss and mT cut
+      // mT^2 = m1^2 + m2^2 + 2(ET1 ET2 - pT1 . pT2))
+      // => mT0^2 = 2(ET1 |pT2| - pT1 . pT2)) for m1, m2 -> 0
+      FourMomentum ptmissvec = htmissvec; ///< @todo Can we do better? No e,mu left...
+      const double ptmiss = ptmissvec.pT();
+      for (const Particle& t : trks) {
+        const double ptcut = (t.abspid() == PID::ELECTRON || t.abspid() == PID::MUON) ? 5*GeV : 10*GeV;
+        const double mT = sqrt( t.mass2() + 2*(t.Et()*ptmiss - t.pT()*ptmiss*cos(deltaPhi(t,ptmissvec))) );
+        if (mT < 100*GeV && t.pT() < ptcut) vetoEvent;
+      }
+
+      // Lead jets isolation from Htmiss
+      if (deltaPhi(htmissvec, jets24[0]) < 0.5) vetoEvent;
+      if (deltaPhi(htmissvec, jets24[1]) < 0.5) vetoEvent;
+      if (deltaPhi(htmissvec, jets24[2]) < 0.3) vetoEvent;
+      if (jets24.size() >= 4 && deltaPhi(htmissvec, jets24[3]) < 0.3) vetoEvent;
+
+      // Count jet and b-jet multiplicities
+      const size_t nj = jets24.size();
+      size_t nbj = 0;
+      for (const Jet& j : jets24)
+        if (j.bTagged()) nbj += 1;
+
+
+      ////////
+
+
+      // Fill the aggregate signal regions first
+      if (nj >= 3 && nbj == 0 && ht >  500*GeV && htmiss > 500*GeV) _h_srcountsagg[ 0]->fill(event.weight());
+      if (nj >= 3 && nbj == 0 && ht > 1500*GeV && htmiss > 750*GeV) _h_srcountsagg[ 1]->fill(event.weight());
+      if (nj >= 5 && nbj == 0 && ht >  500*GeV && htmiss > 500*GeV) _h_srcountsagg[ 2]->fill(event.weight());
+      if (nj >= 5 && nbj == 0 && ht > 1500*GeV && htmiss > 750*GeV) _h_srcountsagg[ 3]->fill(event.weight());
+      if (nj >= 9 && nbj == 0 && ht > 1500*GeV && htmiss > 750*GeV) _h_srcountsagg[ 4]->fill(event.weight());
+      if (nj >= 3 && nbj >= 2 && ht >  500*GeV && htmiss > 500*GeV) _h_srcountsagg[ 5]->fill(event.weight());
+      if (nj >= 3 && nbj >= 1 && ht >  750*GeV && htmiss > 750*GeV) _h_srcountsagg[ 6]->fill(event.weight());
+      if (nj >= 5 && nbj >= 3 && ht >  500*GeV && htmiss > 500*GeV) _h_srcountsagg[ 7]->fill(event.weight());
+      if (nj >= 5 && nbj >= 2 && ht > 1500*GeV && htmiss > 750*GeV) _h_srcountsagg[ 8]->fill(event.weight());
+      if (nj >= 9 && nbj >= 3 && ht >  750*GeV && htmiss > 750*GeV) _h_srcountsagg[ 9]->fill(event.weight());
+      if (nj >= 7 && nbj >= 1 && ht >  300*GeV && htmiss > 300*GeV) _h_srcountsagg[10]->fill(event.weight());
+      if (nj >= 5 && nbj >= 1 && ht >  750*GeV && htmiss > 750*GeV) _h_srcountsagg[11]->fill(event.weight());
+
+
+      // Nj bin and Nbj bins
+      static const vector<double> njedges = {3., 5., 7., 9.};
+      const size_t inj = binIndex(nj, njedges, true);
+      static const vector<double> njbedges = {0., 1., 2., 3.};
+      const size_t inbj = binIndex(nbj, njbedges, true);
+      // HTmiss vs HT 2D bin
+      int iht = 0;
+      if (htmiss < 350*GeV) {
+        iht = ht < 500 ? 1 : ht < 1000 ? 2 : 3;
+      } else if (htmiss < 500*GeV && ht > 350*GeV) {
+        iht = ht < 500 ? 4 : ht < 1000 ? 5 : 6;
+      } else if (htmiss < 750*GeV && ht > 500*GeV) {
+        iht = ht < 1000 ? 7 : 8;
+      } else if (ht > 750*GeV) {
+        iht = ht < 1500 ? 9 : 10;
+      }
+      if (iht == 0) vetoEvent;
+      iht -= 1; //< change from the paper's indexing scheme to C++ zero-indexed
+      // Total bin number
+      const size_t ibin = 40*inj + 10*inbj + (size_t)iht;
+
+      // Fill SR counter
+      _h_srcounts[ibin]->fill(event.weight());
+
+    }
+
+
+    /// Normalise counters after the run
+    void finalize() {
+
+      const double sf = 12.9*crossSection()/femtobarn/sumOfWeights();
+      scale(_h_srcounts, sf);
+      scale(_h_srcountsagg, sf);
+
+    }
+
+    //@}
+
+
+  private:
+
+    /// @name Histograms
+    //@{
+    vector<CounterPtr> _h_srcounts, _h_srcountsagg;
+    //@}
+
+
+  };
+
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(CMS_2016_PAS_SUS_16_14);
+
+
+}
diff --git a/analyses/pluginCMS/CMS_2016_PAS_SUS_16_14.info b/analyses/pluginCMS/CMS_2016_PAS_SUS_16_14.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2016_PAS_SUS_16_14.info
@@ -0,0 +1,22 @@
+Name: CMS_2016_PAS_SUS_16_14
+Year: 2013
+Summary: Search for supersymmetry in events with jets and missing transverse momentum at 13~\TeV
+Experiment: CMS
+Collider: LHC
+Status: VALIDATED
+Authors:
+ - Andy Buckley <andy.buckley@cern.ch>
+RunInfo: BSM physics signal events
+NumEvents: 50000
+NeedCrossSection: yes
+Beams: [p+, p+]
+Energies: [13000]
+Description:
+  'A search for supersymmetry in all-hadronic events with large missing transverse
+  momentum, produced in proton--proton collisions at $\sqrt{s} = 13~\TeV$. The data
+  sample, corresponding to an integrated luminosity of 12.9/fb, was collected with
+  the CMS detector at the CERN LHC in 2016. The data are examined in search regions
+  of jet multiplicity, tagged bottom quark jet multiplicity, missing transverse momentum,
+  and the scalar sum of jet transverse momenta. The observed numbers of events in all
+  search regions are found to be consistent with the expectations from standard model
+  processes.'
diff --git a/analyses/pluginCMS/CMS_2017_I1511284.cc b/analyses/pluginCMS/CMS_2017_I1511284.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2017_I1511284.cc
@@ -0,0 +1,83 @@
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+
+namespace Rivet {
+
+
+  /// Measurement of the inclusive energy spectrum in the very forward direction in pp collisions at 13 TeV
+  class CMS_2017_I1511284 : public Analysis {
+  public:
+
+    /// Constructor
+    CMS_2017_I1511284()
+      : Analysis("CMS_2017_I1511284")
+    {    }
+
+
+    /// Book histograms and initialise projections
+    void init() {
+      declare(FinalState(), "FS");
+
+      _h_totEnergy = bookHisto1D(1, 1, 1);
+      _h_emEnergy = bookHisto1D(2, 1, 1);
+      _h_hadEnergy = bookHisto1D(3, 1, 1);
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      const Particles fsparticles = apply<FinalState>(event, "FS").particles(cmpMomByRap);
+      if (fsparticles.size() < 2) vetoEvent; // need at least two particles to calculate gaps
+
+      double gapCenter = 0,largestGap = 0;
+      double previousRapidity = fsparticles.front().rapidity();
+      for (const Particle& p : fsparticles) {
+        const double gap = fabs(p.rapidity() - previousRapidity);
+        if (gap > largestGap) {
+          largestGap = gap; // largest gap
+          gapCenter = (p.rapidity()+previousRapidity)/2.; // find the center of the gap to separate the X and Y systems.
+        }
+        previousRapidity = p.rapidity();
+      }
+
+      FourMomentum mxFourVector, myFourVector;
+      for (const Particle& p : fsparticles)
+        (p.rapidity() > gapCenter ? mxFourVector : myFourVector) += p.momentum();
+      const double xiX = mxFourVector.mass2()/sqr(sqrtS());
+      const double xiY = myFourVector.mass2()/sqr(sqrtS());
+      const double xi = max(xiX, xiY);
+      if (xi < 1e-6) vetoEvent;
+
+      double totEnergy = 0, emEnergy = 0, hadEnergy = 0;
+      for (const Particle& p : fsparticles) {
+        if (!inRange(p.eta(), -6.6, -5.2)) continue; //< @todo Should be abseta()?
+        if (!p.isVisible() || p.abspid() == PID::MUON) continue;
+        totEnergy += p.energy();
+        if (p.abspid() == PID::ELECTRON || p.abspid() == PID::PHOTON || p.abspid() == 111) emEnergy += p.energy();
+        if (p.abspid() != PID::ELECTRON && p.abspid() != PID::PHOTON && p.abspid() != 111) hadEnergy += p.energy();
+      }
+
+      const double weight = event.weight();
+      _h_totEnergy->fill(totEnergy/GeV, weight);
+      _h_emEnergy->fill(emEnergy/GeV, weight);
+      _h_hadEnergy->fill(hadEnergy/GeV, weight);
+    }
+
+
+    /// Normalize histograms
+    void finalize() {
+      scale({_h_totEnergy, _h_emEnergy, _h_hadEnergy}, crossSection()/microbarn/sumOfWeights());
+    }
+
+
+  private:
+
+    Histo1DPtr _h_totEnergy, _h_emEnergy, _h_hadEnergy;
+
+  };
+
+
+  DECLARE_RIVET_PLUGIN(CMS_2017_I1511284);
+
+}
diff --git a/analyses/pluginCMS/CMS_2017_I1511284.info b/analyses/pluginCMS/CMS_2017_I1511284.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2017_I1511284.info
@@ -0,0 +1,42 @@
+Name: CMS_2017_I1511284
+Year: 2017
+Summary: Measurement of the inclusive energy spectrum in the very forward direction in proton-proton collisions at 13 TeV
+Experiment: CMS
+Collider: LHC
+InspireID: 1511284
+Status: VALIDATED
+Authors:
+ - cms-pag-conveners-fsq@cern.ch
+ - sebastian.baur@cern.ch
+RunInfo:
+  Proton-proton beam, 13 TeV center-of-mass-energy, minimum-bias processes.
+NumEvents: 200000
+NeedCrossSection: yes
+Beams: [p+,p+]
+Energies: [13000]
+Description:
+  'The differential cross section for inclusive particle production as a
+   function of energy in proton-proton collisions at a center-of-mass energy of 13
+   TeV is measured in the very forward region of the CMS detector. The measurement
+   is based on data collected with the CMS apparatus at the LHC, and corresponds to
+   an integrated luminosity of 0.35 inverse microbarns. The energy is measured in
+   the CASTOR calorimeter, which covers the pseudorapidity region
+   $-6.6 < \eta < -5.2$. The results are given as a function of the total energy deposited
+   in CASTOR, as well as of its electromagnetic and hadronic components. The
+   spectra are sensitive to the modeling of multiparton interactions in pp
+   collisions, and provide new constraints for hadronic interaction models used in
+   collider and in high energy cosmic ray physics.'
+BibKey: 'Sirunyan:2017nsj'
+BibTeX: '@article{Sirunyan:2017nsj,
+      author         = "Sirunyan, Albert M and others",
+      title          = "{Measurement of the inclusive energy spectrum in the very
+                        forward direction in proton-proton collisions at
+                        $\sqrt{s}=13~\TeV$}",
+      collaboration  = "CMS",
+      year           = "2017",
+      eprint         = "1701.08695",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CMS-FSQ-16-002, CERN-EP-2016-313",
+      SLACcitation   = "%%CITATION = ARXIV:1701.08695;%%"
+}'
diff --git a/analyses/pluginCMS/CMS_2017_I1511284.plot b/analyses/pluginCMS/CMS_2017_I1511284.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2017_I1511284.plot
@@ -0,0 +1,23 @@
+# BEGIN PLOT /CMS_2017_I1511284/d01-x01-y01
+Title=CMS, 13 TeV, Total energy spectrum ($-6.6 < \eta < -5.2$)
+XLabel=Total energy [GeV]
+YLabel=d$\sigma$/dE[$\mu$b/GeV]
+LogY=1
+LegendXPos=0.45
+# END PLOT
+
+# BEGIN PLOT /CMS_2017_I1511284/d02-x01-y01
+Title=CMS, 13 TeV, Electromagnetic energy spectrum ($-6.6 < \eta < -5.2$)
+XLabel=Electromagnetic energy [GeV]
+YLabel=d$\sigma$/dE[$\mu$b/GeV]
+LogY=1
+LegendXPos=0.45
+# END PLOT
+
+# BEGIN PLOT /CMS_2017_I1511284/d03-x01-y01
+Title=CMS, 13 TeV, Hadronic energy spectrum ($-6.6 < \eta < -5.2$)
+XLabel=Hadronic energy [GeV]
+YLabel=d$\sigma$/dE[$\mu$b/GeV]
+LogY=1
+LegendXPos=0.45
+# END PLOT
diff --git a/analyses/pluginCMS/CMS_2017_I1511284.yoda b/analyses/pluginCMS/CMS_2017_I1511284.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2017_I1511284.yoda
@@ -0,0 +1,144 @@
+#BEGIN YODA_SCATTER2D /REF/CMS_2017_I1511284/d01-x01-y01
+Path=/REF/CMS_2017_I1511284/d01-x01-y01
+Type=Scatter2D 
+#xval  xerr-  xerr+  yval  yerr-  yerr+
+12.5  12.5  12.5  335.656  27.1957  19.7175
+37.5  12.5  12.5  52.0192  11.0011  11.1213
+62.5  12.5  12.5  50.2498  7.58082  9.18238
+87.5  12.5  12.5  50.3421  8.79052  11.9419
+112.5  12.5  12.5  51.7521  9.40269  13.5399
+137.5  12.5  12.5  53.6138  9.53842  14.5699
+162.5  12.5  12.5  55.4341  10.2792  14.848
+187.5  12.5  12.5  56.9961  10.6526  14.447
+212.5  12.5  12.5  58.0435  10.4799  13.6323
+237.5  12.5  12.5  58.5153  10.1577  12.8832
+262.5  12.5  12.5  58.0774  9.69056  12.0558
+287.5  12.5  12.5  57.6759  9.15237  11.1138
+312.5  12.5  12.5  56.9261  8.77315  10.0547
+337.5  12.5  12.5  55.9995  8.14374  8.97903
+362.5  12.5  12.5  54.8921  7.57133  7.9919
+387.5  12.5  12.5  53.6336  6.71044  6.8658
+412.5  12.5  12.5  52.1026  6.23332  6.11435
+437.5  12.5  12.5  50.6015  5.45701  5.15165
+462.5  12.5  12.5  49.094  4.8231  4.39036
+487.5  12.5  12.5  47.2465  4.17704  3.59828
+512.5  12.5  12.5  45.8488  3.74149  3.10203
+537.5  12.5  12.5  44.3471  3.25349  2.62938
+562.5  12.5  12.5  42.6767  2.84842  2.29185
+587.5  12.5  12.5  41.1049  2.36632  1.83818
+625  25  25  38.8511  1.85112  1.39162
+675  25  25  36.3459  1.23518  0.918791
+725  25  25  33.9941  0.951227  0.741761
+775  25  25  31.8344  0.670686  0.514018
+825  25  25  29.82  0.571086  0.491093
+875  25  25  28.1567  0.693125  0.425068
+925  25  25  26.6087  0.923294  0.389884
+975  25  25  25.1236  1.30744  0.624152
+1050  50  50  23.1335  1.83767  0.776234
+1150  50  50  20.5867  2.40754  1.11911
+1250  50  50  18.1726  2.58159  1.41964
+1350  50  50  15.8538  2.52363  1.76168
+1450  50  50  13.8879  2.37382  1.91902
+1625  125  125  11.1082  2.2144  1.83988
+1875  125  125  8.24966  2.4057  1.56556
+2125  125  125  6.05194  2.54891  1.53503
+2375  125  125  4.19915  2.1431  1.70618
+2750  250  250  2.32164  1.37353  1.56114
+3250  250  250  1.0091  0.784084  0.955377
+4250  750  750  0.149035  0.137949  0.394523
+#END YODA_SCATTER2D
+
+#BEGIN YODA_SCATTER2D /REF/CMS_2017_I1511284/d02-x01-y01
+Path=/REF/CMS_2017_I1511284/d02-x01-y01
+Type=Scatter2D 
+#xval  xerr-  xerr+  yval  yerr-  yerr+
+12.5  12.5  12.5  698.438  56.0521  56.3947
+37.5  12.5  12.5  152.192  33.1944  47.3862
+62.5  12.5  12.5  149.339  33.851  40.0651
+87.5  12.5  12.5  141.37  26.28  32.2931
+112.5  12.5  12.5  134.39  22.1059  26.3643
+137.5  12.5  12.5  130.277  19.5055  17.4705
+162.5  12.5  12.5  123.703  14.2968  12.1292
+187.5  12.5  12.5  115.465  10.3202  7.86717
+212.5  12.5  12.5  106.395  6.51497  5.08122
+237.5  12.5  12.5  96.0886  5.38336  4.58001
+262.5  12.5  12.5  86.1345  4.63756  4.40301
+287.5  12.5  12.5  78.1513  4.5959  4.05266
+312.5  12.5  12.5  71.1998  5.52444  4.11456
+337.5  12.5  12.5  65.1237  6.63054  4.67207
+362.5  12.5  12.5  58.9186  7.03062  4.81427
+387.5  12.5  12.5  53.3892  7.14169  5.225
+412.5  12.5  12.5  48.1747  7.05632  5.21498
+437.5  12.5  12.5  43.6562  7.33541  5.1063
+462.5  12.5  12.5  39.6976  7.43375  4.6229
+487.5  12.5  12.5  35.8967  7.55121  4.81246
+512.5  12.5  12.5  32.2545  7.48221  4.73851
+537.5  12.5  12.5  29.2897  7.56974  4.844
+562.5  12.5  12.5  26.7379  7.71559  4.85792
+587.5  12.5  12.5  24.1977  7.64062  4.77984
+625  25  25  20.821  7.30346  4.93306
+675  25  25  16.8526  6.56934  5.16653
+725  25  25  13.6468  5.74933  5.17255
+775  25  25  11.199  5.08394  4.80984
+825  25  25  9.0587  4.34683  4.34954
+875  25  25  7.35893  3.68345  3.90776
+925  25  25  5.99476  3.12425  3.46931
+975  25  25  4.91481  2.65981  3.0342
+1050  50  50  3.62807  1.98183  2.6219
+1150  50  50  2.48214  1.36052  2.19443
+1250  50  50  1.77257  1.03641  1.65934
+1350  50  50  1.37725  0.945438  1.08272
+1450  50  50  1.01923  0.842188  0.828371
+1625  125  125  0.482523  0.43966  0.685464
+1875  125  125  0.11224  0.102716  0.43332
+#END YODA_SCATTER2D
+
+#BEGIN YODA_SCATTER2D /REF/CMS_2017_I1511284/d03-x01-y01
+Path=/REF/CMS_2017_I1511284/d03-x01-y01
+Type=Scatter2D 
+#xval  xerr-  xerr+  yval  yerr-  yerr+
+12.5  12.5  12.5  374.79  25.4225  20.3408
+37.5  12.5  12.5  81.7959  15.3833  15.7573
+62.5  12.5  12.5  89.5357  14.0827  16.0832
+87.5  12.5  12.5  91.9059  14.3521  18.175
+112.5  12.5  12.5  92.2309  15.3849  20.1393
+137.5  12.5  12.5  91.6815  15.7893  20.7184
+162.5  12.5  12.5  89.3431  15.2693  19.8007
+187.5  12.5  12.5  87.2129  14.3017  18.3119
+212.5  12.5  12.5  83.9707  12.7411  16.1768
+237.5  12.5  12.5  80.677  11.2838  14.1845
+262.5  12.5  12.5  76.9511  9.98622  12.2688
+287.5  12.5  12.5  73.3809  8.90735  10.5823
+312.5  12.5  12.5  69.6051  7.7247  8.87714
+337.5  12.5  12.5  66.2393  7.01998  7.63262
+362.5  12.5  12.5  63.2222  6.48431  6.61922
+387.5  12.5  12.5  60.1114  5.45166  5.25603
+412.5  12.5  12.5  57.1343  4.83544  4.40176
+437.5  12.5  12.5  54.2592  4.10126  3.47833
+462.5  12.5  12.5  51.8354  3.42914  2.73688
+487.5  12.5  12.5  49.4713  2.71685  2.13902
+512.5  12.5  12.5  46.9163  2.01052  1.53542
+537.5  12.5  12.5  44.8033  1.58764  1.31013
+562.5  12.5  12.5  42.6516  1.58485  1.15272
+587.5  12.5  12.5  40.6966  1.89649  1.2212
+625  25  25  38.1684  2.10853  0.899683
+675  25  25  34.7879  2.68128  1.38032
+725  25  25  31.782  3.05585  1.64325
+775  25  25  29.1161  3.35935  1.92229
+825  25  25  26.6138  3.59309  2.12537
+875  25  25  24.3442  3.78803  2.32996
+925  25  25  22.3225  3.94412  2.47542
+975  25  25  20.4493  4.11032  2.67649
+1050  50  50  17.7876  4.16086  2.69127
+1150  50  50  14.7578  4.23295  2.79978
+1250  50  50  12.1913  4.23367  2.83881
+1350  50  50  9.96921  4.10477  2.84539
+1450  50  50  8.04923  3.8555  2.84679
+1625  125  125  5.38344  3.18263  2.76448
+1875  125  125  2.7613  2.00305  2.39262
+2125  125  125  1.28795  1.0608  1.7951
+2375  125  125  0.549745  0.48826  1.14866
+2750  250  250  0.149678  0.142753  0.491829
+3250  250  250  0.0189908  0.0200856  0.121002
+4250  750  750  0.000419679  0.000565645  0.00723307
+#END YODA_SCATTER2D
diff --git a/analyses/pluginCMS/CMS_2017_I1518399.cc b/analyses/pluginCMS/CMS_2017_I1518399.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2017_I1518399.cc
@@ -0,0 +1,127 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/PartonicTops.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/VetoedFinalState.hh"
+#include "Rivet/Projections/PromptFinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Projections/DressedLeptons.hh"
+#include "Rivet/Projections/ChargedLeptons.hh"
+
+namespace Rivet {
+
+
+  /// Leading jet mass for boosted top quarks at 8 TeV
+  class CMS_2017_I1518399 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(CMS_2017_I1518399);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      // Dressed leptons
+      IdentifiedFinalState photons(PID::PHOTON);
+      ChargedLeptons charged_leptons;
+      PromptFinalState prompt_leptons(charged_leptons);
+      Cut leptonCuts = Cuts::pT > 45*GeV && Cuts::abseta < 2.1;
+      DressedLeptons dressed_leptons(photons, prompt_leptons, 0.1, leptonCuts, true, false);
+      declare(dressed_leptons, "DressedLeptons");
+
+      // Jets
+      VetoedFinalState fs_jets;
+      fs_jets.vetoNeutrinos();
+      declare(FastJets(fs_jets, FastJets::CAM, 1.2), "JetsCA12");
+
+      // Partonic top for decay channel definition
+      declare(PartonicTops(PartonicTops::E_MU, false), "LeptonicTops");
+      declare(PartonicTops(PartonicTops::HADRONIC), "HadronicTops");
+
+      // Main histograms
+      _hist_mass        = bookHisto1D("d01-x01-y01");
+      _hist_mass_norm   = bookHisto1D("d02-x01-y01");
+
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      // Decay mode check
+      const Particles& leptonicTops = apply<PartonicTops>(event, "LeptonicTops").particlesByPt();
+      const Particles& hadronicTops = apply<PartonicTops>(event, "HadronicTops").particlesByPt();
+      if (leptonicTops.size() != 1 || hadronicTops.size() != 1) vetoEvent;
+
+      // Get the leptons
+      const DressedLeptons& dressed_leptons = apply<DressedLeptons>(event, "DressedLeptons");
+
+      // Leading dressed lepton
+      const vector<DressedLepton> leptons = dressed_leptons.dressedLeptons();
+      if (leptons.empty()) vetoEvent;
+      Particle lepton;
+      for (const Particle& l : leptons) {
+        if (l.pT() > lepton.pT()) lepton = l;
+      }
+
+      // Get the jets
+      const Jets& psjetsCA12 = applyProjection<FastJets>(event, "JetsCA12").jetsByPt(Cuts::pT > 50*GeV);
+
+      // Subtract the lepton four vector from a jet in case of overlap and clean jets
+      Jets cleanedJets;
+      for (Jet jet : psjetsCA12) {
+        if (deltaR(jet, lepton) < 1.2 )
+          jet = Jet(jet.momentum()-lepton.momentum(), jet.particles(), jet.tags());
+        if (jet.abseta() < 2.5) cleanedJets.push_back(jet);
+      }
+      std::sort(cleanedJets.begin(), cleanedJets.end(), cmpMomByPt);
+
+      // Jet pT cuts
+      if (cleanedJets.size() < 2) vetoEvent;
+      if (cleanedJets.at(0).pT() < 400*GeV) vetoEvent;
+      if (cleanedJets.at(1).pT() < 150*GeV) vetoEvent;
+
+      // Jet veto
+      if (cleanedJets.size() > 2 && cleanedJets.at(2).pT() > 150*GeV) vetoEvent;
+
+      // Small distance between 2nd jet and lepton
+      if (deltaR(cleanedJets.at(1), lepton) > 1.2) vetoEvent;
+
+      // m(jet1) > m(jet2 +lepton)
+      FourMomentum secondJetLepton = cleanedJets.at(1).momentum() + lepton.momentum();
+      if (cleanedJets.at(0).mass() < secondJetLepton.mass()) vetoEvent;
+
+      // Fill histograms
+      const double weight = event.weight();
+      _hist_mass->fill(cleanedJets.at(0).mass(), weight);
+      _hist_mass_norm->fill(cleanedJets.at(0).mass(), weight);
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+      const double sf = crossSection() * 1000 / sumOfWeights();
+      scale(_hist_mass, sf);
+      normalize(_hist_mass_norm, 1.0, false);
+    }
+
+    //@}
+
+
+  private:
+
+    // Histograms
+    Histo1DPtr _hist_mass, _hist_mass_norm;
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(CMS_2017_I1518399);
+
+
+}
diff --git a/analyses/pluginCMS/CMS_2017_I1518399.info b/analyses/pluginCMS/CMS_2017_I1518399.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2017_I1518399.info
@@ -0,0 +1,60 @@
+Name: CMS_2017_I1518399
+Year: 2017
+Summary: Differential $t\bar{t}$ production cross-section as a function of the leading jet mass for boosted top quarks at 8 TeV
+Experiment: CMS
+Collider: LHC
+SpiresID: 1518399
+Status: VALIDATED
+Authors:
+ - Torben Dreyer <torben.dreyer@desy.de>
+ - Roman Kogler <roman.kogler@cern.ch>
+ - Johannes Haller <johannes.haller@cern.ch>
+References:
+ - TOP-15-015
+ - arXiv:1703.06330
+ - Submitted to Eur. Phys. J. C.
+RunInfo:
+ '$t\bar{t}$ events at $\sqrt{s}=8\;\TeV$. Boosted topology requires high statistics in a single run or custom merging of the YODA files.'
+Luminosity: 19.7 /fb
+Beams: [p+, p+]
+Energies: [8000]
+
+Description:
+ 'Measurement of the differential and normalised differential $t\bar{t}$ production cross
+ section as a function of the leading jet mass. The measurement was performed in the lepton+jets channel
+ and the fiducial measurement phase space is enriched with events where the leading jet includes all
+ decay products of a hadronically decaying top quark.
+
+ This analysis is to be run on ${t\bar{t}}$ simulation.
+
+  The objects are defined as follows
+  - Lepton: electron or muon originating from the decay of a W boson
+  - Jets: jets are clustered from final state particles using the Cambridge-Aachen algorithm
+    with a distance parameter of 1.2. If a lepton overlaps with a jet (distance in the
+    eta-phi plane smaller 1.2) its four momentum is subtracted from the four momentum of the jet.
+
+  Definition of the particle level phase space:
+  - only ${\rm t\bar{t}}$ decays with one top quark decaying hadronically and one top quark
+    decaying leptonically including an electron or muon from the W decay.
+  - lepton $\pt > 45\;\GeV$ and $|\eta| < 2.1$
+  - at least one jet with $\pt > 400\;\GeV$ and $|\eta| < 2.5$
+  - a second jet with $\pt > 150\;\GeV$ and $|\eta| < 2.5$
+  - veto on additional jets with $\pt > 150\;\GeV$ and $|\eta| < 2.5$
+  - distance between the second jet and the lepton in the eta-phi plane $\Delta R(jet2, lepton)$ smaller 1.2
+  - invariant mass of the leading jet larger than the invariant mass of the combination of the second jet and lepton
+
+  The differential and normalised differential cross section was measured as a function of the leading jet mass.'
+
+BibKey: Sirunyan:2017yar
+BibTeX: '@article{Sirunyan:2017yar,
+      author         = "Sirunyan, Albert M and others",
+      title          = "{Measurement of the jet mass in highly boosted t-tbar
+                        events from pp collisions at sqrt(s) = 8 TeV}",
+      collaboration  = "CMS",
+      year           = "2017",
+      eprint         = "1703.06330",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CMS-TOP-15-015, CERN-EP-2017-018",
+      SLACcitation   = "%%CITATION = ARXIV:1703.06330;%%"
+}'
diff --git a/analyses/pluginCMS/CMS_2017_I1518399.plot b/analyses/pluginCMS/CMS_2017_I1518399.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2017_I1518399.plot
@@ -0,0 +1,22 @@
+# BEGIN PLOT /CMS_2017_I1518399/d*
+RatioPlotYLabel=Theory/Data
+LogY=0
+XTwosidedTicks=1
+YTwosidedTicks=1
+# END PLOT
+
+# BEGIN PLOT /CMS_2017_I1518399/d01-x01-y01
+Title=CMS, 8 TeV, ${\rm t\bar{t}}$ lepton+jets
+RatioPlotYMin=0.
+RatioPlotYMax=2.
+XLabel=Leading-jet $\mathrm{m}_{\mathrm{jet}}$ [GeV]
+YLabel=$\frac{\mathrm{d}\sigma}{\mathrm{dm}_{\mathrm{jet}}} \left[\frac{\mathrm{fb}}{\mathrm{GeV}}\right]$
+# END PLOT
+
+# BEGIN PLOT /CMS_2017_I1518399/d02-x01-y01
+Title=CMS, 8 TeV, ${\rm t\bar{t}}$ lepton+jets
+XLabel=Leading-jet $\mathrm{m}_{\mathrm{jet}}$ [GeV]
+YLabel=$\frac{1}{\sigma}\frac{\mathrm{d}\sigma}{\mathrm{dm}_{\mathrm{jet}}} \left[\mathrm{GeV}^{-1}\right]$
+# END PLOT
+
+
diff --git a/analyses/pluginCMS/CMS_2017_I1518399.yoda b/analyses/pluginCMS/CMS_2017_I1518399.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2017_I1518399.yoda
@@ -0,0 +1,26 @@
+#BEGIN YODA_SCATTER2D /REF/CMS_2017_I1518399/d01-x01-y01
+Path=/REF/CMS_2017_I1518399/d01-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.550000e+02	1.500000e+01	1.500000e+01	3.928816e-01	3.339621e-01	3.339621e-01
+1.850000e+02	1.500000e+01	1.500000e+01	1.401789e+00	2.710444e-01	2.710444e-01
+2.200000e+02	2.000000e+01	2.000000e+01	6.742848e-01	1.893734e-01	1.893734e-01
+2.650000e+02	2.500000e+01	2.500000e+01	3.652659e-01	1.936995e-01	1.936995e-01
+3.200000e+02	3.000000e+01	3.000000e+01	2.846718e-02	8.615050e-02	8.615050e-02
+#END YODA_SCATTER2D
+
+
+#BEGIN YODA_SCATTER2D /REF/CMS_2017_I1518399/d02-x01-y01
+Path=/REF/CMS_2017_I1518399/d02-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.550000e+02	1.500000e+01	1.500000e+01	3.898299e-03	3.041170e-03	3.041170e-03
+1.850000e+02	1.500000e+01	1.500000e+01	1.390900e-02	2.484712e-03	2.484712e-03
+2.200000e+02	2.000000e+01	2.000000e+01	6.690473e-03	1.641810e-03	1.641810e-03
+2.650000e+02	2.500000e+01	2.500000e+01	3.624287e-03	1.701276e-03	1.701276e-03
+3.200000e+02	3.000000e+01	3.000000e+01	2.824606e-04	8.402947e-04	8.402947e-04
+#END YODA_SCATTER2D
+
+
diff --git a/analyses/pluginCMS/CMS_2017_I1519995.cc b/analyses/pluginCMS/CMS_2017_I1519995.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2017_I1519995.cc
@@ -0,0 +1,59 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Tools/BinnedHistogram.hh"
+
+namespace Rivet {
+
+
+  /// Search for new physics with dijet angular distributions in proton-proton collisions at sqrt{(s) = 13 TeV
+  class CMS_2017_I1519995 : public Analysis {
+  public:
+
+    DEFAULT_RIVET_ANALYSIS_CTOR(CMS_2017_I1519995);
+
+
+    /// Book projections and histograms
+    void init() {
+      FastJets antikt(FinalState(), FastJets::ANTIKT, 0.4);
+      declare(antikt, "ANTIKT");
+      _h_chi_dijet.addHistogram(4800., 8000., bookHisto1D(1, 1, 1));
+      _h_chi_dijet.addHistogram(4200., 4800., bookHisto1D(2, 1, 1));
+      _h_chi_dijet.addHistogram(3600., 4200., bookHisto1D(3, 1, 1));
+      _h_chi_dijet.addHistogram(3000., 3600., bookHisto1D(4, 1, 1));
+      _h_chi_dijet.addHistogram(2400., 3000., bookHisto1D(5, 1, 1));
+      _h_chi_dijet.addHistogram(1900., 2400., bookHisto1D(6, 1, 1));
+    }
+
+
+    /// Per-event analysis
+    void analyze(const Event& event) {
+      const Jets& jets = apply<JetAlg>(event, "ANTIKT").jetsByPt();
+      if (jets.size() < 2) vetoEvent;
+
+      const FourMomentum j0(jets[0].mom()), j1(jets[1].mom());
+      if (fabs(j0.rap()+j1.rap())/2 > 1.11) vetoEvent;
+
+      const double mjj = (j0+j1).mass();
+      const double chi = exp(fabs(j0.rap()-j1.rap()));
+      if (chi < 16) _h_chi_dijet.fill(mjj/GeV, chi, event.weight());
+    }
+
+
+    /// Normalize histograms
+    void finalize() {
+      for (Histo1DPtr hist : _h_chi_dijet.getHistograms()) normalize(hist);
+    }
+
+
+  private:
+
+    BinnedHistogram<double> _h_chi_dijet;
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(CMS_2017_I1519995);
+
+}
diff --git a/analyses/pluginCMS/CMS_2017_I1519995.info b/analyses/pluginCMS/CMS_2017_I1519995.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2017_I1519995.info
@@ -0,0 +1,38 @@
+Name: CMS_2017_I1519995
+Year: 2017
+Summary: Search for new physics with dijet angular distributions in proton-proton collisions at $\sqrt{s} = 13 \TeV$
+Experiment: CMS
+Collider: CERN LHC
+InspireID: 1519995
+Status: VALIDATED
+Authors:
+ - Andreas Hinzmann <hinzmann@cern.ch>
+References:
+ - arXiv:1703.09986
+ - CMS EXO-15-009
+RunInfo:
+  Hard QCD process with a pT cut of 200 GeV on sub-leading jet is recommended.
+NeedCrossSection: yes
+Beams: [p, p]
+Energies: [13000]
+PtCuts: [200]
+Description:
+  'Dijet angular distributions are measured in proton-proton collisions at
+  $\sqrt{s}=13~\TeV$, using a data set corresponding to an integrated
+  luminosity of 2.6/fb collected by the CMS detector at the CERN LHC. Dijet
+  angular distributions are found to be in agreement with the perturbative QCD
+  predictions that include electroweak corrections.'
+BibKey: Sirunyan:2017ygf
+BibTeX: '@article{Sirunyan:2017ygf,
+      author         = "Sirunyan, Albert M and others",
+      title          = "{Search for new physics with dijet angular distributions
+                        in proton-proton collisions at sqrt(s) = 13 TeV}",
+      collaboration  = "CMS",
+      journal        = "submitted to JHEP",
+      year           = "2017",
+      eprint         = "1703.09986",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CMS-EXO-15-009, CERN-EP-2017-047",
+      SLACcitation   = "%%CITATION = ARXIV:1703.09986;%%"
+}'
diff --git a/analyses/pluginCMS/CMS_2017_I1519995.plot b/analyses/pluginCMS/CMS_2017_I1519995.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2017_I1519995.plot
@@ -0,0 +1,48 @@
+# BEGIN PLOT /CMS_2017_I1519995/d01-x01-y01
+Title=CMS, 13 TeV, $|y_1+y_2|/2<1.11$ , $M_{jj}>$ 4.8 TeV
+XLabel=$\chi_{\text{dijet}} = e^{|y_1-y_2|}$
+YLabel=$1/\sigma_{\text{dijet}}$ $d\sigma_{\text{dijet}}/d\chi_{\text{dijet}}$
+FullRange=1
+LogY=0
+YMax=0.12
+# END PLOT
+# BEGIN PLOT /CMS_2017_I1519995/d02-x01-y01
+Title=CMS, 13 TeV, $|y_1+y_2|/2<1.11$ , 4.2 TeV $<M_{jj}<$ 4.8 TeV
+XLabel=$\chi_{\text{dijet}} = e^{|y_1-y_2|}$
+YLabel=$1/\sigma_{\text{dijet}}$ $d\sigma_{\text{dijet}}/d\chi_{\text{dijet}}$
+FullRange=1
+LogY=0
+YMax=0.12
+# END PLOT
+# BEGIN PLOT /CMS_2017_I1519995/d03-x01-y01
+Title=CMS, 13 TeV, $|y_1+y_2|/2<1.11$ , 3.6 TeV $<M_{jj}<$ 4.2 TeV
+XLabel=$\chi_{\text{dijet}} = e^{|y_1-y_2|}$
+YLabel=$1/\sigma_{\text{dijet}}$ $d\sigma_{\text{dijet}}/d\chi_{\text{dijet}}$
+FullRange=1
+LogY=0
+YMax=0.12
+# END PLOT
+# BEGIN PLOT /CMS_2017_I1519995/d04-x01-y01
+Title=CMS, 13 TeV, $|y_1+y_2|/2<1.11$ , 3.0 TeV $<M_{jj}<$ 3.6 TeV
+XLabel=$\chi_{\text{dijet}} = e^{|y_1-y_2|}$
+YLabel=$1/\sigma_{\text{dijet}}$ $d\sigma_{\text{dijet}}/d\chi_{\text{dijet}}$
+FullRange=1
+LogY=0
+YMax=0.12
+# END PLOT
+# BEGIN PLOT /CMS_2017_I1519995/d05-x01-y01
+Title=CMS, 13 TeV, $|y_1+y_2|/2<1.11$ , 2.4 TeV $<M_{jj}<$ 3.0 TeV
+XLabel=$\chi_{\text{dijet}} = e^{|y_1-y_2|}$
+YLabel=$1/\sigma_{\text{dijet}}$ $d\sigma_{\text{dijet}}/d\chi_{\text{dijet}}$
+FullRange=1
+LogY=0
+YMax=0.12
+# END PLOT
+# BEGIN PLOT /CMS_2017_I1519995/d06-x01-y01
+Title=CMS, 13 TeV, $|y_1+y_2|/2<1.11$ , 1.9 TeV $<M_{jj}<$ 2.4 TeV
+XLabel=$\chi_{\text{dijet}} = e^{|y_1-y_2|}$
+YLabel=$1/\sigma_{\text{dijet}}$ $d\sigma_{\text{dijet}}/d\chi_{\text{dijet}}$
+FullRange=1
+LogY=0
+YMax=0.12
+# END PLOT
diff --git a/analyses/pluginCMS/CMS_2017_I1519995.yoda b/analyses/pluginCMS/CMS_2017_I1519995.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginCMS/CMS_2017_I1519995.yoda
@@ -0,0 +1,100 @@
+# BEGIN YODA_SCATTER2D /REF/CMS_2017_I1519995/d01-x01-y01
+Path=/REF/CMS_2017_I1519995/d01-x01-y01
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.000000e+00	1.000000e+00	1.000000e+00	8.050000e-02	1.728034e-02	2.122758e-02
+4.500000e+00	1.500000e+00	1.500000e+00	3.770000e-02	9.525755e-03	1.222007e-02
+7.500000e+00	1.500000e+00	1.500000e+00	8.470000e-02	1.430315e-02	1.690266e-02
+1.050000e+01	1.500000e+00	1.500000e+00	6.410000e-02	1.241008e-02	1.500833e-02
+1.400000e+01	2.000000e+00	2.000000e+00	6.990000e-02	1.128716e-02	1.327403e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2017_I1519995/d02-x01-y01
+Path=/REF/CMS_2017_I1519995/d02-x01-y01
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+00	5.000000e-01	5.000000e-01	8.750000e-02	1.500833e-02	1.769181e-02
+2.500000e+00	5.000000e-01	5.000000e-01	5.680000e-02	1.193399e-02	1.482734e-02
+3.500000e+00	5.000000e-01	5.000000e-01	6.870000e-02	1.323065e-02	1.602529e-02
+4.500000e+00	5.000000e-01	5.000000e-01	4.950000e-02	1.111126e-02	1.400893e-02
+5.500000e+00	5.000000e-01	5.000000e-01	6.770000e-02	1.310954e-02	1.590786e-02
+6.500000e+00	5.000000e-01	5.000000e-01	6.260000e-02	1.260357e-02	1.540292e-02
+7.500000e+00	5.000000e-01	5.000000e-01	5.710000e-02	1.200042e-02	1.480034e-02
+8.500000e+00	5.000000e-01	5.000000e-01	6.080000e-02	1.240000e-02	1.520000e-02
+9.500000e+00	5.000000e-01	5.000000e-01	8.760000e-02	1.490134e-02	1.760114e-02
+1.100000e+01	1.000000e+00	1.000000e+00	6.910000e-02	9.408507e-03	1.070747e-02
+1.300000e+01	1.000000e+00	1.000000e+00	7.040000e-02	9.426028e-03	1.082266e-02
+1.500000e+01	1.000000e+00	1.000000e+00	6.130000e-02	8.845903e-03	1.023963e-02
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2017_I1519995/d03-x01-y01
+Path=/REF/CMS_2017_I1519995/d03-x01-y01
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+00	5.000000e-01	5.000000e-01	9.830000e-02	8.732125e-03	9.512623e-03
+2.500000e+00	5.000000e-01	5.000000e-01	6.410000e-02	6.987131e-03	7.778175e-03
+3.500000e+00	5.000000e-01	5.000000e-01	6.210000e-02	6.846897e-03	7.542546e-03
+4.500000e+00	5.000000e-01	5.000000e-01	6.840000e-02	7.134424e-03	7.930952e-03
+5.500000e+00	5.000000e-01	5.000000e-01	6.850000e-02	7.117584e-03	7.915807e-03
+6.500000e+00	5.000000e-01	5.000000e-01	5.140000e-02	6.203225e-03	6.902898e-03
+7.500000e+00	5.000000e-01	5.000000e-01	7.810000e-02	7.600658e-03	8.402381e-03
+8.500000e+00	5.000000e-01	5.000000e-01	6.700000e-02	7.000714e-03	7.800641e-03
+9.500000e+00	5.000000e-01	5.000000e-01	6.360000e-02	6.802941e-03	7.602631e-03
+1.100000e+01	1.000000e+00	1.000000e+00	5.970000e-02	4.709565e-03	5.115662e-03
+1.300000e+01	1.000000e+00	1.000000e+00	6.090000e-02	4.738143e-03	5.135173e-03
+1.500000e+01	1.000000e+00	1.000000e+00	6.870000e-02	5.099020e-03	5.491812e-03
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2017_I1519995/d04-x01-y01
+Path=/REF/CMS_2017_I1519995/d04-x01-y01
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+00	5.000000e-01	5.000000e-01	8.030000e-02	4.162932e-03	4.346263e-03
+2.500000e+00	5.000000e-01	5.000000e-01	6.650000e-02	3.668787e-03	3.860052e-03
+3.500000e+00	5.000000e-01	5.000000e-01	6.620000e-02	3.613862e-03	3.807887e-03
+4.500000e+00	5.000000e-01	5.000000e-01	6.100000e-02	3.354102e-03	3.551056e-03
+5.500000e+00	5.000000e-01	5.000000e-01	5.980000e-02	3.324154e-03	3.522783e-03
+6.500000e+00	5.000000e-01	5.000000e-01	6.390000e-02	3.413210e-03	3.612478e-03
+7.500000e+00	5.000000e-01	5.000000e-01	6.560000e-02	3.501428e-03	3.601389e-03
+8.500000e+00	5.000000e-01	5.000000e-01	6.070000e-02	3.300000e-03	3.501428e-03
+9.500000e+00	5.000000e-01	5.000000e-01	7.280000e-02	3.605551e-03	3.805260e-03
+1.100000e+01	1.000000e+00	1.000000e+00	6.520000e-02	2.433105e-03	2.531798e-03
+1.300000e+01	1.000000e+00	1.000000e+00	6.940000e-02	2.570992e-03	2.692582e-03
+1.500000e+01	1.000000e+00	1.000000e+00	6.700000e-02	2.657066e-03	2.751363e-03
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2017_I1519995/d05-x01-y01
+Path=/REF/CMS_2017_I1519995/d05-x01-y01
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+00	5.000000e-01	5.000000e-01	7.750000e-02	2.404163e-03	2.404163e-03
+2.500000e+00	5.000000e-01	5.000000e-01	6.470000e-02	1.941649e-03	1.941649e-03
+3.500000e+00	5.000000e-01	5.000000e-01	6.510000e-02	1.835756e-03	1.835756e-03
+4.500000e+00	5.000000e-01	5.000000e-01	6.360000e-02	1.615549e-03	1.746425e-03
+5.500000e+00	5.000000e-01	5.000000e-01	6.650000e-02	1.676305e-03	1.676305e-03
+6.500000e+00	5.000000e-01	5.000000e-01	6.380000e-02	1.529706e-03	1.627882e-03
+7.500000e+00	5.000000e-01	5.000000e-01	6.410000e-02	1.603122e-03	1.603122e-03
+8.500000e+00	5.000000e-01	5.000000e-01	6.560000e-02	1.603122e-03	1.603122e-03
+9.500000e+00	5.000000e-01	5.000000e-01	6.680000e-02	1.612452e-03	1.612452e-03
+1.100000e+01	1.000000e+00	1.000000e+00	6.660000e-02	1.170470e-03	1.170470e-03
+1.300000e+01	1.000000e+00	1.000000e+00	6.740000e-02	1.252996e-03	1.303840e-03
+1.500000e+01	1.000000e+00	1.000000e+00	6.720000e-02	1.421267e-03	1.421267e-03
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/CMS_2017_I1519995/d06-x01-y01
+Path=/REF/CMS_2017_I1519995/d06-x01-y01
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.500000e+00	5.000000e-01	5.000000e-01	7.950000e-02	2.102380e-03	2.102380e-03
+2.500000e+00	5.000000e-01	5.000000e-01	6.530000e-02	1.526434e-03	1.526434e-03
+3.500000e+00	5.000000e-01	5.000000e-01	6.240000e-02	1.280625e-03	1.280625e-03
+4.500000e+00	5.000000e-01	5.000000e-01	6.440000e-02	1.131371e-03	1.131371e-03
+5.500000e+00	5.000000e-01	5.000000e-01	6.240000e-02	1.000000e-03	1.000000e-03
+6.500000e+00	5.000000e-01	5.000000e-01	6.320000e-02	8.944272e-04	8.944272e-04
+7.500000e+00	5.000000e-01	5.000000e-01	6.560000e-02	8.062258e-04	8.246211e-04
+8.500000e+00	5.000000e-01	5.000000e-01	6.490000e-02	8.000000e-04	8.062258e-04
+9.500000e+00	5.000000e-01	5.000000e-01	6.730000e-02	8.246211e-04	8.544004e-04
+1.100000e+01	1.000000e+00	1.000000e+00	6.630000e-02	7.810250e-04	8.485281e-04
+1.300000e+01	1.000000e+00	1.000000e+00	6.810000e-02	1.081665e-03	1.081665e-03
+1.500000e+01	1.000000e+00	1.000000e+00	6.820000e-02	1.431782e-03	1.431782e-03
+# END YODA_SCATTER2D
diff --git a/src/Analyses/D0_1995_I398175.cc b/analyses/pluginD0/D0_1995_I398175.cc
rename from src/Analyses/D0_1995_I398175.cc
rename to analyses/pluginD0/D0_1995_I398175.cc
diff --git a/data/anainfo/D0_1995_I398175.info b/analyses/pluginD0/D0_1995_I398175.info
rename from data/anainfo/D0_1995_I398175.info
rename to analyses/pluginD0/D0_1995_I398175.info
diff --git a/data/plotinfo/D0_1995_I398175.plot b/analyses/pluginD0/D0_1995_I398175.plot
rename from data/plotinfo/D0_1995_I398175.plot
rename to analyses/pluginD0/D0_1995_I398175.plot
diff --git a/data/refdata/D0_1995_I398175.yoda b/analyses/pluginD0/D0_1995_I398175.yoda
rename from data/refdata/D0_1995_I398175.yoda
rename to analyses/pluginD0/D0_1995_I398175.yoda
diff --git a/src/Analyses/D0_1996_S3214044.cc b/analyses/pluginD0/D0_1996_S3214044.cc
rename from src/Analyses/D0_1996_S3214044.cc
rename to analyses/pluginD0/D0_1996_S3214044.cc
diff --git a/data/anainfo/D0_1996_S3214044.info b/analyses/pluginD0/D0_1996_S3214044.info
rename from data/anainfo/D0_1996_S3214044.info
rename to analyses/pluginD0/D0_1996_S3214044.info
diff --git a/data/plotinfo/D0_1996_S3214044.plot b/analyses/pluginD0/D0_1996_S3214044.plot
rename from data/plotinfo/D0_1996_S3214044.plot
rename to analyses/pluginD0/D0_1996_S3214044.plot
diff --git a/data/refdata/D0_1996_S3214044.yoda b/analyses/pluginD0/D0_1996_S3214044.yoda
rename from data/refdata/D0_1996_S3214044.yoda
rename to analyses/pluginD0/D0_1996_S3214044.yoda
diff --git a/src/Analyses/D0_1996_S3324664.cc b/analyses/pluginD0/D0_1996_S3324664.cc
rename from src/Analyses/D0_1996_S3324664.cc
rename to analyses/pluginD0/D0_1996_S3324664.cc
diff --git a/data/anainfo/D0_1996_S3324664.info b/analyses/pluginD0/D0_1996_S3324664.info
rename from data/anainfo/D0_1996_S3324664.info
rename to analyses/pluginD0/D0_1996_S3324664.info
diff --git a/data/plotinfo/D0_1996_S3324664.plot b/analyses/pluginD0/D0_1996_S3324664.plot
rename from data/plotinfo/D0_1996_S3324664.plot
rename to analyses/pluginD0/D0_1996_S3324664.plot
diff --git a/data/refdata/D0_1996_S3324664.yoda b/analyses/pluginD0/D0_1996_S3324664.yoda
rename from data/refdata/D0_1996_S3324664.yoda
rename to analyses/pluginD0/D0_1996_S3324664.yoda
diff --git a/src/Analyses/D0_2000_I499943.cc b/analyses/pluginD0/D0_2000_I499943.cc
rename from src/Analyses/D0_2000_I499943.cc
rename to analyses/pluginD0/D0_2000_I499943.cc
diff --git a/data/anainfo/D0_2000_I499943.info b/analyses/pluginD0/D0_2000_I499943.info
rename from data/anainfo/D0_2000_I499943.info
rename to analyses/pluginD0/D0_2000_I499943.info
diff --git a/data/plotinfo/D0_2000_I499943.plot b/analyses/pluginD0/D0_2000_I499943.plot
rename from data/plotinfo/D0_2000_I499943.plot
rename to analyses/pluginD0/D0_2000_I499943.plot
diff --git a/data/refdata/D0_2000_I499943.yoda b/analyses/pluginD0/D0_2000_I499943.yoda
rename from data/refdata/D0_2000_I499943.yoda
rename to analyses/pluginD0/D0_2000_I499943.yoda
diff --git a/src/Analyses/D0_2000_I503361.cc b/analyses/pluginD0/D0_2000_I503361.cc
rename from src/Analyses/D0_2000_I503361.cc
rename to analyses/pluginD0/D0_2000_I503361.cc
--- a/src/Analyses/D0_2000_I503361.cc
+++ b/analyses/pluginD0/D0_2000_I503361.cc
@@ -1,83 +1,81 @@
 // -*- C++ -*-
 #include "Rivet/Analysis.hh"
 #include "Rivet/Projections/ZFinder.hh"
 
 namespace Rivet {
 
-  using namespace Cuts;
-
   /// @ D0 Run I Z \f$ p_\perp \f$ in Drell-Yan events
   /// @author Simone Amoroso
   class D0_2000_I503361 : public Analysis {
   public:
 
     /// Constructor
     D0_2000_I503361()
       : Analysis("D0_2000_I503361")
     {    }
 
 
     /// @name Analysis methods
     //@{
 
     /// Book histograms and initialise projections before the run
     void init() {
 
       ///  Initialise and register projections here
       ZFinder zfinder(FinalState(), Cuts::open(), PID::ELECTRON, 75*GeV, 105*GeV, 0.0*GeV, ZFinder::NOCLUSTER);
       declare(zfinder, "ZFinder");
 
 
       _hist_zpt = bookHisto1D(1, 1, 1);
     }
 
 
     /// Perform the per-event analysis
     void analyze(const Event& event) {
       const double weight = event.weight();
 
       /// @todo Do the event by event analysis here
       const ZFinder& zfinder = apply<ZFinder>(event, "ZFinder");
       if (zfinder.bosons().size() != 1) {
         MSG_DEBUG("Num e+ e- pairs found = " << zfinder.bosons().size());
 	vetoEvent;
       }
       const FourMomentum& pZ = zfinder.bosons()[0].momentum();
       if (pZ.mass2() < 0) {
 	MSG_DEBUG("Negative Z mass**2 = " << pZ.mass2()/GeV2 << "!");
 	vetoEvent;
       }
 
       MSG_DEBUG("Dilepton mass = " << pZ.mass()/GeV << " GeV");
       _hist_zpt->fill(pZ.pT(), weight);
 
     }
 
 
     /// Normalise histograms etc., after the run
     void finalize() {
       scale(_hist_zpt, crossSection()/picobarn/sumOfWeights());
     }
 
     //@}
 
 
   private:
 
     // Data members like post-cuts event weight counters go here
 
 
     /// @name Histograms
     //@{
     Histo1DPtr _hist_zpt;
     //@}
 
 
   };
 
 
 
   // The hook for the plugin system
   DECLARE_RIVET_PLUGIN(D0_2000_I503361);
 
 }
diff --git a/data/anainfo/D0_2000_I503361.info b/analyses/pluginD0/D0_2000_I503361.info
rename from data/anainfo/D0_2000_I503361.info
rename to analyses/pluginD0/D0_2000_I503361.info
diff --git a/data/plotinfo/D0_2000_I503361.plot b/analyses/pluginD0/D0_2000_I503361.plot
rename from data/plotinfo/D0_2000_I503361.plot
rename to analyses/pluginD0/D0_2000_I503361.plot
diff --git a/data/refdata/D0_2000_I503361.yoda b/analyses/pluginD0/D0_2000_I503361.yoda
rename from data/refdata/D0_2000_I503361.yoda
rename to analyses/pluginD0/D0_2000_I503361.yoda
diff --git a/src/Analyses/D0_2000_S4480767.cc b/analyses/pluginD0/D0_2000_S4480767.cc
rename from src/Analyses/D0_2000_S4480767.cc
rename to analyses/pluginD0/D0_2000_S4480767.cc
diff --git a/data/anainfo/D0_2000_S4480767.info b/analyses/pluginD0/D0_2000_S4480767.info
rename from data/anainfo/D0_2000_S4480767.info
rename to analyses/pluginD0/D0_2000_S4480767.info
diff --git a/data/plotinfo/D0_2000_S4480767.plot b/analyses/pluginD0/D0_2000_S4480767.plot
rename from data/plotinfo/D0_2000_S4480767.plot
rename to analyses/pluginD0/D0_2000_S4480767.plot
diff --git a/data/refdata/D0_2000_S4480767.yoda b/analyses/pluginD0/D0_2000_S4480767.yoda
rename from data/refdata/D0_2000_S4480767.yoda
rename to analyses/pluginD0/D0_2000_S4480767.yoda
diff --git a/src/Analyses/D0_2001_S4674421.cc b/analyses/pluginD0/D0_2001_S4674421.cc
rename from src/Analyses/D0_2001_S4674421.cc
rename to analyses/pluginD0/D0_2001_S4674421.cc
diff --git a/data/anainfo/D0_2001_S4674421.info b/analyses/pluginD0/D0_2001_S4674421.info
rename from data/anainfo/D0_2001_S4674421.info
rename to analyses/pluginD0/D0_2001_S4674421.info
diff --git a/data/plotinfo/D0_2001_S4674421.plot b/analyses/pluginD0/D0_2001_S4674421.plot
rename from data/plotinfo/D0_2001_S4674421.plot
rename to analyses/pluginD0/D0_2001_S4674421.plot
diff --git a/data/refdata/D0_2001_S4674421.yoda b/analyses/pluginD0/D0_2001_S4674421.yoda
rename from data/refdata/D0_2001_S4674421.yoda
rename to analyses/pluginD0/D0_2001_S4674421.yoda
diff --git a/src/Analyses/D0_2004_S5992206.cc b/analyses/pluginD0/D0_2004_S5992206.cc
rename from src/Analyses/D0_2004_S5992206.cc
rename to analyses/pluginD0/D0_2004_S5992206.cc
diff --git a/data/anainfo/D0_2004_S5992206.info b/analyses/pluginD0/D0_2004_S5992206.info
rename from data/anainfo/D0_2004_S5992206.info
rename to analyses/pluginD0/D0_2004_S5992206.info
diff --git a/data/plotinfo/D0_2004_S5992206.plot b/analyses/pluginD0/D0_2004_S5992206.plot
rename from data/plotinfo/D0_2004_S5992206.plot
rename to analyses/pluginD0/D0_2004_S5992206.plot
diff --git a/data/refdata/D0_2004_S5992206.yoda b/analyses/pluginD0/D0_2004_S5992206.yoda
rename from data/refdata/D0_2004_S5992206.yoda
rename to analyses/pluginD0/D0_2004_S5992206.yoda
diff --git a/src/Analyses/D0_2006_S6438750.cc b/analyses/pluginD0/D0_2006_S6438750.cc
rename from src/Analyses/D0_2006_S6438750.cc
rename to analyses/pluginD0/D0_2006_S6438750.cc
diff --git a/data/anainfo/D0_2006_S6438750.info b/analyses/pluginD0/D0_2006_S6438750.info
rename from data/anainfo/D0_2006_S6438750.info
rename to analyses/pluginD0/D0_2006_S6438750.info
diff --git a/data/plotinfo/D0_2006_S6438750.plot b/analyses/pluginD0/D0_2006_S6438750.plot
rename from data/plotinfo/D0_2006_S6438750.plot
rename to analyses/pluginD0/D0_2006_S6438750.plot
diff --git a/data/refdata/D0_2006_S6438750.yoda b/analyses/pluginD0/D0_2006_S6438750.yoda
rename from data/refdata/D0_2006_S6438750.yoda
rename to analyses/pluginD0/D0_2006_S6438750.yoda
diff --git a/src/Analyses/D0_2007_S7075677.cc b/analyses/pluginD0/D0_2007_S7075677.cc
rename from src/Analyses/D0_2007_S7075677.cc
rename to analyses/pluginD0/D0_2007_S7075677.cc
diff --git a/data/anainfo/D0_2007_S7075677.info b/analyses/pluginD0/D0_2007_S7075677.info
rename from data/anainfo/D0_2007_S7075677.info
rename to analyses/pluginD0/D0_2007_S7075677.info
diff --git a/data/plotinfo/D0_2007_S7075677.plot b/analyses/pluginD0/D0_2007_S7075677.plot
rename from data/plotinfo/D0_2007_S7075677.plot
rename to analyses/pluginD0/D0_2007_S7075677.plot
diff --git a/data/refdata/D0_2007_S7075677.yoda b/analyses/pluginD0/D0_2007_S7075677.yoda
rename from data/refdata/D0_2007_S7075677.yoda
rename to analyses/pluginD0/D0_2007_S7075677.yoda
diff --git a/src/Analyses/D0_2008_S6879055.cc b/analyses/pluginD0/D0_2008_S6879055.cc
rename from src/Analyses/D0_2008_S6879055.cc
rename to analyses/pluginD0/D0_2008_S6879055.cc
diff --git a/data/anainfo/D0_2008_S6879055.info b/analyses/pluginD0/D0_2008_S6879055.info
rename from data/anainfo/D0_2008_S6879055.info
rename to analyses/pluginD0/D0_2008_S6879055.info
diff --git a/data/plotinfo/D0_2008_S6879055.plot b/analyses/pluginD0/D0_2008_S6879055.plot
rename from data/plotinfo/D0_2008_S6879055.plot
rename to analyses/pluginD0/D0_2008_S6879055.plot
diff --git a/data/refdata/D0_2008_S6879055.yoda b/analyses/pluginD0/D0_2008_S6879055.yoda
rename from data/refdata/D0_2008_S6879055.yoda
rename to analyses/pluginD0/D0_2008_S6879055.yoda
diff --git a/src/Analyses/D0_2008_S7554427.cc b/analyses/pluginD0/D0_2008_S7554427.cc
rename from src/Analyses/D0_2008_S7554427.cc
rename to analyses/pluginD0/D0_2008_S7554427.cc
diff --git a/data/anainfo/D0_2008_S7554427.info b/analyses/pluginD0/D0_2008_S7554427.info
rename from data/anainfo/D0_2008_S7554427.info
rename to analyses/pluginD0/D0_2008_S7554427.info
diff --git a/data/plotinfo/D0_2008_S7554427.plot b/analyses/pluginD0/D0_2008_S7554427.plot
rename from data/plotinfo/D0_2008_S7554427.plot
rename to analyses/pluginD0/D0_2008_S7554427.plot
diff --git a/data/refdata/D0_2008_S7554427.yoda b/analyses/pluginD0/D0_2008_S7554427.yoda
rename from data/refdata/D0_2008_S7554427.yoda
rename to analyses/pluginD0/D0_2008_S7554427.yoda
diff --git a/src/Analyses/D0_2008_S7662670.cc b/analyses/pluginD0/D0_2008_S7662670.cc
rename from src/Analyses/D0_2008_S7662670.cc
rename to analyses/pluginD0/D0_2008_S7662670.cc
diff --git a/data/anainfo/D0_2008_S7662670.info b/analyses/pluginD0/D0_2008_S7662670.info
rename from data/anainfo/D0_2008_S7662670.info
rename to analyses/pluginD0/D0_2008_S7662670.info
diff --git a/data/plotinfo/D0_2008_S7662670.plot b/analyses/pluginD0/D0_2008_S7662670.plot
rename from data/plotinfo/D0_2008_S7662670.plot
rename to analyses/pluginD0/D0_2008_S7662670.plot
diff --git a/data/refdata/D0_2008_S7662670.yoda b/analyses/pluginD0/D0_2008_S7662670.yoda
rename from data/refdata/D0_2008_S7662670.yoda
rename to analyses/pluginD0/D0_2008_S7662670.yoda
diff --git a/src/Analyses/D0_2008_S7719523.cc b/analyses/pluginD0/D0_2008_S7719523.cc
rename from src/Analyses/D0_2008_S7719523.cc
rename to analyses/pluginD0/D0_2008_S7719523.cc
diff --git a/data/anainfo/D0_2008_S7719523.info b/analyses/pluginD0/D0_2008_S7719523.info
rename from data/anainfo/D0_2008_S7719523.info
rename to analyses/pluginD0/D0_2008_S7719523.info
diff --git a/data/plotinfo/D0_2008_S7719523.plot b/analyses/pluginD0/D0_2008_S7719523.plot
rename from data/plotinfo/D0_2008_S7719523.plot
rename to analyses/pluginD0/D0_2008_S7719523.plot
diff --git a/data/refdata/D0_2008_S7719523.yoda b/analyses/pluginD0/D0_2008_S7719523.yoda
rename from data/refdata/D0_2008_S7719523.yoda
rename to analyses/pluginD0/D0_2008_S7719523.yoda
diff --git a/src/Analyses/D0_2008_S7837160.cc b/analyses/pluginD0/D0_2008_S7837160.cc
rename from src/Analyses/D0_2008_S7837160.cc
rename to analyses/pluginD0/D0_2008_S7837160.cc
diff --git a/data/anainfo/D0_2008_S7837160.info b/analyses/pluginD0/D0_2008_S7837160.info
rename from data/anainfo/D0_2008_S7837160.info
rename to analyses/pluginD0/D0_2008_S7837160.info
diff --git a/data/plotinfo/D0_2008_S7837160.plot b/analyses/pluginD0/D0_2008_S7837160.plot
rename from data/plotinfo/D0_2008_S7837160.plot
rename to analyses/pluginD0/D0_2008_S7837160.plot
diff --git a/data/refdata/D0_2008_S7837160.yoda b/analyses/pluginD0/D0_2008_S7837160.yoda
rename from data/refdata/D0_2008_S7837160.yoda
rename to analyses/pluginD0/D0_2008_S7837160.yoda
diff --git a/src/Analyses/D0_2008_S7863608.cc b/analyses/pluginD0/D0_2008_S7863608.cc
rename from src/Analyses/D0_2008_S7863608.cc
rename to analyses/pluginD0/D0_2008_S7863608.cc
diff --git a/data/anainfo/D0_2008_S7863608.info b/analyses/pluginD0/D0_2008_S7863608.info
rename from data/anainfo/D0_2008_S7863608.info
rename to analyses/pluginD0/D0_2008_S7863608.info
diff --git a/data/plotinfo/D0_2008_S7863608.plot b/analyses/pluginD0/D0_2008_S7863608.plot
rename from data/plotinfo/D0_2008_S7863608.plot
rename to analyses/pluginD0/D0_2008_S7863608.plot
diff --git a/data/refdata/D0_2008_S7863608.yoda b/analyses/pluginD0/D0_2008_S7863608.yoda
rename from data/refdata/D0_2008_S7863608.yoda
rename to analyses/pluginD0/D0_2008_S7863608.yoda
diff --git a/src/Analyses/D0_2009_S8202443.cc b/analyses/pluginD0/D0_2009_S8202443.cc
rename from src/Analyses/D0_2009_S8202443.cc
rename to analyses/pluginD0/D0_2009_S8202443.cc
diff --git a/data/anainfo/D0_2009_S8202443.info b/analyses/pluginD0/D0_2009_S8202443.info
rename from data/anainfo/D0_2009_S8202443.info
rename to analyses/pluginD0/D0_2009_S8202443.info
diff --git a/data/plotinfo/D0_2009_S8202443.plot b/analyses/pluginD0/D0_2009_S8202443.plot
rename from data/plotinfo/D0_2009_S8202443.plot
rename to analyses/pluginD0/D0_2009_S8202443.plot
diff --git a/data/refdata/D0_2009_S8202443.yoda b/analyses/pluginD0/D0_2009_S8202443.yoda
rename from data/refdata/D0_2009_S8202443.yoda
rename to analyses/pluginD0/D0_2009_S8202443.yoda
diff --git a/src/Analyses/D0_2009_S8320160.cc b/analyses/pluginD0/D0_2009_S8320160.cc
rename from src/Analyses/D0_2009_S8320160.cc
rename to analyses/pluginD0/D0_2009_S8320160.cc
diff --git a/data/anainfo/D0_2009_S8320160.info b/analyses/pluginD0/D0_2009_S8320160.info
rename from data/anainfo/D0_2009_S8320160.info
rename to analyses/pluginD0/D0_2009_S8320160.info
diff --git a/data/plotinfo/D0_2009_S8320160.plot b/analyses/pluginD0/D0_2009_S8320160.plot
rename from data/plotinfo/D0_2009_S8320160.plot
rename to analyses/pluginD0/D0_2009_S8320160.plot
diff --git a/data/refdata/D0_2009_S8320160.yoda b/analyses/pluginD0/D0_2009_S8320160.yoda
rename from data/refdata/D0_2009_S8320160.yoda
rename to analyses/pluginD0/D0_2009_S8320160.yoda
diff --git a/src/Analyses/D0_2009_S8349509.cc b/analyses/pluginD0/D0_2009_S8349509.cc
rename from src/Analyses/D0_2009_S8349509.cc
rename to analyses/pluginD0/D0_2009_S8349509.cc
diff --git a/data/anainfo/D0_2009_S8349509.info b/analyses/pluginD0/D0_2009_S8349509.info
rename from data/anainfo/D0_2009_S8349509.info
rename to analyses/pluginD0/D0_2009_S8349509.info
diff --git a/data/plotinfo/D0_2009_S8349509.plot b/analyses/pluginD0/D0_2009_S8349509.plot
rename from data/plotinfo/D0_2009_S8349509.plot
rename to analyses/pluginD0/D0_2009_S8349509.plot
diff --git a/data/refdata/D0_2009_S8349509.yoda b/analyses/pluginD0/D0_2009_S8349509.yoda
rename from data/refdata/D0_2009_S8349509.yoda
rename to analyses/pluginD0/D0_2009_S8349509.yoda
diff --git a/src/Analyses/D0_2010_S8566488.cc b/analyses/pluginD0/D0_2010_S8566488.cc
rename from src/Analyses/D0_2010_S8566488.cc
rename to analyses/pluginD0/D0_2010_S8566488.cc
diff --git a/data/anainfo/D0_2010_S8566488.info b/analyses/pluginD0/D0_2010_S8566488.info
rename from data/anainfo/D0_2010_S8566488.info
rename to analyses/pluginD0/D0_2010_S8566488.info
diff --git a/data/plotinfo/D0_2010_S8566488.plot b/analyses/pluginD0/D0_2010_S8566488.plot
rename from data/plotinfo/D0_2010_S8566488.plot
rename to analyses/pluginD0/D0_2010_S8566488.plot
diff --git a/data/refdata/D0_2010_S8566488.yoda b/analyses/pluginD0/D0_2010_S8566488.yoda
rename from data/refdata/D0_2010_S8566488.yoda
rename to analyses/pluginD0/D0_2010_S8566488.yoda
diff --git a/src/Analyses/D0_2010_S8570965.cc b/analyses/pluginD0/D0_2010_S8570965.cc
rename from src/Analyses/D0_2010_S8570965.cc
rename to analyses/pluginD0/D0_2010_S8570965.cc
diff --git a/data/anainfo/D0_2010_S8570965.info b/analyses/pluginD0/D0_2010_S8570965.info
rename from data/anainfo/D0_2010_S8570965.info
rename to analyses/pluginD0/D0_2010_S8570965.info
diff --git a/data/plotinfo/D0_2010_S8570965.plot b/analyses/pluginD0/D0_2010_S8570965.plot
rename from data/plotinfo/D0_2010_S8570965.plot
rename to analyses/pluginD0/D0_2010_S8570965.plot
diff --git a/data/refdata/D0_2010_S8570965.yoda b/analyses/pluginD0/D0_2010_S8570965.yoda
rename from data/refdata/D0_2010_S8570965.yoda
rename to analyses/pluginD0/D0_2010_S8570965.yoda
diff --git a/src/Analyses/D0_2010_S8671338.cc b/analyses/pluginD0/D0_2010_S8671338.cc
rename from src/Analyses/D0_2010_S8671338.cc
rename to analyses/pluginD0/D0_2010_S8671338.cc
diff --git a/data/anainfo/D0_2010_S8671338.info b/analyses/pluginD0/D0_2010_S8671338.info
rename from data/anainfo/D0_2010_S8671338.info
rename to analyses/pluginD0/D0_2010_S8671338.info
diff --git a/data/plotinfo/D0_2010_S8671338.plot b/analyses/pluginD0/D0_2010_S8671338.plot
rename from data/plotinfo/D0_2010_S8671338.plot
rename to analyses/pluginD0/D0_2010_S8671338.plot
diff --git a/data/refdata/D0_2010_S8671338.yoda b/analyses/pluginD0/D0_2010_S8671338.yoda
rename from data/refdata/D0_2010_S8671338.yoda
rename to analyses/pluginD0/D0_2010_S8671338.yoda
diff --git a/src/Analyses/D0_2010_S8821313.cc b/analyses/pluginD0/D0_2010_S8821313.cc
rename from src/Analyses/D0_2010_S8821313.cc
rename to analyses/pluginD0/D0_2010_S8821313.cc
diff --git a/data/anainfo/D0_2010_S8821313.info b/analyses/pluginD0/D0_2010_S8821313.info
rename from data/anainfo/D0_2010_S8821313.info
rename to analyses/pluginD0/D0_2010_S8821313.info
diff --git a/data/plotinfo/D0_2010_S8821313.plot b/analyses/pluginD0/D0_2010_S8821313.plot
rename from data/plotinfo/D0_2010_S8821313.plot
rename to analyses/pluginD0/D0_2010_S8821313.plot
diff --git a/data/refdata/D0_2010_S8821313.yoda b/analyses/pluginD0/D0_2010_S8821313.yoda
rename from data/refdata/D0_2010_S8821313.yoda
rename to analyses/pluginD0/D0_2010_S8821313.yoda
diff --git a/src/Analyses/D0_2011_I895662.cc b/analyses/pluginD0/D0_2011_I895662.cc
rename from src/Analyses/D0_2011_I895662.cc
rename to analyses/pluginD0/D0_2011_I895662.cc
diff --git a/data/anainfo/D0_2011_I895662.info b/analyses/pluginD0/D0_2011_I895662.info
rename from data/anainfo/D0_2011_I895662.info
rename to analyses/pluginD0/D0_2011_I895662.info
diff --git a/data/plotinfo/D0_2011_I895662.plot b/analyses/pluginD0/D0_2011_I895662.plot
rename from data/plotinfo/D0_2011_I895662.plot
rename to analyses/pluginD0/D0_2011_I895662.plot
diff --git a/data/refdata/D0_2011_I895662.yoda b/analyses/pluginD0/D0_2011_I895662.yoda
rename from data/refdata/D0_2011_I895662.yoda
rename to analyses/pluginD0/D0_2011_I895662.yoda
diff --git a/src/Analyses/D0_2015_I1324946.cc b/analyses/pluginD0/D0_2015_I1324946.cc
rename from src/Analyses/D0_2015_I1324946.cc
rename to analyses/pluginD0/D0_2015_I1324946.cc
--- a/src/Analyses/D0_2015_I1324946.cc
+++ b/analyses/pluginD0/D0_2015_I1324946.cc
@@ -1,104 +1,102 @@
 // -*- C++ -*-
 #include "Rivet/Analysis.hh"
 #include "Rivet/Projections/FinalState.hh"
 #include "Rivet/Tools/BinnedHistogram.hh"
 #include "Rivet/Projections/ZFinder.hh"
 
 namespace Rivet {
 
-  using namespace Cuts;
-
   class D0_2015_I1324946 : public Analysis {
   public:
 
     /// Constructor
     D0_2015_I1324946()
       : Analysis("D0_2015_I1324946")
     {    }
 
 
     /// @name Analysis methods
     //@{
 
     /// Book histograms and initialise projections before the run
     void init() {
       FinalState fs;
       ZFinder zfinder_mm(fs, Cuts::abseta < 2 && Cuts::pT > 15*GeV, PID::MUON, 30*GeV, 500*GeV, 0.0, ZFinder::NOCLUSTER, ZFinder::NOTRACK);
       declare(zfinder_mm, "zfinder_mm");
 
       _h_phistar_mm_peak_central = bookHisto1D(1, 1, 1);
       _h_phistar_mm_peak_forward = bookHisto1D(1, 1, 2);
       _h_phistar_mm_low_central = bookHisto1D(2, 1, 1);
       _h_phistar_mm_low_forward = bookHisto1D(2, 1, 2);
       _h_phistar_mm_high1 = bookHisto1D(3, 1, 1);
       _h_phistar_mm_high2 = bookHisto1D(4, 1, 1);
     }
 
 
     /// Perform the per-event analysis
     void analyze(const Event& event) {
       const double weight = event.weight();
 
 
       //70<Mmm<105
       const ZFinder& zfinder_mm = apply<ZFinder>(event, "zfinder_mm");
       if (zfinder_mm.bosons().size() == 1) {
 	Particles mm = zfinder_mm.constituents();
 	std::sort(mm.begin(), mm.end(), cmpMomByPt);
 	const FourMomentum& mminus = PID::threeCharge(mm[0].pid()) < 0 ? mm[0].momentum() : mm[1].momentum();
 	const FourMomentum& mplus  = PID::threeCharge(mm[0].pid()) < 0 ? mm[1].momentum() : mm[0].momentum();
 	double phi_acop = M_PI - mapAngle0ToPi(mminus.phi() - mplus.phi());
 	double costhetastar = tanh((mminus.eta() - mplus.eta())/2);
 	double sin2thetastar = 1 - sqr(costhetastar);
 	if (sin2thetastar < 0) sin2thetastar = 0;
 	const double phistar = tan(phi_acop/2) * sqrt(sin2thetastar);
 	const FourMomentum& zmom = zfinder_mm.bosons()[0].momentum();
         if (zmom.mass()<30*GeV || zmom.mass() >500*GeV) vetoEvent;
 	
         if( zmom.mass()>70 && zmom.mass()<100 && zmom.absrap()<1.0) _h_phistar_mm_peak_central->fill(phistar, weight);
 	if( zmom.mass()>70 && zmom.mass()<100 && zmom.absrap()>1.0  && zmom.absrap()<2.0) _h_phistar_mm_peak_forward->fill(phistar, weight);
 	if( zmom.mass()>30 && zmom.mass()<60  && zmom.absrap()<1.0) _h_phistar_mm_low_central->fill(phistar, weight);
 	if( zmom.mass()>30 && zmom.mass()<60 && zmom.absrap()>1.0 && zmom.absrap()<2.0) _h_phistar_mm_low_forward->fill(phistar, weight);
 	if( zmom.mass()>160 && zmom.mass()<300) _h_phistar_mm_high1->fill(phistar, weight);
 	if( zmom.mass()>300 && zmom.mass()<500) _h_phistar_mm_high2->fill(phistar, weight);
 	
       }
     }
 
     /// Normalise histograms etc., after the run
     void finalize() {
 
       normalize(_h_phistar_mm_low_central);
       normalize(_h_phistar_mm_low_forward);
       normalize(_h_phistar_mm_peak_central);
       normalize(_h_phistar_mm_peak_forward);
       normalize(_h_phistar_mm_high1);
       normalize(_h_phistar_mm_high2);
 
     }
 
 
     //}
 
     //@}
 
 
   private:
     /// @name Histograms
     //@{
 
     Histo1DPtr _h_phistar_mm_low_central;
     Histo1DPtr _h_phistar_mm_low_forward;
     Histo1DPtr _h_phistar_mm_peak_central;
     Histo1DPtr _h_phistar_mm_peak_forward;
     Histo1DPtr _h_phistar_mm_high1;
     Histo1DPtr _h_phistar_mm_high2;
     //@}                                        
   };
 
 
 
   // The hook for the plugin system
   DECLARE_RIVET_PLUGIN(D0_2015_I1324946);
 
 }
diff --git a/data/anainfo/D0_2015_I1324946.info b/analyses/pluginD0/D0_2015_I1324946.info
rename from data/anainfo/D0_2015_I1324946.info
rename to analyses/pluginD0/D0_2015_I1324946.info
--- a/data/anainfo/D0_2015_I1324946.info
+++ b/analyses/pluginD0/D0_2015_I1324946.info
@@ -1,43 +1,43 @@
 Name: D0_2015_I1324946
 Year: 2015
 Summary: D0 measurement of the $\phi^*$ distribution of muon pairs with masses between 30 and 500 GeV in 10.4 fb−1
 Experiment: D0
 Collider: Tevatron
 InspireID: 1324946
 Status: VALIDATED
 Authors:
  - Simone Amoroso <amoroso@cern.ch>
 References:
  - Phys.Rev. D91 (2015) 072002
  - doi:10.1103/PhysRevD.91.072002
  - arXiv:hep-ex/1410.8052
 RunInfo: $Z/\gamma^*$ production with decays to  muons.
 NumEvents: 1000000
 NeedCrossSection: no
 Beams: [p-,p+]
 Energies: [1960]
 NeedCrossSection: True
 Description:
-'D0 measurement of the distribution of the variable $\phi^*$ for muon pairs with masses between 30 and 500 GeV,
-using the complete run II data set collected at the Tevatron proton-antiproton collider.
-This corresponds to an integrated luminosity of 10.4  fb−1 at \sqrt{s}=1.96 TeV.
-The data are corrected for detector effects and presented in bins of dimuon rapidity and mass.'
+  'D0 measurement of the distribution of the variable $\phi^*$ for muon pairs with masses between 30 and 500 GeV,
+  using the complete run II data set collected at the Tevatron proton-antiproton collider.
+  This corresponds to an integrated luminosity of 10.4  fb−1 at \sqrt{s}=1.96 TeV.
+  The data are corrected for detector effects and presented in bins of dimuon rapidity and mass.'
 BibKey: Abazov:2014mza
 BibTeX: '@article{Abazov:2014mza,
       author         = "Abazov, Victor Mukhamedovich and others",
       title          = "{Measurement of the $\phi^*_\eta$ distribution of muon
                         pairs with masses between 30 and 500 GeV in 10.4 fb$^{-1}$
                         of $p\bar{p}$ collisions}",
       collaboration  = "D0",
       journal        = "Phys.Rev.",
       number         = "7",
       volume         = "D91",
       pages          = "072002",
       doi            = "10.1103/PhysRevD.91.072002",
       year           = "2015",
       eprint         = "1410.8052",
       archivePrefix  = "arXiv",
       primaryClass   = "hep-ex",
       reportNumber   = "FERMILAB-PUB-14-430-E",
       SLACcitation   = "%%CITATION = ARXIV:1410.8052;%%",
 }'
diff --git a/data/plotinfo/D0_2015_I1324946.plot b/analyses/pluginD0/D0_2015_I1324946.plot
rename from data/plotinfo/D0_2015_I1324946.plot
rename to analyses/pluginD0/D0_2015_I1324946.plot
diff --git a/data/refdata/D0_2015_I1324946.yoda b/analyses/pluginD0/D0_2015_I1324946.yoda
rename from data/refdata/D0_2015_I1324946.yoda
rename to analyses/pluginD0/D0_2015_I1324946.yoda
diff --git a/src/Analyses/H1_1994_S2919893.cc b/analyses/pluginHERA/H1_1994_S2919893.cc
rename from src/Analyses/H1_1994_S2919893.cc
rename to analyses/pluginHERA/H1_1994_S2919893.cc
diff --git a/data/anainfo/H1_1994_S2919893.info b/analyses/pluginHERA/H1_1994_S2919893.info
rename from data/anainfo/H1_1994_S2919893.info
rename to analyses/pluginHERA/H1_1994_S2919893.info
diff --git a/data/plotinfo/H1_1994_S2919893.plot b/analyses/pluginHERA/H1_1994_S2919893.plot
rename from data/plotinfo/H1_1994_S2919893.plot
rename to analyses/pluginHERA/H1_1994_S2919893.plot
diff --git a/data/refdata/H1_1994_S2919893.yoda b/analyses/pluginHERA/H1_1994_S2919893.yoda
rename from data/refdata/H1_1994_S2919893.yoda
rename to analyses/pluginHERA/H1_1994_S2919893.yoda
diff --git a/src/Analyses/H1_1995_S3167097.cc b/analyses/pluginHERA/H1_1995_S3167097.cc
rename from src/Analyses/H1_1995_S3167097.cc
rename to analyses/pluginHERA/H1_1995_S3167097.cc
diff --git a/data/anainfo/H1_1995_S3167097.info b/analyses/pluginHERA/H1_1995_S3167097.info
rename from data/anainfo/H1_1995_S3167097.info
rename to analyses/pluginHERA/H1_1995_S3167097.info
diff --git a/data/plotinfo/H1_1995_S3167097.plot b/analyses/pluginHERA/H1_1995_S3167097.plot
rename from data/plotinfo/H1_1995_S3167097.plot
rename to analyses/pluginHERA/H1_1995_S3167097.plot
diff --git a/data/refdata/H1_1995_S3167097.yoda b/analyses/pluginHERA/H1_1995_S3167097.yoda
rename from data/refdata/H1_1995_S3167097.yoda
rename to analyses/pluginHERA/H1_1995_S3167097.yoda
diff --git a/src/Analyses/H1_2000_S4129130.cc b/analyses/pluginHERA/H1_2000_S4129130.cc
rename from src/Analyses/H1_2000_S4129130.cc
rename to analyses/pluginHERA/H1_2000_S4129130.cc
diff --git a/data/anainfo/H1_2000_S4129130.info b/analyses/pluginHERA/H1_2000_S4129130.info
rename from data/anainfo/H1_2000_S4129130.info
rename to analyses/pluginHERA/H1_2000_S4129130.info
diff --git a/data/plotinfo/H1_2000_S4129130.plot b/analyses/pluginHERA/H1_2000_S4129130.plot
rename from data/plotinfo/H1_2000_S4129130.plot
rename to analyses/pluginHERA/H1_2000_S4129130.plot
diff --git a/data/refdata/H1_2000_S4129130.yoda b/analyses/pluginHERA/H1_2000_S4129130.yoda
rename from data/refdata/H1_2000_S4129130.yoda
rename to analyses/pluginHERA/H1_2000_S4129130.yoda
diff --git a/src/Analyses/ZEUS_2001_S4815815.cc b/analyses/pluginHERA/ZEUS_2001_S4815815.cc
rename from src/Analyses/ZEUS_2001_S4815815.cc
rename to analyses/pluginHERA/ZEUS_2001_S4815815.cc
--- a/src/Analyses/ZEUS_2001_S4815815.cc
+++ b/analyses/pluginHERA/ZEUS_2001_S4815815.cc
@@ -1,178 +1,184 @@
 // -*- C++ -*-
 #include "Rivet/Analysis.hh"
 #include "Rivet/Projections/Beam.hh"
-#include "Rivet/Projections/IdentifiedFinalState.hh"
+#include "Rivet/Projections/DISKinematics.hh"
 #include "Rivet/Projections/FastJets.hh"
 
 namespace Rivet {
 
 
   /// @brief ZEUS dijet photoproduction study used in the ZEUS jets PDF fit
   ///
   /// This class is a reproduction of the HZTool routine for the ZEUS
   /// dijet photoproduction paper which was used in the ZEUS jets PDF fit.
   ///
   /// @note Cleaning cuts on event pT/sqrt(Et) and y_e are not needed in MC analysis.
   ///
   /// @author Andy Buckley
+  /// @author Ilkka Helenius
   class ZEUS_2001_S4815815 : public Analysis {
   public:
 
     /// Constructor
     DEFAULT_RIVET_ANALYSIS_CTOR(ZEUS_2001_S4815815);
 
     /// @name Analysis methods
     //@{
 
     // Book projections and histograms
     void init() {
 
       /// @todo Acceptance
       FinalState fs;
       declare(FastJets(fs, FastJets::KT, 1.0), "Jets"); //< R=1 checked with Matt Wing
 
-      /// @todo Dress the lepton?
-      IdentifiedFinalState positrons(fs, PID::POSITRON);
-      declare(positrons, "Positrons");
+      // Projections
+      declare(DISLepton(), "Lepton");
 
       // Table 1
       _h_costh[0] = bookHisto1D(1, 1, 1);
       _h_costh[1] = bookHisto1D(1, 1, 2);
       // Table 2
       _h_etjet1[1][0] = bookHisto1D(2, 1, 1);
       _h_etjet1[1][1] = bookHisto1D(3, 1, 1);
       _h_etjet1[1][2] = bookHisto1D(4, 1, 1);
       _h_etjet1[1][3] = bookHisto1D(5, 1, 1);
       _h_etjet1[1][4] = bookHisto1D(6, 1, 1);
       _h_etjet1[1][5] = bookHisto1D(7, 1, 1);
       // Table 3
       _h_etjet1[0][0] = bookHisto1D(8, 1, 1);
       _h_etjet1[0][1] = bookHisto1D(9, 1, 1);
       _h_etjet1[0][2] = bookHisto1D(10, 1, 1);
       _h_etjet1[0][3] = bookHisto1D(11, 1, 1);
       _h_etjet1[0][4] = bookHisto1D(12, 1, 1);
       _h_etjet1[0][5] = bookHisto1D(13, 1, 1);
       // Table 4
       _h_etajet2[1][0] = bookHisto1D(14, 1, 1);
       _h_etajet2[1][1] = bookHisto1D(15, 1, 1);
       _h_etajet2[1][2] = bookHisto1D(16, 1, 1);
       // Table 5
       _h_etajet2[0][0] = bookHisto1D(17, 1, 1);
       _h_etajet2[0][1] = bookHisto1D(18, 1, 1);
       _h_etajet2[0][2] = bookHisto1D(19, 1, 1);
       // Table 6
       _h_xobsy[0] = bookHisto1D(20, 1, 1);
       _h_xobsy[1] = bookHisto1D(21, 1, 1);
       _h_xobsy[2] = bookHisto1D(22, 1, 1);
       _h_xobsy[3] = bookHisto1D(23, 1, 1);
     }
 
 
     // Do the analysis
     void analyze(const Event& event) {
 
       // Determine event orientation, since coord system is for +z = proton direction
       const ParticlePair bs = event.beams();
       if (bs.first.pid() != PID::POSITRON && bs.second.pid() != PID::POSITRON) vetoEvent;
       const Particle& bpositron = (bs.first.pid() == PID::POSITRON ? bs.first : bs.second);
       if (bs.first.pid() != PID::PROTON && bs.second.pid() != PID::PROTON) vetoEvent;
       const Particle& bproton = (bs.first.pid() == PID::PROTON) ? bs.first : bs.second;
       const int orientation = sign(bproton.momentum().pz());
       MSG_DEBUG("Beam proton = " << bproton.mom() << " GeV => orientation = " << orientation);
 
       // Jet selection
       const Jets jets = apply<FastJets>(event, "Jets") \
-        .jets(Cuts::pT > 11*GeV && Cuts::etaIn(-1*orientation, 2.4*orientation), cmpMomByEt);
+        .jets(Cuts::Et > 11*GeV && Cuts::etaIn(-1*orientation, 2.4*orientation), cmpMomByEt);
       MSG_DEBUG("Jet multiplicity = " << jets.size());
       if (jets.size() < 2) vetoEvent;
       const Jet& j1 = jets[0];
       const Jet& j2 = jets[1];
-      if (j1.pT() < 14*GeV) vetoEvent;
+      if (j1.Et() < 14*GeV) vetoEvent;
 
       // eta and cos(theta*) computation
       const double eta1 = orientation*j1.eta(), eta2 = orientation*j2.eta();
       const double etabar = (eta1 + eta2)/2;
       const double etadiff = eta1 - eta2;
       const double costhetastar = tanh(etadiff/2);
 
-      // Get the scattered positron
-      const Particles positrons = apply<FinalState>(event, "Positrons").particlesByPt();
-      if (positrons.empty()) vetoEvent;
-      const Particle& positron = positrons.front();
-
-      // Calculate the photon 4-vector
-      const FourMomentum qphoton = positron.mom() - bpositron.mom();
+      // Calculate the photon 4-vector from the incoming and outgoing lepton.
+      const DISLepton& leptons      = apply<DISLepton>(event,"Lepton");
+      const FourMomentum qleptonIn  = leptons.in();
+      const FourMomentum qleptonOut = leptons.out();
+      const FourMomentum qphoton    = qleptonIn - qleptonOut;
 
       // Computation and cut on inelasticity
       const double inelasticity = dot(bproton.mom(), qphoton) / dot(bproton.mom(), bpositron.mom());
       if (!inRange(inelasticity, 0.2, 0.85)) vetoEvent;
 
       // Computation of x_y^obs
       // (I assume Ee is the lab frame positron momentum, not in proton rest frame cf. the ambiguous phrase in the paper)
       const double xyobs = (j1.Et() * exp(-eta1) + j2.Et() * exp(-eta2)) / (2*inelasticity*bpositron.E());
       const size_t i_xyobs = (xyobs < 0.75) ? 0 : 1;
 
+      // Calculate the invariant mass of the dijet as in the paper
+      const double mjj = sqrt( 2.*j1.Et()*j2.Et()*( cosh(j1.eta() - j2.eta()) - cos(j1.phi() - j2.phi()) ) );
+
       // Fill histograms
       const double weight = event.weight();
       // T1
-      if ((j1.mom()+j2.mom()).mass() > 42*GeV && inRange(etabar, 0.1, 0.3))
+      if (mjj > 42*GeV && inRange(etabar, 0.1, 1.3))
         _h_costh[i_xyobs]->fill(abs(costhetastar), weight);
-      // T2, T3
-      if (inRange(eta1, -1, 0) && inRange(eta2, -1, 0))
-        _h_etjet1[i_xyobs][0]->fill(j1.Et()/GeV, weight);
-      else if (inRange(eta1, 0, 1) && inRange(eta2, -1, 0))
-        _h_etjet1[i_xyobs][1]->fill(j1.Et()/GeV, weight);
-      else if (inRange(eta1, 0, 1) && inRange(eta2, 0, 1))
-        _h_etjet1[i_xyobs][2]->fill(j1.Et()/GeV, weight);
-      else if (inRange(eta1, 1, 2.4) && inRange(eta2, -1, 0))
-        _h_etjet1[i_xyobs][3]->fill(j1.Et()/GeV, weight);
-      else if (inRange(eta1, 1, 2.4) && inRange(eta2, 0, 1))
-        _h_etjet1[i_xyobs][4]->fill(j1.Et()/GeV, weight);
-      else if (inRange(eta1, 1, 2.4) && inRange(eta2, 1, 2.4))
-        _h_etjet1[i_xyobs][5]->fill(j1.Et()/GeV, weight);
-      // T4, T5
-      if (inRange(eta1, -1, 0))
-        _h_etajet2[i_xyobs][0]->fill(eta2, weight);
-      else if (inRange(eta1, 0, 1))
-        _h_etajet2[i_xyobs][1]->fill(eta2, weight);
-      else if (inRange(eta1, 1, 2.4))
-        _h_etajet2[i_xyobs][2]->fill(eta2, weight);
+
+      // T2, T3: Symmetrize eta selection, each event contribute twice to the cross section
+      for (size_t isel = 0; isel < 2; ++isel) {
+        double etaJet1 = (isel == 0) ? orientation*j1.eta() : orientation*j2.eta();
+        double etaJet2 = (isel == 0) ? orientation*j2.eta() : orientation*j1.eta();
+        if (inRange(etaJet1, -1, 0) && inRange(etaJet2, -1, 0))
+          _h_etjet1[i_xyobs][0]->fill(j1.Et()/GeV, weight);
+        else if (inRange(etaJet1, 0, 1) && inRange(etaJet2, -1, 0))
+          _h_etjet1[i_xyobs][1]->fill(j1.Et()/GeV, weight);
+        else if (inRange(etaJet1, 0, 1) && inRange(etaJet2, 0, 1))
+          _h_etjet1[i_xyobs][2]->fill(j1.Et()/GeV, weight);
+        else if (inRange(etaJet1, 1, 2.4) && inRange(etaJet2, -1, 0))
+          _h_etjet1[i_xyobs][3]->fill(j1.Et()/GeV, weight);
+        else if (inRange(etaJet1, 1, 2.4) && inRange(etaJet2, 0, 1))
+          _h_etjet1[i_xyobs][4]->fill(j1.Et()/GeV, weight);
+        else if (inRange(etaJet1, 1, 2.4) && inRange(etaJet2, 1, 2.4))
+          _h_etjet1[i_xyobs][5]->fill(j1.Et()/GeV, weight);
+        // T4, T5
+        if (inRange(etaJet1, -1, 0))
+          _h_etajet2[i_xyobs][0]->fill(etaJet2, weight);
+        else if (inRange(etaJet1, 0, 1))
+          _h_etajet2[i_xyobs][1]->fill(etaJet2, weight);
+        else if (inRange(etaJet1, 1, 2.4))
+          _h_etajet2[i_xyobs][2]->fill(etaJet2, weight);
+      }
       // T6
       if (inRange(j1.Et()/GeV, 14, 17))
         _h_xobsy[0]->fill(xyobs, weight);
       else if (inRange(j1.Et()/GeV, 17, 25))
         _h_xobsy[1]->fill(xyobs, weight);
       else if (inRange(j1.Et()/GeV, 25, 35))
         _h_xobsy[2]->fill(xyobs, weight);
       else if (inRange(j1.Et()/GeV, 35, 90))
         _h_xobsy[3]->fill(xyobs, weight);
     }
 
 
     // Finalize
     void finalize() {
       const double sf = crossSection()/picobarn/sumOfWeights();
       for (size_t ix = 0; ix < 2; ++ix) {
         scale(_h_costh[ix], sf);
         for (auto& h : _h_etjet1[ix]) scale(h, sf);
         for (auto& h : _h_etajet2[ix]) scale(h, sf);
       }
       for (auto& h : _h_xobsy) scale(h, sf);
     }
 
     //@}
 
 
   private:
 
     /// @name Histograms
     //@{
     Histo1DPtr _h_costh[2], _h_etjet1[2][6], _h_etajet2[2][3], _h_xobsy[4];
     //@}
 
   };
 
 
   DECLARE_RIVET_PLUGIN(ZEUS_2001_S4815815);
 
 }
diff --git a/data/anainfo/ZEUS_2001_S4815815.info b/analyses/pluginHERA/ZEUS_2001_S4815815.info
rename from data/anainfo/ZEUS_2001_S4815815.info
rename to analyses/pluginHERA/ZEUS_2001_S4815815.info
--- a/data/anainfo/ZEUS_2001_S4815815.info
+++ b/analyses/pluginHERA/ZEUS_2001_S4815815.info
@@ -1,52 +1,53 @@
 Name: ZEUS_2001_S4815815
 Year: 2001
 Summary: Dijet photoproduction analysis
 Experiment: ZEUS
 Collider: HERA Run I
 SpiresID: 4815815
 InspireID: 568665
-Status: UNVALIDATED
+Status: VALIDATED
 Authors:
  - Andy Buckley <andy.buckley@cern.ch>
+ - Ilkka Helenius <ilkka.helenius@uni-tuebingen.de>
  - Jon Butterworth <jmb@hep.ucl.ac.uk>
 References:
  - Eur.Phys.J.C23:615,2002
  - DESY 01/220
  - hep-ex/0112029
 RunInfo:
   820 GeV protons colliding with 27.5 GeV positrons;
   Direct and resolved photoproduction of dijets;
   Leading jet $pT > 14$ GeV, second jet $pT > 11$ GeV;
   Jet pseudorapidity $-1 < |\eta| < 2.4$
 NumEvents: 1000000
 Beams: [p+, e+]
 Energies: [[820, 27.5]]
 PtCuts: [0]
 Description:
   ZEUS photoproduction of jets from proton--positron collisions at beam
   energies of 820~GeV on 27.5~GeV. Photoproduction can either be direct,
   in which case the photon interacts directly with the parton, or
   resolved, in which case the photon acts as a source of quarks and
   gluons. A photon-proton centre of mass energy of between 134~GeV and
   227~GeV is probed, with values of $x_P$, the fractional momentum of the
   partons inside the proton, predominantly in the region between 0.01
   and 0.1. The fractional momentum of the partons from the photon,
   $x_\gamma$, is in the region 0.1 to 1. Jets are reconstructed in the
   range $-1 < |\eta| < 2.4$ using the $k_\perp$ algorithm with an $R$
   parameter of 1.0. The minimum \pT of the leading jet should be greater
   than 14~GeV, and at least one other jet must have $\pT > 11$~GeV.
 BibKey: Chekanov:2001bw
 BibTeX: '@Article{Chekanov:2001bw,
      author    = "Chekanov, S. and others",
  collaboration = "ZEUS",
      title     = "{Dijet photoproduction at HERA and the structure of the
                   photon}",
      journal   = "Eur. Phys. J.",
      volume    = "C23",
      year      = "2002",
      pages     = "615-631",
      eprint    = "hep-ex/0112029",
      archivePrefix = "arXiv",
      doi       = "10.1007/s100520200936",
      SLACcitation  = "%%CITATION = HEP-EX/0112029;%%"
 }'
diff --git a/data/plotinfo/ZEUS_2001_S4815815.plot b/analyses/pluginHERA/ZEUS_2001_S4815815.plot
rename from data/plotinfo/ZEUS_2001_S4815815.plot
rename to analyses/pluginHERA/ZEUS_2001_S4815815.plot
--- a/data/plotinfo/ZEUS_2001_S4815815.plot
+++ b/analyses/pluginHERA/ZEUS_2001_S4815815.plot
@@ -1,6 +1,249 @@
-# BEGIN PLOT /ZEUS_2001_S4815815/JetET1
-Title=Jet transverse energy
-XLabel=$E_{\perp}$
-YLabel=Events
+# BEGIN PLOT /ZEUS_2001_S4815815/d01-x01-y01
+Title=
+XLabel=$|\cos(\theta^*)|$
+YLabel=$\mathrm{d}\sigma / \mathrm{d}|\cos(\theta^*)|$ [pb]
+LogY=0
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} < 0.75$
+LegendXPos=0.1
+LegendYPos=0.95
 # END PLOT
 
+# BEGIN PLOT /ZEUS_2001_S4815815/d01-x01-y02
+Title=
+XLabel=$|\cos(\theta^*)|$
+YLabel=$\mathrm{d}\sigma / \mathrm{d}|\cos(\theta^*)|$ [pb]
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} > 0.75$
+LogY=0
+LegendXPos=0.1
+LegendYPos=0.95
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d02-x01-y01
+Title=
+XLabel=$E_{\mathrm{T}}^{\mathrm{jet1}}$ [GeV]
+YLabel=$\mathrm{d}\sigma / \mathrm{d}E_{\mathrm{T}}^{\mathrm{jet1}}$ [pb/GeV]
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} > 0.75$\\$-1<\eta^{\mathrm{jet}1}<0$\\$-1<\eta^{\mathrm{jet}2}<0$
+LegendXPos=0.6
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d03-x01-y01
+Title=
+XLabel=$E_{\mathrm{T}}^{\mathrm{jet1}}$ [GeV]
+YLabel=$\mathrm{d}\sigma / \mathrm{d}E_{\mathrm{T}}^{\mathrm{jet1}}$ [pb/GeV]
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} > 0.75$\\$0<\eta^{\mathrm{jet}1}<1$\\$-1<\eta^{\mathrm{jet}2}<0$
+LegendXPos=0.6
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d04-x01-y01
+Title=
+XLabel=$E_{\mathrm{T}}^{\mathrm{jet1}}$ [GeV]
+YLabel=$\mathrm{d}\sigma / \mathrm{d}E_{\mathrm{T}}^{\mathrm{jet1}}$ [pb/GeV]
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} > 0.75$\\$0<\eta^{\mathrm{jet}1}<1$\\$0<\eta^{\mathrm{jet}2}<1$
+LegendXPos=0.6
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d05-x01-y01
+Title=
+XLabel=$E_{\mathrm{T}}^{\mathrm{jet1}}$ [GeV]
+YLabel=$\mathrm{d}\sigma / \mathrm{d}E_{\mathrm{T}}^{\mathrm{jet1}}$ [pb/GeV]
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} > 0.75$\\$1<\eta^{\mathrm{jet}1}<2.4$\\$-1<\eta^{\mathrm{jet}2}<0$
+LegendXPos=0.6
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d06-x01-y01
+Title=
+XLabel=$E_{\mathrm{T}}^{\mathrm{jet1}}$ [GeV]
+YLabel=$\mathrm{d}\sigma / \mathrm{d}E_{\mathrm{T}}^{\mathrm{jet1}}$ [pb/GeV]
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} > 0.75$\\$1<\eta^{\mathrm{jet}1}<2.4$\\$0<\eta^{\mathrm{jet}2}<1$
+LegendXPos=0.6
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d07-x01-y01
+Title=
+XLabel=$E_{\mathrm{T}}^{\mathrm{jet1}}$ [GeV]
+YLabel=$\mathrm{d}\sigma / \mathrm{d}E_{\mathrm{T}}^{\mathrm{jet1}}$ [pb/GeV]
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} > 0.75$\\$1<\eta^{\mathrm{jet}1}<2.4$\\$1<\eta^{\mathrm{jet}2}<2.4$
+LegendXPos=0.6
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d08-x01-y01
+Title=
+XLabel=$E_{\mathrm{T}}^{\mathrm{jet1}}$ [GeV]
+YLabel=$\mathrm{d}\sigma / \mathrm{d}E_{\mathrm{T}}^{\mathrm{jet1}}$ [pb/GeV]
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} < 0.75$\\$-1<\eta^{\mathrm{jet}1}<0$\\$-1<\eta^{\mathrm{jet}2}<0$
+LegendXPos=0.6
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d09-x01-y01
+Title=
+XLabel=$E_{\mathrm{T}}^{\mathrm{jet1}}$ [GeV]
+YLabel=$\mathrm{d}\sigma / \mathrm{d}E_{\mathrm{T}}^{\mathrm{jet1}}$ [pb/GeV]
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} < 0.75$\\$0<\eta^{\mathrm{jet}1}<1$\\$-1<\eta^{\mathrm{jet}2}<0$
+LegendXPos=0.6
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d10-x01-y01
+Title=
+XLabel=$E_{\mathrm{T}}^{\mathrm{jet1}}$ [GeV]
+YLabel=$\mathrm{d}\sigma / \mathrm{d}E_{\mathrm{T}}^{\mathrm{jet1}}$ [pb/GeV]
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} < 0.75$\\$0<\eta^{\mathrm{jet}1}<1$\\$0<\eta^{\mathrm{jet}2}<1$
+LegendXPos=0.6
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d11-x01-y01
+Title=
+XLabel=$E_{\mathrm{T}}^{\mathrm{jet1}}$ [GeV]
+YLabel=$\mathrm{d}\sigma / \mathrm{d}E_{\mathrm{T}}^{\mathrm{jet1}}$ [pb/GeV]
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} < 0.75$\\$1<\eta^{\mathrm{jet}1}<2.4$\\$-1<\eta^{\mathrm{jet}2}<0$
+LegendXPos=0.6
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d12-x01-y01
+Title=
+XLabel=$E_{\mathrm{T}}^{\mathrm{jet1}}$ [GeV]
+YLabel=$\mathrm{d}\sigma / \mathrm{d}E_{\mathrm{T}}^{\mathrm{jet1}}$ [pb/GeV]
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} < 0.75$\\$1<\eta^{\mathrm{jet}1}<2.4$\\$0<\eta^{\mathrm{jet}2}<1$
+LegendXPos=0.6
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d13-x01-y01
+Title=
+XLabel=$E_{\mathrm{T}}^{\mathrm{jet1}}$ [GeV]
+YLabel=$\mathrm{d}\sigma / \mathrm{d}E_{\mathrm{T}}^{\mathrm{jet1}}$ [pb/GeV]
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} < 0.75$\\$1<\eta^{\mathrm{jet}1}<2.4$\\$1<\eta^{\mathrm{jet}2}<2.4$
+LegendXPos=0.6
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d14-x01-y01
+Title=
+XLabel=$\eta^{\mathrm{jet2}}$
+YLabel=$\mathrm{d}\sigma / \mathrm{d}\eta^{\mathrm{jet2}}$ [pb]
+LogY=0
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} > 0.75$\\$-1<\eta^{\mathrm{jet}1}<0$
+LegendXPos=0.65
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d15-x01-y01
+Title=
+XLabel=$\eta^{\mathrm{jet2}}$
+YLabel=$\mathrm{d}\sigma / \mathrm{d}\eta^{\mathrm{jet2}}$ [pb]
+LogY=0
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} > 0.75$\\$0<\eta^{\mathrm{jet}1}<1$
+LegendXPos=0.65
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d16-x01-y01
+Title=
+XLabel=$\eta^{\mathrm{jet2}}$
+YLabel=$\mathrm{d}\sigma / \mathrm{d}\eta^{\mathrm{jet2}}$ [pb]
+LogY=0
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} > 0.75$\\$1<\eta^{\mathrm{jet}1}<2.4$
+LegendXPos=0.65
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d17-x01-y01
+Title=
+XLabel=$\eta^{\mathrm{jet2}}$
+YLabel=$\mathrm{d}\sigma / \mathrm{d}\eta^{\mathrm{jet2}}$ [pb]
+LogY=0
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} < 0.75$\\$-1<\eta^{\mathrm{jet}1}<0$
+LegendXPos=0.05
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d18-x01-y01
+Title=
+XLabel=$\eta^{\mathrm{jet2}}$
+YLabel=$\mathrm{d}\sigma / \mathrm{d}\eta^{\mathrm{jet2}}$ [pb]
+LogY=0
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} < 0.75$\\$0<\eta^{\mathrm{jet}1}<1$
+LegendXPos=0.05
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d19-x01-y01
+Title=
+XLabel=$\eta^{\mathrm{jet2}}$
+YLabel=$\mathrm{d}\sigma / \mathrm{d}\eta^{\mathrm{jet2}}$ [pb]
+LogY=0
+CustomLegend=$x_{\gamma}^{\mathrm{obs}} < 0.75$\\$1<\eta^{\mathrm{jet}1}<2.4$
+LegendXPos=0.05
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d20-x01-y01
+Title=
+XLabel=$x_{\gamma}^{\mathrm{obs}}$
+YLabel=$\mathrm{d}\sigma / \mathrm{d}x_{\gamma}^{\mathrm{obs}}$ [pb]
+LogY=0
+CustomLegend=$14<E_{\mathrm{T}}^{\mathrm{jet1}}<17$ GeV
+LegendXPos=0.05
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d21-x01-y01
+Title=
+XLabel=$x_{\gamma}^{\mathrm{obs}}$
+YLabel=$\mathrm{d}\sigma / \mathrm{d}x_{\gamma}^{\mathrm{obs}}$ [pb]
+LogY=0
+CustomLegend=$17<E_{\mathrm{T}}^{\mathrm{jet1}}<25$ GeV
+LegendXPos=0.05
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d22-x01-y01
+Title=
+XLabel=$x_{\gamma}^{\mathrm{obs}}$
+YLabel=$\mathrm{d}\sigma / \mathrm{d}x_{\gamma}^{\mathrm{obs}}$ [pb]
+LogY=0
+CustomLegend=$25<E_{\mathrm{T}}^{\mathrm{jet1}}<35$ GeV
+LegendXPos=0.05
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
+
+# BEGIN PLOT /ZEUS_2001_S4815815/d23-x01-y01
+Title=
+XLabel=$x_{\gamma}^{\mathrm{obs}}$
+YLabel=$\mathrm{d}\sigma / \mathrm{d}x_{\gamma}^{\mathrm{obs}}$ [pb]
+LogY=0
+CustomLegend=$35<E_{\mathrm{T}}^{\mathrm{jet1}}<90$ GeV
+LegendXPos=0.05
+LegendYPos=0.95
+YLabelSep=5.5
+# END PLOT
diff --git a/data/refdata/ZEUS_2001_S4815815.yoda b/analyses/pluginHERA/ZEUS_2001_S4815815.yoda
rename from data/refdata/ZEUS_2001_S4815815.yoda
rename to analyses/pluginHERA/ZEUS_2001_S4815815.yoda
diff --git a/analyses/pluginLEP/ALEPH_1991_S2435284.cc b/analyses/pluginLEP/ALEPH_1991_S2435284.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/ALEPH_1991_S2435284.cc
@@ -0,0 +1,66 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+
+namespace Rivet {
+
+
+  /// @brief ALEPH LEP1 charged multiplicity in hadronic Z decay
+  /// @author Andy Buckley
+  class ALEPH_1991_S2435284 : public Analysis {
+  public:
+
+    /// Constructor.
+    ALEPH_1991_S2435284()
+      : Analysis("ALEPH_1991_S2435284")
+    {
+    }
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book projections and histogram
+    void init() {
+      const ChargedFinalState cfs;
+      declare(cfs, "CFS");
+
+      _histChTot = bookHisto1D(1, 1, 1);
+      _histAver  = bookHisto1D(2, 1, 1);
+    }
+
+
+    /// Do the analysis
+    void analyze(const Event& event) {
+      const FinalState& cfs = apply<FinalState>(event, "CFS");
+      MSG_DEBUG("Total charged multiplicity = " << cfs.size());
+      _histChTot->fill(cfs.size(), event.weight());
+      _histAver->fill(_histAver->bin(0).xMid(),cfs.size()*event.weight());
+    }
+
+
+    /// Normalize the histogram
+    void finalize() {
+      scale(_histChTot, 2.0/sumOfWeights()); // same as in ALEPH 1996
+      scale(_histAver , 1./sumOfWeights());
+    }
+
+    //@}
+
+
+  private:
+
+    /// @name Histograms
+    //@{
+    Histo1DPtr _histChTot;
+    Histo1DPtr _histAver;
+    //@}
+
+  };
+
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(ALEPH_1991_S2435284);
+
+}
diff --git a/data/anainfo/ALEPH_1991_S2435284.info b/analyses/pluginLEP/ALEPH_1991_S2435284.info
rename from data/anainfo/ALEPH_1991_S2435284.info
rename to analyses/pluginLEP/ALEPH_1991_S2435284.info
diff --git a/analyses/pluginLEP/ALEPH_1991_S2435284.plot b/analyses/pluginLEP/ALEPH_1991_S2435284.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/ALEPH_1991_S2435284.plot
@@ -0,0 +1,11 @@
+# BEGIN PLOT /ALEPH_1991_S2435284/d01-x01-y01
+Title=Total charged multiplicity
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+
+# BEGIN PLOT /ALEPH_1991_S2435284/d02-x01-y01
+Title=Mean charged multiplicity
+# END PLOT
diff --git a/data/refdata/ALEPH_1991_S2435284.yoda b/analyses/pluginLEP/ALEPH_1991_S2435284.yoda
rename from data/refdata/ALEPH_1991_S2435284.yoda
rename to analyses/pluginLEP/ALEPH_1991_S2435284.yoda
diff --git a/src/Analyses/ALEPH_1995_I382179.cc b/analyses/pluginLEP/ALEPH_1995_I382179.cc
rename from src/Analyses/ALEPH_1995_I382179.cc
rename to analyses/pluginLEP/ALEPH_1995_I382179.cc
diff --git a/data/anainfo/ALEPH_1995_I382179.info b/analyses/pluginLEP/ALEPH_1995_I382179.info
rename from data/anainfo/ALEPH_1995_I382179.info
rename to analyses/pluginLEP/ALEPH_1995_I382179.info
diff --git a/data/plotinfo/ALEPH_1995_I382179.plot b/analyses/pluginLEP/ALEPH_1995_I382179.plot
rename from data/plotinfo/ALEPH_1995_I382179.plot
rename to analyses/pluginLEP/ALEPH_1995_I382179.plot
diff --git a/data/refdata/ALEPH_1995_I382179.yoda b/analyses/pluginLEP/ALEPH_1995_I382179.yoda
rename from data/refdata/ALEPH_1995_I382179.yoda
rename to analyses/pluginLEP/ALEPH_1995_I382179.yoda
diff --git a/src/Analyses/ALEPH_1996_S3196992.cc b/analyses/pluginLEP/ALEPH_1996_S3196992.cc
rename from src/Analyses/ALEPH_1996_S3196992.cc
rename to analyses/pluginLEP/ALEPH_1996_S3196992.cc
diff --git a/data/anainfo/ALEPH_1996_S3196992.info b/analyses/pluginLEP/ALEPH_1996_S3196992.info
rename from data/anainfo/ALEPH_1996_S3196992.info
rename to analyses/pluginLEP/ALEPH_1996_S3196992.info
diff --git a/data/plotinfo/ALEPH_1996_S3196992.plot b/analyses/pluginLEP/ALEPH_1996_S3196992.plot
rename from data/plotinfo/ALEPH_1996_S3196992.plot
rename to analyses/pluginLEP/ALEPH_1996_S3196992.plot
diff --git a/data/refdata/ALEPH_1996_S3196992.yoda b/analyses/pluginLEP/ALEPH_1996_S3196992.yoda
rename from data/refdata/ALEPH_1996_S3196992.yoda
rename to analyses/pluginLEP/ALEPH_1996_S3196992.yoda
diff --git a/src/Analyses/ALEPH_1996_S3486095.cc b/analyses/pluginLEP/ALEPH_1996_S3486095.cc
rename from src/Analyses/ALEPH_1996_S3486095.cc
rename to analyses/pluginLEP/ALEPH_1996_S3486095.cc
diff --git a/data/anainfo/ALEPH_1996_S3486095.info b/analyses/pluginLEP/ALEPH_1996_S3486095.info
rename from data/anainfo/ALEPH_1996_S3486095.info
rename to analyses/pluginLEP/ALEPH_1996_S3486095.info
diff --git a/data/plotinfo/ALEPH_1996_S3486095.plot b/analyses/pluginLEP/ALEPH_1996_S3486095.plot
rename from data/plotinfo/ALEPH_1996_S3486095.plot
rename to analyses/pluginLEP/ALEPH_1996_S3486095.plot
diff --git a/data/refdata/ALEPH_1996_S3486095.yoda b/analyses/pluginLEP/ALEPH_1996_S3486095.yoda
rename from data/refdata/ALEPH_1996_S3486095.yoda
rename to analyses/pluginLEP/ALEPH_1996_S3486095.yoda
diff --git a/src/Analyses/ALEPH_1999_S4193598.cc b/analyses/pluginLEP/ALEPH_1999_S4193598.cc
rename from src/Analyses/ALEPH_1999_S4193598.cc
rename to analyses/pluginLEP/ALEPH_1999_S4193598.cc
--- a/src/Analyses/ALEPH_1999_S4193598.cc
+++ b/analyses/pluginLEP/ALEPH_1999_S4193598.cc
@@ -1,96 +1,78 @@
 // -*- C++ -*-
 #include "Rivet/Analysis.hh"
 #include "Rivet/Projections/Beam.hh"
 #include "Rivet/Projections/ChargedFinalState.hh"
 #include "Rivet/Projections/UnstableFinalState.hh"
 
 namespace Rivet {
 
   class ALEPH_1999_S4193598 : public Analysis {
   public:
 
     /// @name Constructors etc.
     //@{
 
     /// Constructor
     ALEPH_1999_S4193598()
       : Analysis("ALEPH_1999_S4193598")
-    {
-      _sumWpassed = 0.0;
-    }
+    { }
 
     //@}
 
 
   public:
 
     /// Book histograms and initialise projections before the run
     void init() {
       declare(Beam(), "Beams");
       declare(UnstableFinalState(), "UFS");
       declare(ChargedFinalState(), "CFS");
 
       _h_Xe_Ds = bookHisto1D(1, 1, 1);
     }
 
 
     /// Perform the per-event analysis
     void analyze(const Event& event) {
       const double weight = event.weight();
 
       // Trigger condition
       const ChargedFinalState& cfs = apply<ChargedFinalState>(event, "CFS");
       if (cfs.size() < 5) vetoEvent;
 
-      _sumWpassed += weight;
-
       const UnstableFinalState& ufs = apply<UnstableFinalState>(event, "UFS");
 
       // Get beams and average beam momentum
       const ParticlePair& beams = apply<Beam>(event, "Beams").beams();
       const double meanBeamMom = ( beams.first.p3().mod() +
                                    beams.second.p3().mod() ) / 2.0/GeV;
 
-      foreach (const Particle& p, ufs.particles()) {
-        const PdgId pid = p.abspid();
-
-        switch (pid) {
-        case 413:
-
-          // Accept all D*+- decays. Normalisation to D0 + pi+- in finalize()
-
+      // Accept all D*+- decays. Normalisation to data in finalize
+      for (const Particle& p : filter_select(ufs.particles(), Cuts::abspid==PID::DSTARPLUS)) {
           // Scaled energy.
           const double energy = p.E()/GeV;
           const double scaledEnergy = energy/meanBeamMom;
           _h_Xe_Ds->fill(scaledEnergy, weight);
-
-          break;
-        }
       }
     }
 
 
     /// Normalise histograms etc., after the run
     void finalize() {
 
-      // Scale to the product of branching fractions D0*->D0 pi  x  D0->Kpi(charged)
-      // Numbers are taken from PDG 2010
-      scale(_h_Xe_Ds, 0.677*0.0389/_sumWpassed);
-
+      // Normalize to data integral
+      normalize(_h_Xe_Ds, 0.00498);
     }
 
   private:
-    double _sumWpassed;
-
-  private:
 
     Histo1DPtr _h_Xe_Ds;
 
   };
 
 
 
   // The hook for the plugin system
   DECLARE_RIVET_PLUGIN(ALEPH_1999_S4193598);
 
 }
diff --git a/data/anainfo/ALEPH_1999_S4193598.info b/analyses/pluginLEP/ALEPH_1999_S4193598.info
rename from data/anainfo/ALEPH_1999_S4193598.info
rename to analyses/pluginLEP/ALEPH_1999_S4193598.info
diff --git a/data/plotinfo/ALEPH_1999_S4193598.plot b/analyses/pluginLEP/ALEPH_1999_S4193598.plot
rename from data/plotinfo/ALEPH_1999_S4193598.plot
rename to analyses/pluginLEP/ALEPH_1999_S4193598.plot
diff --git a/data/refdata/ALEPH_1999_S4193598.yoda b/analyses/pluginLEP/ALEPH_1999_S4193598.yoda
rename from data/refdata/ALEPH_1999_S4193598.yoda
rename to analyses/pluginLEP/ALEPH_1999_S4193598.yoda
diff --git a/src/Analyses/ALEPH_2001_S4656318.cc b/analyses/pluginLEP/ALEPH_2001_S4656318.cc
rename from src/Analyses/ALEPH_2001_S4656318.cc
rename to analyses/pluginLEP/ALEPH_2001_S4656318.cc
--- a/src/Analyses/ALEPH_2001_S4656318.cc
+++ b/analyses/pluginLEP/ALEPH_2001_S4656318.cc
@@ -1,128 +1,123 @@
 // -*- C++ -*-
 #include "Rivet/Analysis.hh"
 #include "Rivet/Projections/Beam.hh"
 #include "Rivet/Projections/FinalState.hh"
 #include "Rivet/Projections/ChargedFinalState.hh"
 
-
-/// @todo Use inline PID functions instead
-#define IS_PARTON_PDGID(id) ( abs(id) <= 100 && abs(id) != 22 && (abs(id) < 11 || abs(id) > 18) )
-#define IS_BHADRON_PDGID(id) ( ((abs(id)/100)%10 == 5) || (abs(id) >= 5000 && abs(id) <= 5999) )
-
 namespace Rivet {
 
 
   /// @brief DELPHI b-fragmentation measurement
   /// @author Hendrik Hoeth
   class ALEPH_2001_S4656318 : public Analysis {
   public:
 
     /// Constructor
    ALEPH_2001_S4656318()
       : Analysis("ALEPH_2001_S4656318")
     {
     }
 
 
     /// @name Analysis methods
     //@{
 
     /// Book projections and histograms
     void init() {
       declare(Beam(), "Beams");
       declare(ChargedFinalState(), "FS");
       _histXbweak     = bookHisto1D(1, 1, 1);
       _histXbprim     = bookHisto1D(1, 1, 2);
       _histMeanXbweak = bookProfile1D(7, 1, 1);
       _histMeanXbprim = bookProfile1D(7, 1, 2);
     }
 
 
     void analyze(const Event& e) {
       const FinalState& fs = apply<FinalState>(e, "FS");
       const size_t numParticles = fs.particles().size();
 
       // Even if we only generate hadronic events, we still need a cut on numCharged >= 2.
       if (numParticles < 2) {
         MSG_DEBUG("Failed ncharged cut");
         vetoEvent;
       }
       MSG_DEBUG("Passed ncharged cut");
 
       // Get event weight for histo filling
       const double weight = e.weight();
 
       // Get beams and average beam momentum
       const ParticlePair& beams = apply<Beam>(e, "Beams").beams();
       const double meanBeamMom = ( beams.first.p3().mod() +
                                    beams.second.p3().mod() ) / 2.0;
       MSG_DEBUG("Avg beam momentum = " << meanBeamMom);
 
 
       foreach (const GenParticle* p, particles(e.genEvent())) {
         const GenVertex* pv = p->production_vertex();
         const GenVertex* dv = p->end_vertex();
-        if (IS_BHADRON_PDGID(p->pdg_id())) {
+        if (PID::isBottomHadron(p->pdg_id())) {
           const double xp = p->momentum().e()/meanBeamMom;
 
           // If the B-hadron has a parton as parent, call it primary B-hadron:
           if (pv) {
             bool is_primary = false;
             for (GenVertex::particles_in_const_iterator pp = pv->particles_in_const_begin(); pp != pv->particles_in_const_end() ; ++pp) {
-              if (IS_PARTON_PDGID((*pp)->pdg_id())) is_primary = true;
+              if (PID::isParton((*pp)->pdg_id())) is_primary = true;
             }
             if (is_primary) {
               _histXbprim->fill(xp, weight);
               _histMeanXbprim->fill(_histMeanXbprim->bin(0).xMid(), xp, weight);
             }
           }
 
           // If the B-hadron has no B-hadron as a child, it decayed weakly:
           if (dv) {
             bool is_weak = true;
             for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin() ;
                  pp != dv->particles_out_const_end() ; ++pp) {
-              if (IS_BHADRON_PDGID((*pp)->pdg_id())) {
+              if (PID::isBottomHadron((*pp)->pdg_id())) {
                 is_weak = false;
               }
             }
             if (is_weak) {
               _histXbweak->fill(xp, weight);
               _histMeanXbweak->fill(_histMeanXbweak->bin(0).xMid(), xp, weight);
             }
           }
 
         }
       }
     }
 
 
     // Finalize
     void finalize() {
       normalize(_histXbprim);
       normalize(_histXbweak);
     }
 
 
   private:
 
     /// Store the weighted sums of numbers of charged / charged+neutral
     /// particles - used to calculate average number of particles for the
     /// inclusive single particle distributions' normalisations.
 
     Histo1DPtr _histXbprim;
     Histo1DPtr _histXbweak;
 
     Profile1DPtr _histMeanXbprim;
     Profile1DPtr _histMeanXbweak;
 
     //@}
 
   };
 
 
 
   // The hook for the plugin system
   DECLARE_RIVET_PLUGIN(ALEPH_2001_S4656318);
 
 }
diff --git a/data/anainfo/ALEPH_2001_S4656318.info b/analyses/pluginLEP/ALEPH_2001_S4656318.info
rename from data/anainfo/ALEPH_2001_S4656318.info
rename to analyses/pluginLEP/ALEPH_2001_S4656318.info
diff --git a/data/plotinfo/ALEPH_2001_S4656318.plot b/analyses/pluginLEP/ALEPH_2001_S4656318.plot
rename from data/plotinfo/ALEPH_2001_S4656318.plot
rename to analyses/pluginLEP/ALEPH_2001_S4656318.plot
diff --git a/data/refdata/ALEPH_2001_S4656318.yoda b/analyses/pluginLEP/ALEPH_2001_S4656318.yoda
rename from data/refdata/ALEPH_2001_S4656318.yoda
rename to analyses/pluginLEP/ALEPH_2001_S4656318.yoda
diff --git a/src/Analyses/ALEPH_2002_S4823664.cc b/analyses/pluginLEP/ALEPH_2002_S4823664.cc
rename from src/Analyses/ALEPH_2002_S4823664.cc
rename to analyses/pluginLEP/ALEPH_2002_S4823664.cc
diff --git a/data/anainfo/ALEPH_2002_S4823664.info b/analyses/pluginLEP/ALEPH_2002_S4823664.info
rename from data/anainfo/ALEPH_2002_S4823664.info
rename to analyses/pluginLEP/ALEPH_2002_S4823664.info
diff --git a/data/plotinfo/ALEPH_2002_S4823664.plot b/analyses/pluginLEP/ALEPH_2002_S4823664.plot
rename from data/plotinfo/ALEPH_2002_S4823664.plot
rename to analyses/pluginLEP/ALEPH_2002_S4823664.plot
diff --git a/data/refdata/ALEPH_2002_S4823664.yoda b/analyses/pluginLEP/ALEPH_2002_S4823664.yoda
rename from data/refdata/ALEPH_2002_S4823664.yoda
rename to analyses/pluginLEP/ALEPH_2002_S4823664.yoda
diff --git a/src/Analyses/ALEPH_2004_S5765862.cc b/analyses/pluginLEP/ALEPH_2004_S5765862.cc
rename from src/Analyses/ALEPH_2004_S5765862.cc
rename to analyses/pluginLEP/ALEPH_2004_S5765862.cc
diff --git a/data/anainfo/ALEPH_2004_S5765862.info b/analyses/pluginLEP/ALEPH_2004_S5765862.info
rename from data/anainfo/ALEPH_2004_S5765862.info
rename to analyses/pluginLEP/ALEPH_2004_S5765862.info
diff --git a/data/plotinfo/ALEPH_2004_S5765862.plot b/analyses/pluginLEP/ALEPH_2004_S5765862.plot
rename from data/plotinfo/ALEPH_2004_S5765862.plot
rename to analyses/pluginLEP/ALEPH_2004_S5765862.plot
diff --git a/data/refdata/ALEPH_2004_S5765862.yoda b/analyses/pluginLEP/ALEPH_2004_S5765862.yoda
rename from data/refdata/ALEPH_2004_S5765862.yoda
rename to analyses/pluginLEP/ALEPH_2004_S5765862.yoda
diff --git a/analyses/pluginLEP/ALEPH_2014_I1267648.cc b/analyses/pluginLEP/ALEPH_2014_I1267648.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/ALEPH_2014_I1267648.cc
@@ -0,0 +1,142 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/UnstableFinalState.hh"
+
+namespace Rivet {
+
+
+  /// @brief Add a short analysis description here
+  class ALEPH_2014_I1267648 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(ALEPH_2014_I1267648);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      // Initialise and register projections
+      declare(UnstableFinalState(), "UFS");
+
+      // Book histograms
+      _h_pip0  = bookHisto1D(1, 1, 1);
+      _h_pi2p0 = bookHisto1D(2, 1, 1);
+      _h_pi3p0 = bookHisto1D(3, 1, 1);
+      _h_3pi   = bookHisto1D(4, 1, 1);
+      _h_3pip0 = bookHisto1D(5, 1, 1);
+
+    }
+
+    // Helper function to look for specific decays
+    bool isSpecificDecay(const Particle& mother, vector<int> ids) {
+      // Trivial check to ignore any other decays but the one in question modulo photons
+      const Particles children = mother.children(Cuts::pid!=PID::PHOTON);
+      if (children.size()!=ids.size()) return false;
+      
+      // Specific bits for tau -> pi decays
+      unsigned int n_pi0(0), n_piplus(0), n_piminus(0), n_nutau(0), n_nutaubar(0);
+      for (int id : ids) {
+        if      (id == PID::PI0)        n_pi0++;
+        else if (id == PID::PIPLUS)     n_piplus++;
+        else if (id == PID::PIMINUS)    n_piminus++;
+        else if (id == PID::NU_TAU)     n_nutau++;
+        else if (id == PID::NU_TAUBAR)  n_nutaubar++;
+      }
+ 
+      // Check for the explicit decay -- easy as we only deal with pi0 and pi+/-
+      if ( count(children, hasPID(PID::PI0))       != n_pi0      ) return false;
+      if ( count(children, hasPID(PID::PIPLUS))    != n_piplus   ) return false;
+      if ( count(children, hasPID(PID::PIMINUS))   != n_piminus  ) return false;
+      if ( count(children, hasPID(PID::NU_TAU))    != n_nutau    ) return false;
+      if ( count(children, hasPID(PID::NU_TAUBAR)) != n_nutaubar ) return false;
+
+      return true;
+ 
+    }
+    
+
+    // Conveniece function to get m2 of sum of all hadronic tau decay product 4-vectors
+    double hadronicm2(const Particle& mother) {
+      FourMomentum p_tot(0,0,0,0);
+      // Iterate over all children that are mesons
+      for (const Particle & meson : filter_select(mother.children(), isMeson)) {
+        // Add this mesons 4-momentum to total 4-momentum
+        p_tot += meson.momentum();
+      }
+      return p_tot.mass2();
+    }
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      // Loop over taus
+      for(const Particle& tau : apply<UnstableFinalState>(event, "UFS").particles(Cuts::abspid==PID::TAU)) {
+        // tau -> pi pi0 nu_tau (both charges)
+        if (isSpecificDecay(tau,  {PID::PIPLUS, PID::PI0, PID::NU_TAUBAR}) ||  
+            isSpecificDecay(tau,  {PID::PIMINUS, PID::PI0, PID::NU_TAU}) ) {
+          _h_pip0->fill(hadronicm2(tau), event.weight());
+        }
+        // tau -> pi pi0 pi0 nu_tau (both charges)
+        else if (isSpecificDecay(tau,  {PID::PIPLUS, PID::PI0, PID::PI0, PID::NU_TAUBAR}) ||  
+                 isSpecificDecay(tau,  {PID::PIMINUS, PID::PI0, PID::PI0, PID::NU_TAU}) ) {
+          _h_pi2p0->fill(hadronicm2(tau), event.weight());
+        }
+        //    tau -> pi pi0 pi0 pi0         (3,1,1)
+        else if (isSpecificDecay(tau,  {PID::PIPLUS,  PID::PI0, PID::PI0, PID::PI0, PID::NU_TAUBAR}) ||
+                 isSpecificDecay(tau,  {PID::PIMINUS, PID::PI0, PID::PI0, PID::PI0, PID::NU_TAU}) ) {
+          _h_pi3p0->fill(hadronicm2(tau), event.weight());
+        }
+        //    tau -> 3 charged pions        (4,1,1)
+        else if (isSpecificDecay(tau,  {PID::PIPLUS,  PID::PIPLUS,  PID::PIMINUS, PID::NU_TAUBAR}) ||
+                 isSpecificDecay(tau,  {PID::PIMINUS, PID::PIMINUS, PID::PIPLUS, PID::NU_TAU}) ) {
+          _h_3pi->fill(hadronicm2(tau), event.weight());
+        }
+        //    tau -> 3 charged pions + pi0  (5,1,1)
+        else if (isSpecificDecay(tau,  {PID::PIPLUS,  PID::PIPLUS,  PID::PIMINUS, PID::PI0, PID::NU_TAUBAR}) ||
+                 isSpecificDecay(tau,  {PID::PIMINUS, PID::PIMINUS, PID::PIPLUS,  PID::PI0, PID::NU_TAU}) ) {
+          _h_3pip0->fill(hadronicm2(tau), event.weight());
+        }
+        //
+      }
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+
+      normalize(_h_pip0);  // normalize to unity
+      normalize(_h_pi2p0); // normalize to unity
+      normalize(_h_pi3p0); // nor\pi^0malize to unity
+      normalize(_h_3pi);   // normalize to unity
+      normalize(_h_3pip0); // normalize to unity
+
+    }
+
+    //@}
+
+
+  private:
+
+
+    /// @name Histograms
+    //@{
+    Histo1DPtr _h_pip0;
+    Histo1DPtr _h_pi2p0;
+    Histo1DPtr _h_pi3p0;
+    Histo1DPtr _h_3pi;
+    Histo1DPtr _h_3pip0;
+    //@}
+
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(ALEPH_2014_I1267648);
+
+
+}
diff --git a/analyses/pluginLEP/ALEPH_2014_I1267648.info b/analyses/pluginLEP/ALEPH_2014_I1267648.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/ALEPH_2014_I1267648.info
@@ -0,0 +1,34 @@
+Name: ALEPH_2014_I1267648
+Year: 2014
+Summary: Normalised spectral functions of hadronic tau decays
+Experiment: ALEPH
+Collider: LEP
+InspireID: 1267648
+Status: VALIDATED
+Authors:
+ - Holger Schulz <holger.schulz@durham.ac.uk>
+RunInfo: Hadronic tau decays.
+NumEvents: 100000
+NeedCrossSection: no
+Description:
+  'Spectral functions of pionic tau decays measured with ALEPH. The data is taken
+  from http://aleph.web.lal.in2p3.fr/tau/specfun.html'
+BibKey: Davier:2013sfa
+BibTeX: '
+@article{Davier:2013sfa,
+      author         = "Davier, Michel and Hoecker, Andreas and Malaescu, Bogdan
+                        and Yuan, Chang-Zheng and Zhang, Zhiqing",
+      title          = "{Update of the ALEPH non-strange spectral functions from
+                        hadronic $\tau$ decays}",
+      journal        = "Eur. Phys. J.",
+      volume         = "C74",
+      year           = "2014",
+      number         = "3",
+      pages          = "2803",
+      doi            = "10.1140/epjc/s10052-014-2803-9",
+      eprint         = "1312.1501",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "LAL-13-390",
+      SLACcitation   = "%%CITATION = ARXIV:1312.1501;%%"
+}'
diff --git a/analyses/pluginLEP/ALEPH_2014_I1267648.plot b/analyses/pluginLEP/ALEPH_2014_I1267648.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/ALEPH_2014_I1267648.plot
@@ -0,0 +1,34 @@
+# BEGIN PLOT /ALEPH_2014_I1267648/d01-x01-y01
+Title=$\tau\to\pi\pi^0$
+XLabel=$m_{\pi\pi^0}^2$ [GeV$^2$]
+YLabel=$1/N \: \text{d} N / \text{d} m^2 $
+FullRange=1
+# END PLOT
+
+# BEGIN PLOT /ALEPH_2014_I1267648/d02-x01-y01
+Title=$\tau\to\pi 2\pi^0$
+XLabel=$m_{\pi 2\pi^0}^2$ [GeV$^2$]
+YLabel=$1/N \: \text{d} N / \text{d} m^2 $
+FullRange=1
+# END PLOT
+
+# BEGIN PLOT /ALEPH_2014_I1267648/d03-x01-y01
+Title=$\tau\to\pi 3\pi^0$
+XLabel=$m_{\pi 3\pi^0}^2$ [GeV$^2$]
+YLabel=$1/N \: \text{d} N / \text{d} m^2 $
+FullRange=1
+# END PLOT
+
+# BEGIN PLOT /ALEPH_2014_I1267648/d04-x01-y01
+Title=$\tau\to 3 \pi$
+XLabel=$m_{3\pi}^2$ [GeV$^2$]
+YLabel=$1/N \: \text{d} N / \text{d} m^2 $
+FullRange=1
+# END PLOT
+
+# BEGIN PLOT /ALEPH_2014_I1267648/d05-x01-y01
+Title=$\tau\to 3 \pi\pi^0$
+XLabel=$m_{3\pi\pi^0}^2$ [GeV$^2$]
+YLabel=$1/N \: \text{d} N / \text{d} m^2 $
+FullRange=1
+# END PLOT
diff --git a/analyses/pluginLEP/ALEPH_2014_I1267648.yoda b/analyses/pluginLEP/ALEPH_2014_I1267648.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/ALEPH_2014_I1267648.yoda
@@ -0,0 +1,385 @@
+BEGIN YODA_SCATTER2D /REF/ALEPH_2014_I1267648/d01-x01-y01
+Path=/REF/ALEPH_2014_I1267648/d01-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+3.750000e-02	3.750000e-02	3.750000e-02	1.378459e-04	3.300463e-04	3.300463e-04
+1.000000e-01	2.500000e-02	2.500000e-02	3.820900e-02	1.643514e-02	1.643514e-02
+1.375000e-01	1.250000e-02	1.250000e-02	5.527863e-02	1.551209e-02	1.551209e-02
+1.625000e-01	1.250000e-02	1.250000e-02	8.402352e-02	1.783102e-02	1.783102e-02
+1.875000e-01	1.250000e-02	1.250000e-02	1.179429e-01	2.074538e-02	2.074538e-02
+2.125000e-01	1.250000e-02	1.250000e-02	1.726829e-01	2.765995e-02	2.765995e-02
+2.375000e-01	1.250000e-02	1.250000e-02	1.947473e-01	2.328483e-02	2.328483e-02
+2.625000e-01	1.250000e-02	1.250000e-02	2.291079e-01	2.101268e-02	2.101268e-02
+2.875000e-01	1.250000e-02	1.250000e-02	2.746500e-01	2.570818e-02	2.570818e-02
+3.125000e-01	1.250000e-02	1.250000e-02	3.488521e-01	2.442096e-02	2.442096e-02
+3.375000e-01	1.250000e-02	1.250000e-02	4.408157e-01	2.772933e-02	2.772933e-02
+3.625000e-01	1.250000e-02	1.250000e-02	6.047985e-01	3.950150e-02	3.950150e-02
+3.875000e-01	1.250000e-02	1.250000e-02	7.172246e-01	4.121928e-02	4.121928e-02
+4.125000e-01	1.250000e-02	1.250000e-02	8.916506e-01	4.091494e-02	4.091494e-02
+4.375000e-01	1.250000e-02	1.250000e-02	1.138881e+00	4.532021e-02	4.532021e-02
+4.625000e-01	1.250000e-02	1.250000e-02	1.470396e+00	5.522753e-02	5.522753e-02
+4.875000e-01	1.250000e-02	1.250000e-02	1.852619e+00	7.113414e-02	7.113414e-02
+5.125000e-01	1.250000e-02	1.250000e-02	2.317934e+00	7.977730e-02	7.977730e-02
+5.375000e-01	1.250000e-02	1.250000e-02	2.872447e+00	8.261585e-02	8.261585e-02
+5.625000e-01	1.250000e-02	1.250000e-02	3.151667e+00	7.845070e-02	7.845070e-02
+5.875000e-01	1.250000e-02	1.250000e-02	3.182604e+00	6.379070e-02	6.379070e-02
+6.125000e-01	1.250000e-02	1.250000e-02	2.916733e+00	6.290331e-02	6.290331e-02
+6.375000e-01	1.250000e-02	1.250000e-02	2.534494e+00	7.944090e-02	7.944090e-02
+6.625000e-01	1.250000e-02	1.250000e-02	2.067138e+00	8.287631e-02	8.287631e-02
+6.875000e-01	1.250000e-02	1.250000e-02	1.678303e+00	3.957319e-02	3.957319e-02
+7.125000e-01	1.250000e-02	1.250000e-02	1.342580e+00	3.785624e-02	3.785624e-02
+7.375000e-01	1.250000e-02	1.250000e-02	1.106970e+00	3.758566e-02	3.758566e-02
+7.625000e-01	1.250000e-02	1.250000e-02	9.075746e-01	3.631438e-02	3.631438e-02
+7.875000e-01	1.250000e-02	1.250000e-02	7.693938e-01	3.638550e-02	3.638550e-02
+8.125000e-01	1.250000e-02	1.250000e-02	6.582712e-01	3.621364e-02	3.621364e-02
+8.375000e-01	1.250000e-02	1.250000e-02	5.769550e-01	3.351913e-02	3.351913e-02
+8.625000e-01	1.250000e-02	1.250000e-02	4.724125e-01	2.460288e-02	2.460288e-02
+8.875000e-01	1.250000e-02	1.250000e-02	4.157990e-01	2.026968e-02	2.026968e-02
+9.125000e-01	1.250000e-02	1.250000e-02	3.655300e-01	1.630634e-02	1.630634e-02
+9.375000e-01	1.250000e-02	1.250000e-02	3.179778e-01	1.512403e-02	1.512403e-02
+9.625000e-01	1.250000e-02	1.250000e-02	2.876530e-01	1.406064e-02	1.406064e-02
+9.875000e-01	1.250000e-02	1.250000e-02	2.589616e-01	1.421187e-02	1.421187e-02
+1.012500e+00	1.250000e-02	1.250000e-02	2.267209e-01	1.417759e-02	1.417759e-02
+1.037500e+00	1.250000e-02	1.250000e-02	2.300659e-01	1.477812e-02	1.477812e-02
+1.062500e+00	1.250000e-02	1.250000e-02	2.147386e-01	1.531714e-02	1.531714e-02
+1.087500e+00	1.250000e-02	1.250000e-02	1.766875e-01	1.388080e-02	1.388080e-02
+1.112500e+00	1.250000e-02	1.250000e-02	1.663070e-01	1.234324e-02	1.234324e-02
+1.137500e+00	1.250000e-02	1.250000e-02	1.577640e-01	1.277352e-02	1.277352e-02
+1.162500e+00	1.250000e-02	1.250000e-02	1.363388e-01	1.049203e-02	1.049203e-02
+1.187500e+00	1.250000e-02	1.250000e-02	1.301356e-01	1.094231e-02	1.094231e-02
+1.212500e+00	1.250000e-02	1.250000e-02	1.210853e-01	1.134142e-02	1.134142e-02
+1.237500e+00	1.250000e-02	1.250000e-02	1.115027e-01	1.160029e-02	1.160029e-02
+1.262500e+00	1.250000e-02	1.250000e-02	1.099134e-01	9.953027e-03	9.953027e-03
+1.287500e+00	1.250000e-02	1.250000e-02	1.082739e-01	1.101812e-02	1.101812e-02
+1.312500e+00	1.250000e-02	1.250000e-02	1.005694e-01	1.032029e-02	1.032029e-02
+1.337500e+00	1.250000e-02	1.250000e-02	9.171856e-02	1.041030e-02	1.041030e-02
+1.362500e+00	1.250000e-02	1.250000e-02	9.168244e-02	9.841594e-03	9.841594e-03
+1.387500e+00	1.250000e-02	1.250000e-02	7.242600e-02	8.434005e-03	8.434005e-03
+1.412500e+00	1.250000e-02	1.250000e-02	6.699079e-02	7.040373e-03	7.040373e-03
+1.437500e+00	1.250000e-02	1.250000e-02	6.348406e-02	5.929766e-03	5.929766e-03
+1.462500e+00	1.250000e-02	1.250000e-02	5.882306e-02	6.245642e-03	6.245642e-03
+1.487500e+00	1.250000e-02	1.250000e-02	5.338314e-02	6.409955e-03	6.409955e-03
+1.512500e+00	1.250000e-02	1.250000e-02	5.203572e-02	7.647650e-03	7.647650e-03
+1.537500e+00	1.250000e-02	1.250000e-02	4.860123e-02	6.432643e-03	6.432643e-03
+1.562500e+00	1.250000e-02	1.250000e-02	5.060351e-02	7.413426e-03	7.413426e-03
+1.587500e+00	1.250000e-02	1.250000e-02	4.736688e-02	7.145968e-03	7.145968e-03
+1.612500e+00	1.250000e-02	1.250000e-02	3.642893e-02	7.089778e-03	7.089778e-03
+1.637500e+00	1.250000e-02	1.250000e-02	3.608344e-02	6.503673e-03	6.503673e-03
+1.662500e+00	1.250000e-02	1.250000e-02	3.775908e-02	6.911805e-03	6.911805e-03
+1.687500e+00	1.250000e-02	1.250000e-02	2.891921e-02	6.215163e-03	6.215163e-03
+1.725000e+00	2.500000e-02	2.500000e-02	2.851796e-02	4.637970e-03	4.637970e-03
+1.775000e+00	2.500000e-02	2.500000e-02	2.811044e-02	4.547181e-03	4.547181e-03
+1.825000e+00	2.500000e-02	2.500000e-02	2.387189e-02	4.627725e-03	4.627725e-03
+1.875000e+00	2.500000e-02	2.500000e-02	1.728085e-02	4.292056e-03	4.292056e-03
+1.925000e+00	2.500000e-02	2.500000e-02	1.292452e-02	3.969624e-03	3.969624e-03
+1.975000e+00	2.500000e-02	2.500000e-02	9.529283e-03	3.553596e-03	3.553596e-03
+2.050000e+00	5.000000e-02	5.000000e-02	6.073583e-03	1.686424e-03	1.686424e-03
+2.150000e+00	5.000000e-02	5.000000e-02	3.545567e-03	9.858007e-04	9.858007e-04
+2.250000e+00	5.000000e-02	5.000000e-02	1.966318e-03	8.955125e-04	8.955125e-04
+2.350000e+00	5.000000e-02	5.000000e-02	1.489029e-03	8.279756e-04	8.279756e-04
+2.500000e+00	1.000000e-01	1.000000e-01	8.042295e-04	8.925869e-04	8.925869e-04
+2.700000e+00	1.000000e-01	1.000000e-01	2.551140e-04	3.358578e-04	3.358578e-04
+2.900000e+00	1.000000e-01	1.000000e-01	5.447183e-05	1.411031e-04	1.411031e-04
+3.087500e+00	8.750000e-02	8.750000e-02	1.441844e-06	3.052050e-05	3.052050e-05
+3.337500e+00	1.625000e-01	1.625000e-01	0.000000e+00	2.070565e-05	2.070565e-05
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ALEPH_2014_I1267648/d02-x01-y01
+Path=/REF/ALEPH_2014_I1267648/d02-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.125000e-01	1.250000e-02	1.250000e-02	1.252430e-04	4.350143e-03	4.350143e-03
+2.375000e-01	1.250000e-02	1.250000e-02	6.000218e-05	2.089080e-03	2.089080e-03
+2.625000e-01	1.250000e-02	1.250000e-02	1.339929e-03	7.142780e-03	7.142780e-03
+2.875000e-01	1.250000e-02	1.250000e-02	8.910923e-04	4.758689e-03	4.758689e-03
+3.125000e-01	1.250000e-02	1.250000e-02	6.284664e-03	9.646275e-03	9.646275e-03
+3.375000e-01	1.250000e-02	1.250000e-02	6.893821e-03	1.058727e-02	1.058727e-02
+3.625000e-01	1.250000e-02	1.250000e-02	7.304256e-03	6.476035e-03	6.476035e-03
+3.875000e-01	1.250000e-02	1.250000e-02	6.398097e-03	5.716379e-03	5.716379e-03
+4.125000e-01	1.250000e-02	1.250000e-02	2.484339e-02	9.202702e-03	9.202702e-03
+4.375000e-01	1.250000e-02	1.250000e-02	2.543999e-02	9.451059e-03	9.451059e-03
+4.625000e-01	1.250000e-02	1.250000e-02	1.531292e-02	1.389226e-02	1.389226e-02
+4.875000e-01	1.250000e-02	1.250000e-02	2.521009e-02	2.321012e-02	2.321012e-02
+5.125000e-01	1.250000e-02	1.250000e-02	2.666480e-02	1.394053e-02	1.394053e-02
+5.375000e-01	1.250000e-02	1.250000e-02	4.444205e-02	2.245185e-02	2.245185e-02
+5.625000e-01	1.250000e-02	1.250000e-02	4.328565e-02	1.031410e-02	1.031410e-02
+5.875000e-01	1.250000e-02	1.250000e-02	5.503627e-02	1.768118e-02	1.768118e-02
+6.125000e-01	1.250000e-02	1.250000e-02	6.522786e-02	1.801529e-02	1.801529e-02
+6.375000e-01	1.250000e-02	1.250000e-02	8.541619e-02	1.931326e-02	1.931326e-02
+6.625000e-01	1.250000e-02	1.250000e-02	1.006300e-01	1.625711e-02	1.625711e-02
+6.875000e-01	1.250000e-02	1.250000e-02	1.383094e-01	3.162407e-02	3.162407e-02
+7.125000e-01	1.250000e-02	1.250000e-02	1.654855e-01	2.154842e-02	2.154842e-02
+7.375000e-01	1.250000e-02	1.250000e-02	2.021215e-01	1.761260e-02	1.761260e-02
+7.625000e-01	1.250000e-02	1.250000e-02	2.619288e-01	3.785812e-02	3.785812e-02
+7.875000e-01	1.250000e-02	1.250000e-02	3.065614e-01	4.664384e-02	4.664384e-02
+8.125000e-01	1.250000e-02	1.250000e-02	3.467173e-01	6.176755e-02	6.176755e-02
+8.375000e-01	1.250000e-02	1.250000e-02	3.652344e-01	6.028612e-02	6.028612e-02
+8.625000e-01	1.250000e-02	1.250000e-02	4.903562e-01	5.285893e-02	5.285893e-02
+8.875000e-01	1.250000e-02	1.250000e-02	6.114949e-01	5.134423e-02	5.134423e-02
+9.125000e-01	1.250000e-02	1.250000e-02	6.940580e-01	5.804437e-02	5.804437e-02
+9.375000e-01	1.250000e-02	1.250000e-02	7.509473e-01	6.451885e-02	6.451885e-02
+9.625000e-01	1.250000e-02	1.250000e-02	7.744996e-01	5.235640e-02	5.235640e-02
+9.875000e-01	1.250000e-02	1.250000e-02	8.243319e-01	6.818226e-02	6.818226e-02
+1.012500e+00	1.250000e-02	1.250000e-02	8.835591e-01	7.508976e-02	7.508976e-02
+1.037500e+00	1.250000e-02	1.250000e-02	9.205761e-01	6.564580e-02	6.564580e-02
+1.062500e+00	1.250000e-02	1.250000e-02	9.161167e-01	5.838255e-02	5.838255e-02
+1.087500e+00	1.250000e-02	1.250000e-02	9.985932e-01	5.189587e-02	5.189587e-02
+1.112500e+00	1.250000e-02	1.250000e-02	1.059119e+00	7.003988e-02	7.003988e-02
+1.137500e+00	1.250000e-02	1.250000e-02	1.072757e+00	7.161236e-02	7.161236e-02
+1.162500e+00	1.250000e-02	1.250000e-02	1.016344e+00	6.800200e-02	6.800200e-02
+1.187500e+00	1.250000e-02	1.250000e-02	1.133889e+00	6.834259e-02	6.834259e-02
+1.212500e+00	1.250000e-02	1.250000e-02	1.026908e+00	6.586159e-02	6.586159e-02
+1.237500e+00	1.250000e-02	1.250000e-02	1.040416e+00	5.411767e-02	5.411767e-02
+1.262500e+00	1.250000e-02	1.250000e-02	1.025739e+00	5.027402e-02	5.027402e-02
+1.287500e+00	1.250000e-02	1.250000e-02	1.079035e+00	7.075855e-02	7.075855e-02
+1.312500e+00	1.250000e-02	1.250000e-02	9.781148e-01	7.515100e-02	7.515100e-02
+1.337500e+00	1.250000e-02	1.250000e-02	1.048166e+00	7.113768e-02	7.113768e-02
+1.362500e+00	1.250000e-02	1.250000e-02	1.005087e+00	5.299970e-02	5.299970e-02
+1.387500e+00	1.250000e-02	1.250000e-02	9.760799e-01	3.313366e-02	3.313366e-02
+1.412500e+00	1.250000e-02	1.250000e-02	9.611865e-01	3.065713e-02	3.065713e-02
+1.437500e+00	1.250000e-02	1.250000e-02	9.184546e-01	2.964237e-02	2.964237e-02
+1.462500e+00	1.250000e-02	1.250000e-02	8.904429e-01	3.923236e-02	3.923236e-02
+1.487500e+00	1.250000e-02	1.250000e-02	8.203487e-01	4.190147e-02	4.190147e-02
+1.512500e+00	1.250000e-02	1.250000e-02	8.694017e-01	6.194329e-02	6.194329e-02
+1.537500e+00	1.250000e-02	1.250000e-02	7.605154e-01	5.640926e-02	5.640926e-02
+1.562500e+00	1.250000e-02	1.250000e-02	8.166687e-01	6.020141e-02	6.020141e-02
+1.587500e+00	1.250000e-02	1.250000e-02	7.394742e-01	5.980928e-02	5.980928e-02
+1.612500e+00	1.250000e-02	1.250000e-02	7.230222e-01	4.673129e-02	4.673129e-02
+1.637500e+00	1.250000e-02	1.250000e-02	7.325903e-01	5.018392e-02	5.018392e-02
+1.662500e+00	1.250000e-02	1.250000e-02	6.385541e-01	4.534927e-02	4.534927e-02
+1.687500e+00	1.250000e-02	1.250000e-02	6.050007e-01	4.164267e-02	4.164267e-02
+1.725000e+00	2.500000e-02	2.500000e-02	5.575280e-01	4.398373e-02	4.398373e-02
+1.775000e+00	2.500000e-02	2.500000e-02	4.869792e-01	3.259382e-02	3.259382e-02
+1.825000e+00	2.500000e-02	2.500000e-02	4.396364e-01	3.692289e-02	3.692289e-02
+1.875000e+00	2.500000e-02	2.500000e-02	3.551900e-01	3.105689e-02	3.105689e-02
+1.925000e+00	2.500000e-02	2.500000e-02	3.187792e-01	2.921505e-02	2.921505e-02
+1.975000e+00	2.500000e-02	2.500000e-02	2.710467e-01	2.570726e-02	2.570726e-02
+2.050000e+00	5.000000e-02	5.000000e-02	2.402533e-01	2.432806e-02	2.432806e-02
+2.150000e+00	5.000000e-02	5.000000e-02	1.572898e-01	1.822639e-02	1.822639e-02
+2.250000e+00	5.000000e-02	5.000000e-02	1.079955e-01	1.616333e-02	1.616333e-02
+2.350000e+00	5.000000e-02	5.000000e-02	7.915469e-02	1.627863e-02	1.627863e-02
+2.500000e+00	1.000000e-01	1.000000e-01	5.841543e-02	1.052721e-02	1.052721e-02
+2.700000e+00	1.000000e-01	1.000000e-01	2.074413e-02	9.156946e-03	9.156946e-03
+2.900000e+00	1.000000e-01	1.000000e-01	4.397393e-03	4.179513e-03	4.179513e-03
+3.087500e+00	8.750000e-02	8.750000e-02	8.028700e-04	5.762722e-04	5.762722e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ALEPH_2014_I1267648/d03-x01-y01
+Path=/REF/ALEPH_2014_I1267648/d03-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.375000e-01	1.250000e-02	1.250000e-02	1.442830e-02	1.876955e-02	1.876955e-02
+5.625000e-01	1.250000e-02	1.250000e-02	1.442830e-02	1.909704e-02	1.909704e-02
+5.875000e-01	1.250000e-02	1.250000e-02	1.871737e-02	2.492178e-02	2.492178e-02
+6.125000e-01	1.250000e-02	1.250000e-02	1.442830e-02	2.037232e-02	2.037232e-02
+6.375000e-01	1.250000e-02	1.250000e-02	2.165085e-02	2.931926e-02	2.931926e-02
+6.625000e-01	1.250000e-02	1.250000e-02	2.786213e-02	3.702392e-02	3.702392e-02
+6.875000e-01	1.250000e-02	1.250000e-02	2.328565e-02	2.152368e-01	2.152368e-01
+7.125000e-01	1.250000e-02	1.250000e-02	6.844651e-03	6.393860e-02	6.393860e-02
+7.375000e-01	1.250000e-02	1.250000e-02	2.375935e-02	2.195324e-01	2.195324e-01
+7.625000e-01	1.250000e-02	1.250000e-02	1.867806e-02	1.726199e-01	1.726199e-01
+7.875000e-01	1.250000e-02	1.250000e-02	2.900277e-02	1.172650e-01	1.172650e-01
+8.125000e-01	1.250000e-02	1.250000e-02	4.107282e-02	1.658879e-01	1.658879e-01
+8.375000e-01	1.250000e-02	1.250000e-02	2.615035e-02	1.057962e-01	1.057962e-01
+8.625000e-01	1.250000e-02	1.250000e-02	2.441196e-02	9.891341e-02	9.891341e-02
+8.875000e-01	1.250000e-02	1.250000e-02	6.235437e-02	1.453583e-01	1.453583e-01
+9.125000e-01	1.250000e-02	1.250000e-02	7.787950e-02	1.815054e-01	1.815054e-01
+9.375000e-01	1.250000e-02	1.250000e-02	6.304629e-02	1.474085e-01	1.474085e-01
+9.625000e-01	1.250000e-02	1.250000e-02	7.934931e-02	1.854371e-01	1.854371e-01
+9.875000e-01	1.250000e-02	1.250000e-02	5.766244e-02	7.191250e-02	7.191250e-02
+1.012500e+00	1.250000e-02	1.250000e-02	7.593886e-02	9.322123e-02	9.322123e-02
+1.037500e+00	1.250000e-02	1.250000e-02	7.815381e-02	9.653500e-02	9.653500e-02
+1.062500e+00	1.250000e-02	1.250000e-02	6.782829e-02	8.602440e-02	8.602440e-02
+1.087500e+00	1.250000e-02	1.250000e-02	4.833999e-02	8.812743e-02	8.812743e-02
+1.112500e+00	1.250000e-02	1.250000e-02	4.373813e-02	8.285955e-02	8.285955e-02
+1.137500e+00	1.250000e-02	1.250000e-02	4.418030e-02	8.480784e-02	8.480784e-02
+1.162500e+00	1.250000e-02	1.250000e-02	3.982819e-02	8.115916e-02	8.115916e-02
+1.187500e+00	1.250000e-02	1.250000e-02	2.829979e-01	1.684570e-01	1.684570e-01
+1.212500e+00	1.250000e-02	1.250000e-02	2.650245e-01	1.602049e-01	1.602049e-01
+1.237500e+00	1.250000e-02	1.250000e-02	2.620726e-01	1.600434e-01	1.600434e-01
+1.262500e+00	1.250000e-02	1.250000e-02	2.729181e-01	1.666763e-01	1.666763e-01
+1.287500e+00	1.250000e-02	1.250000e-02	2.662650e-01	1.277087e-01	1.277087e-01
+1.312500e+00	1.250000e-02	1.250000e-02	2.270387e-01	1.156807e-01	1.156807e-01
+1.337500e+00	1.250000e-02	1.250000e-02	2.753910e-01	1.337590e-01	1.337590e-01
+1.362500e+00	1.250000e-02	1.250000e-02	2.781504e-01	1.376758e-01	1.376758e-01
+1.387500e+00	1.250000e-02	1.250000e-02	2.465884e-01	1.325461e-01	1.325461e-01
+1.412500e+00	1.250000e-02	1.250000e-02	2.675301e-01	1.433703e-01	1.433703e-01
+1.437500e+00	1.250000e-02	1.250000e-02	2.349568e-01	1.380234e-01	1.380234e-01
+1.462500e+00	1.250000e-02	1.250000e-02	2.319067e-01	1.396137e-01	1.396137e-01
+1.487500e+00	1.250000e-02	1.250000e-02	3.925910e-01	1.802024e-01	1.802024e-01
+1.512500e+00	1.250000e-02	1.250000e-02	3.158906e-01	1.568653e-01	1.568653e-01
+1.537500e+00	1.250000e-02	1.250000e-02	3.326890e-01	1.591580e-01	1.591580e-01
+1.562500e+00	1.250000e-02	1.250000e-02	3.204065e-01	1.515803e-01	1.515803e-01
+1.587500e+00	1.250000e-02	1.250000e-02	4.010823e-01	1.427442e-01	1.427442e-01
+1.612500e+00	1.250000e-02	1.250000e-02	4.521204e-01	1.494406e-01	1.494406e-01
+1.637500e+00	1.250000e-02	1.250000e-02	4.459381e-01	1.450721e-01	1.450721e-01
+1.662500e+00	1.250000e-02	1.250000e-02	4.396741e-01	1.405900e-01	1.405900e-01
+1.687500e+00	1.250000e-02	1.250000e-02	7.473927e-01	1.686883e-01	1.686883e-01
+1.725000e+00	2.500000e-02	2.500000e-02	7.256730e-01	1.636764e-01	1.636764e-01
+1.775000e+00	2.500000e-02	2.500000e-02	7.963795e-01	1.514536e-01	1.514536e-01
+1.825000e+00	2.500000e-02	2.500000e-02	8.247317e-01	1.638894e-01	1.638894e-01
+1.875000e+00	2.500000e-02	2.500000e-02	9.244864e-01	1.373003e-01	1.373003e-01
+1.925000e+00	2.500000e-02	2.500000e-02	9.039541e-01	1.690317e-01	1.690317e-01
+1.975000e+00	2.500000e-02	2.500000e-02	9.740874e-01	1.543395e-01	1.543395e-01
+2.050000e+00	5.000000e-02	5.000000e-02	1.079328e+00	1.658530e-01	1.658530e-01
+2.150000e+00	5.000000e-02	5.000000e-02	9.947016e-01	1.690254e-01	1.690254e-01
+2.250000e+00	5.000000e-02	5.000000e-02	8.951107e-01	1.549022e-01	1.549022e-01
+2.350000e+00	5.000000e-02	5.000000e-02	6.847722e-01	1.306895e-01	1.306895e-01
+2.500000e+00	1.000000e-01	1.000000e-01	4.425758e-01	1.016889e-01	1.016889e-01
+2.700000e+00	1.000000e-01	1.000000e-01	2.628055e-01	8.466860e-02	8.466860e-02
+2.900000e+00	1.000000e-01	1.000000e-01	1.634857e-01	1.157581e-01	1.157581e-01
+3.087500e+00	8.750000e-02	8.750000e-02	1.902039e-02	4.439204e-02	4.439204e-02
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ALEPH_2014_I1267648/d04-x01-y01
+Path=/REF/ALEPH_2014_I1267648/d04-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+2.375000e-01	1.250000e-02	1.250000e-02	3.897178e-04	1.068719e-03	1.068719e-03
+2.625000e-01	1.250000e-02	1.250000e-02	3.019753e-04	8.281079e-04	8.281079e-04
+2.875000e-01	1.250000e-02	1.250000e-02	1.514478e-03	4.467343e-04	4.467343e-04
+3.125000e-01	1.250000e-02	1.250000e-02	1.807498e-03	5.334714e-04	5.334714e-04
+3.375000e-01	1.250000e-02	1.250000e-02	1.934298e-03	1.105337e-03	1.105337e-03
+3.625000e-01	1.250000e-02	1.250000e-02	2.826102e-03	1.614389e-03	1.614389e-03
+3.875000e-01	1.250000e-02	1.250000e-02	2.768542e-03	2.123764e-03	2.123764e-03
+4.125000e-01	1.250000e-02	1.250000e-02	5.579911e-03	2.837624e-03	2.837624e-03
+4.375000e-01	1.250000e-02	1.250000e-02	8.146440e-03	2.278277e-03	2.278277e-03
+4.625000e-01	1.250000e-02	1.250000e-02	1.190708e-02	2.930684e-03	2.930684e-03
+4.875000e-01	1.250000e-02	1.250000e-02	2.186262e-02	5.542779e-03	5.542779e-03
+5.125000e-01	1.250000e-02	1.250000e-02	2.716557e-02	7.760905e-03	7.760905e-03
+5.375000e-01	1.250000e-02	1.250000e-02	2.302266e-02	6.312326e-03	6.312326e-03
+5.625000e-01	1.250000e-02	1.250000e-02	3.477092e-02	8.174321e-03	8.174321e-03
+5.875000e-01	1.250000e-02	1.250000e-02	4.384115e-02	9.731411e-03	9.731411e-03
+6.125000e-01	1.250000e-02	1.250000e-02	7.139030e-02	2.272340e-02	2.272340e-02
+6.375000e-01	1.250000e-02	1.250000e-02	9.029086e-02	2.300736e-02	2.300736e-02
+6.625000e-01	1.250000e-02	1.250000e-02	9.775463e-02	2.032601e-02	2.032601e-02
+6.875000e-01	1.250000e-02	1.250000e-02	9.283482e-02	2.518095e-02	2.518095e-02
+7.125000e-01	1.250000e-02	1.250000e-02	1.062847e-01	2.609621e-02	2.609621e-02
+7.375000e-01	1.250000e-02	1.250000e-02	1.591682e-01	3.085937e-02	3.085937e-02
+7.625000e-01	1.250000e-02	1.250000e-02	2.656032e-01	3.800052e-02	3.800052e-02
+7.875000e-01	1.250000e-02	1.250000e-02	3.216236e-01	4.174814e-02	4.174814e-02
+8.125000e-01	1.250000e-02	1.250000e-02	4.099633e-01	4.880979e-02	4.880979e-02
+8.375000e-01	1.250000e-02	1.250000e-02	5.183495e-01	4.941976e-02	4.941976e-02
+8.625000e-01	1.250000e-02	1.250000e-02	5.418425e-01	4.552093e-02	4.552093e-02
+8.875000e-01	1.250000e-02	1.250000e-02	6.584225e-01	5.439895e-02	5.439895e-02
+9.125000e-01	1.250000e-02	1.250000e-02	6.697929e-01	5.302723e-02	5.302723e-02
+9.375000e-01	1.250000e-02	1.250000e-02	7.506688e-01	6.277999e-02	6.277999e-02
+9.625000e-01	1.250000e-02	1.250000e-02	8.169889e-01	5.709356e-02	5.709356e-02
+9.875000e-01	1.250000e-02	1.250000e-02	9.596722e-01	5.569384e-02	5.569384e-02
+1.012500e+00	1.250000e-02	1.250000e-02	9.833864e-01	6.362643e-02	6.362643e-02
+1.037500e+00	1.250000e-02	1.250000e-02	9.301622e-01	5.786146e-02	5.786146e-02
+1.062500e+00	1.250000e-02	1.250000e-02	9.843155e-01	5.816397e-02	5.816397e-02
+1.087500e+00	1.250000e-02	1.250000e-02	1.112885e+00	5.701844e-02	5.701844e-02
+1.112500e+00	1.250000e-02	1.250000e-02	1.136688e+00	7.489327e-02	7.489327e-02
+1.137500e+00	1.250000e-02	1.250000e-02	1.147881e+00	6.791679e-02	6.791679e-02
+1.162500e+00	1.250000e-02	1.250000e-02	1.099568e+00	6.589921e-02	6.589921e-02
+1.187500e+00	1.250000e-02	1.250000e-02	1.102223e+00	6.219960e-02	6.219960e-02
+1.212500e+00	1.250000e-02	1.250000e-02	1.153014e+00	6.004237e-02	6.004237e-02
+1.237500e+00	1.250000e-02	1.250000e-02	1.116867e+00	6.059310e-02	6.059310e-02
+1.262500e+00	1.250000e-02	1.250000e-02	1.157703e+00	5.480593e-02	5.480593e-02
+1.287500e+00	1.250000e-02	1.250000e-02	1.123548e+00	5.557429e-02	5.557429e-02
+1.312500e+00	1.250000e-02	1.250000e-02	1.011215e+00	5.775644e-02	5.775644e-02
+1.337500e+00	1.250000e-02	1.250000e-02	9.864391e-01	4.953844e-02	4.953844e-02
+1.362500e+00	1.250000e-02	1.250000e-02	9.390992e-01	5.076846e-02	5.076846e-02
+1.387500e+00	1.250000e-02	1.250000e-02	9.898458e-01	5.909223e-02	5.909223e-02
+1.412500e+00	1.250000e-02	1.250000e-02	1.013472e+00	6.536215e-02	6.536215e-02
+1.437500e+00	1.250000e-02	1.250000e-02	9.854215e-01	5.528859e-02	5.528859e-02
+1.462500e+00	1.250000e-02	1.250000e-02	8.843708e-01	5.242935e-02	5.242935e-02
+1.487500e+00	1.250000e-02	1.250000e-02	8.446407e-01	5.229369e-02	5.229369e-02
+1.512500e+00	1.250000e-02	1.250000e-02	8.337127e-01	5.383546e-02	5.383546e-02
+1.537500e+00	1.250000e-02	1.250000e-02	7.785419e-01	4.808961e-02	4.808961e-02
+1.562500e+00	1.250000e-02	1.250000e-02	7.557125e-01	4.477030e-02	4.477030e-02
+1.587500e+00	1.250000e-02	1.250000e-02	6.883306e-01	4.468477e-02	4.468477e-02
+1.612500e+00	1.250000e-02	1.250000e-02	6.655898e-01	4.278500e-02	4.278500e-02
+1.637500e+00	1.250000e-02	1.250000e-02	6.202851e-01	4.084110e-02	4.084110e-02
+1.662500e+00	1.250000e-02	1.250000e-02	5.899345e-01	3.899809e-02	3.899809e-02
+1.687500e+00	1.250000e-02	1.250000e-02	5.983849e-01	4.264893e-02	4.264893e-02
+1.725000e+00	2.500000e-02	2.500000e-02	5.404046e-01	3.391428e-02	3.391428e-02
+1.775000e+00	2.500000e-02	2.500000e-02	5.039263e-01	3.312447e-02	3.312447e-02
+1.825000e+00	2.500000e-02	2.500000e-02	4.269659e-01	2.833135e-02	2.833135e-02
+1.875000e+00	2.500000e-02	2.500000e-02	3.399401e-01	3.056241e-02	3.056241e-02
+1.925000e+00	2.500000e-02	2.500000e-02	2.879105e-01	2.519899e-02	2.519899e-02
+1.975000e+00	2.500000e-02	2.500000e-02	2.359472e-01	1.963761e-02	1.963761e-02
+2.050000e+00	5.000000e-02	5.000000e-02	1.913836e-01	1.465934e-02	1.465934e-02
+2.150000e+00	5.000000e-02	5.000000e-02	1.363012e-01	1.300274e-02	1.300274e-02
+2.250000e+00	5.000000e-02	5.000000e-02	9.599045e-02	1.040912e-02	1.040912e-02
+2.350000e+00	5.000000e-02	5.000000e-02	5.235481e-02	6.779050e-03	6.779050e-03
+2.500000e+00	1.000000e-01	1.000000e-01	3.668509e-02	4.682994e-03	4.682994e-03
+2.700000e+00	1.000000e-01	1.000000e-01	1.708715e-02	3.343756e-03	3.343756e-03
+2.900000e+00	1.000000e-01	1.000000e-01	5.123380e-03	1.291451e-03	1.291451e-03
+3.087500e+00	8.750000e-02	8.750000e-02	3.997660e-04	3.782229e-04	3.782229e-04
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ALEPH_2014_I1267648/d05-x01-y01
+Path=/REF/ALEPH_2014_I1267648/d05-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.125000e-01	1.250000e-02	1.250000e-02	3.300918e-04	6.935423e-04	6.935423e-04
+5.375000e-01	1.250000e-02	1.250000e-02	3.300918e-04	6.962430e-04	6.962430e-04
+5.625000e-01	1.250000e-02	1.250000e-02	1.126711e-03	1.228686e-02	1.228686e-02
+5.875000e-01	1.250000e-02	1.250000e-02	1.293160e-03	1.410184e-02	1.410184e-02
+6.125000e-01	1.250000e-02	1.250000e-02	2.013945e-03	1.440336e-03	1.440336e-03
+6.375000e-01	1.250000e-02	1.250000e-02	1.573945e-03	1.134897e-03	1.134897e-03
+6.625000e-01	1.250000e-02	1.250000e-02	2.467541e-03	4.563554e-03	4.563554e-03
+6.875000e-01	1.250000e-02	1.250000e-02	2.478608e-03	4.596918e-03	4.596918e-03
+7.125000e-01	1.250000e-02	1.250000e-02	3.114513e-03	1.355539e-03	1.355539e-03
+7.375000e-01	1.250000e-02	1.250000e-02	6.150769e-03	2.510251e-03	2.510251e-03
+7.625000e-01	1.250000e-02	1.250000e-02	7.240268e-03	2.491042e-03	2.491042e-03
+7.875000e-01	1.250000e-02	1.250000e-02	5.846716e-03	2.297121e-03	2.297121e-03
+8.125000e-01	1.250000e-02	1.250000e-02	1.282703e-02	3.708106e-03	3.708106e-03
+8.375000e-01	1.250000e-02	1.250000e-02	1.178128e-02	3.546888e-03	3.546888e-03
+8.625000e-01	1.250000e-02	1.250000e-02	4.967761e-02	1.474442e-02	1.474442e-02
+8.875000e-01	1.250000e-02	1.250000e-02	5.110767e-02	1.518747e-02	1.518747e-02
+9.125000e-01	1.250000e-02	1.250000e-02	1.226406e-01	4.015165e-02	4.015165e-02
+9.375000e-01	1.250000e-02	1.250000e-02	1.158607e-01	6.119422e-02	6.119422e-02
+9.625000e-01	1.250000e-02	1.250000e-02	1.059609e-01	6.152711e-02	6.152711e-02
+9.875000e-01	1.250000e-02	1.250000e-02	1.614206e-01	6.018581e-02	6.018581e-02
+1.012500e+00	1.250000e-02	1.250000e-02	1.751984e-01	6.435438e-02	6.435438e-02
+1.037500e+00	1.250000e-02	1.250000e-02	1.867017e-01	6.057728e-02	6.057728e-02
+1.062500e+00	1.250000e-02	1.250000e-02	2.274163e-01	7.116527e-02	7.116527e-02
+1.087500e+00	1.250000e-02	1.250000e-02	1.952682e-01	6.825789e-02	6.825789e-02
+1.112500e+00	1.250000e-02	1.250000e-02	2.973336e-01	7.930680e-02	7.930680e-02
+1.137500e+00	1.250000e-02	1.250000e-02	4.117738e-01	8.068217e-02	8.068217e-02
+1.162500e+00	1.250000e-02	1.250000e-02	3.190156e-01	8.471526e-02	8.471526e-02
+1.187500e+00	1.250000e-02	1.250000e-02	3.366278e-01	5.934346e-02	5.934346e-02
+1.212500e+00	1.250000e-02	1.250000e-02	3.500744e-01	9.504189e-02	9.504189e-02
+1.237500e+00	1.250000e-02	1.250000e-02	4.824493e-01	5.514973e-02	5.514973e-02
+1.262500e+00	1.250000e-02	1.250000e-02	4.379612e-01	7.732852e-02	7.732852e-02
+1.287500e+00	1.250000e-02	1.250000e-02	5.073643e-01	1.071932e-01	1.071932e-01
+1.312500e+00	1.250000e-02	1.250000e-02	5.347543e-01	8.403193e-02	8.403193e-02
+1.337500e+00	1.250000e-02	1.250000e-02	5.216389e-01	9.030142e-02	9.030142e-02
+1.362500e+00	1.250000e-02	1.250000e-02	5.358088e-01	7.486829e-02	7.486829e-02
+1.387500e+00	1.250000e-02	1.250000e-02	5.662489e-01	8.176319e-02	8.176319e-02
+1.412500e+00	1.250000e-02	1.250000e-02	5.702053e-01	8.350441e-02	8.350441e-02
+1.437500e+00	1.250000e-02	1.250000e-02	5.810115e-01	8.241984e-02	8.241984e-02
+1.462500e+00	1.250000e-02	1.250000e-02	7.687066e-01	1.109086e-01	1.109086e-01
+1.487500e+00	1.250000e-02	1.250000e-02	7.784583e-01	1.091872e-01	1.091872e-01
+1.512500e+00	1.250000e-02	1.250000e-02	7.201488e-01	1.099275e-01	1.099275e-01
+1.537500e+00	1.250000e-02	1.250000e-02	6.629113e-01	1.089188e-01	1.089188e-01
+1.562500e+00	1.250000e-02	1.250000e-02	8.247677e-01	1.296240e-01	1.296240e-01
+1.587500e+00	1.250000e-02	1.250000e-02	6.951031e-01	9.262370e-02	9.262370e-02
+1.612500e+00	1.250000e-02	1.250000e-02	7.256390e-01	8.141964e-02	8.141964e-02
+1.637500e+00	1.250000e-02	1.250000e-02	7.464931e-01	7.850056e-02	7.850056e-02
+1.662500e+00	1.250000e-02	1.250000e-02	6.793122e-01	9.560708e-02	9.560708e-02
+1.687500e+00	1.250000e-02	1.250000e-02	6.319745e-01	9.546333e-02	9.546333e-02
+1.725000e+00	2.500000e-02	2.500000e-02	7.145976e-01	7.488217e-02	7.488217e-02
+1.775000e+00	2.500000e-02	2.500000e-02	7.725062e-01	5.885826e-02	5.885826e-02
+1.825000e+00	2.500000e-02	2.500000e-02	6.661880e-01	8.467058e-02	8.467058e-02
+1.875000e+00	2.500000e-02	2.500000e-02	7.400443e-01	5.367728e-02	5.367728e-02
+1.925000e+00	2.500000e-02	2.500000e-02	7.431380e-01	5.458022e-02	5.458022e-02
+1.975000e+00	2.500000e-02	2.500000e-02	7.178220e-01	6.496618e-02	6.496618e-02
+2.050000e+00	5.000000e-02	5.000000e-02	8.324191e-01	6.174042e-02	6.174042e-02
+2.150000e+00	5.000000e-02	5.000000e-02	8.026152e-01	5.883844e-02	5.883844e-02
+2.250000e+00	5.000000e-02	5.000000e-02	6.853384e-01	5.853167e-02	5.853167e-02
+2.350000e+00	5.000000e-02	5.000000e-02	4.902837e-01	3.902068e-02	3.902068e-02
+2.500000e+00	1.000000e-01	1.000000e-01	3.730832e-01	3.165495e-02	3.165495e-02
+2.700000e+00	1.000000e-01	1.000000e-01	1.658607e-01	2.817434e-02	2.817434e-02
+2.900000e+00	1.000000e-01	1.000000e-01	6.347065e-02	1.697029e-02	1.697029e-02
+3.087500e+00	8.750000e-02	8.750000e-02	1.340804e-02	1.046950e-02	1.046950e-02
+END YODA_SCATTER2D
+
diff --git a/analyses/pluginLEP/ALEPH_2016_I1492968.cc b/analyses/pluginLEP/ALEPH_2016_I1492968.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/ALEPH_2016_I1492968.cc
@@ -0,0 +1,138 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Projections/IdentifiedFinalState.hh"
+#include "Rivet/Projections/MissingMomentum.hh"
+
+namespace Rivet {
+
+  // TODO this calculation needs checked!
+  double impact(const FourMomentum& a, const FourMomentum& b) {
+    const Vector3 a3 = a.vector3();
+    const Vector3 b3 = b.vector3();
+
+    double impact = 0;
+    if (b3.polarRadius() !=0) {
+      impact = (a3).cross((a3-b3)).polarRadius() / (b3).polarRadius();
+    }
+    return impact;
+  } 
+  
+  /// @brief Add a short analysis description here
+  class ALEPH_2016_I1492968 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(ALEPH_2016_I1492968);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      // Initialise and register projections
+      const FinalState fs;
+      addProjection(fs, "FS");
+
+      FastJets jets(fs, FastJets::GENKTEE, 0.5, JetAlg::NO_MUONS, JetAlg::ALL_INVISIBLES);
+      //FastJets jets(fs, FastJets::ANTIKT, 0.5, JetAlg::NO_MUONS, JetAlg::ALL_INVISIBLES);
+      addProjection(jets, "Jets");
+
+      IdentifiedFinalState mu_id(fs);
+      mu_id.acceptIdPair(PID::MUON);
+      addProjection(mu_id, "MUONS");
+  
+      addProjection(MissingMomentum(fs), "MissingMomenta");      
+      // Book histograms
+      //_h_costheta = bookHisto1D(2, 1, 1);
+      _h_m_OS = bookHisto1D(3, 1, 1);
+      _h_m_SS = bookHisto1D(5, 1, 1);
+
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      const double weight = event.weight();
+
+      // B-jets
+      const Jets jets = apply<JetAlg>(event, "Jets").jetsByPt(Cuts::pT > 5*GeV); // tODO jet eta?
+      const Jets bjets = filter_select(jets,  [](const Jet& j) { return j.bTagged(); });
+      if (bjets.size()<2) vetoEvent;
+
+      // Muons
+      const Particles all_muons = applyProjection<IdentifiedFinalState>(event, "MUONS").particles(Cuts::pT>2.5/GeV, cmpMomByE);
+      const Particles b_muons = filter_select(all_muons, [](const Particle& m) {return cos(m.theta()) < 0.7; });
+      if (b_muons.size()<2) vetoEvent;
+
+      // Missing energy cut
+      const MissingMomentum& met = applyProjection<MissingMomentum>(event, "MissingMomenta");
+      double Pmiss = met.missingMomentum().p();
+      if (Pmiss/GeV>18) vetoEvent;
+    
+      // Impact paarameter considerations
+      double b_muon_0_impactdistance = min(impact(b_muons[0].origin(), bjets[0].momentum()),impact(b_muons[0].origin(), bjets[1].momentum()));
+      double b_muon_1_impactdistance = min(impact(b_muons[1].origin(), bjets[0].momentum()),impact(b_muons[1].origin(), bjets[1].momentum()));
+
+      // Impact parameter cut
+      if ((b_muon_0_impactdistance > 0.1) || (b_muon_1_impactdistance > 0.1)) vetoEvent;
+      
+      FourMomentum dimuon = b_muons[0].momentum() + b_muons[1].momentum();
+      
+      // Same sign
+      if (b_muons[0].charge()*b_muons[1].charge()>0) {
+        _h_m_SS->fill( dimuon.mass()/GeV, weight);
+      }
+      // Opposite sign
+      else {
+        _h_m_OS->fill( dimuon.mass()/GeV, weight);
+        //
+        //FourMomentum muonminus;
+        //if (b_muons[0].charge() < 0)  muonminus = b_muons[0].momentum();
+        //else muonminus = b_muons[1].momentum();
+        
+        //const LorentzTransform cms_boost = LorentzTransform::mkFrameTransformFromBeta(-dimuon.betaVec());
+        //FourMomentum boostedmuon = cms_boost.transform(muonminus);
+
+        //double cosmuonboosted = boostedmuon.vector3().dot(cms_boost.betaVec())
+          /// (boostedmuon.vector3().mod()*cms_boost.betaVec().mod());
+
+        //_h_costheta->fill( cosmuonboosted, weight);
+      }
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+
+      //normalize(_h_costheta);
+
+      // Normalize to data according to Arno.
+      normalize(_h_m_OS, 1387);
+      normalize(_h_m_SS, 1047);
+
+    }
+
+    //@}
+
+
+    /// @name Histograms
+    //@{
+    //Histo1DPtr _h_costheta;
+    Histo1DPtr _h_m_OS;
+    Histo1DPtr _h_m_SS;
+    //@}
+
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(ALEPH_2016_I1492968);
+
+
+}
diff --git a/analyses/pluginLEP/ALEPH_2016_I1492968.info b/analyses/pluginLEP/ALEPH_2016_I1492968.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/ALEPH_2016_I1492968.info
@@ -0,0 +1,29 @@
+Name: ALEPH_2016_I1492968
+Year: 2016
+Summary: Dimuon invariant mass in OS and SS channel.
+Experiment: ALEPH
+Collider: LEP
+InspireID: 1492968
+Status: UNVALIDATED
+Authors:
+ - Arno Heister <Arno.Heister@cern.ch>
+RunInfo: Z to bbar events, 1M events when running Z to bbar inclusively.
+NeedCrossSection: no
+Beams: [e+, e-]
+Energies: [91.2]
+Description:
+  'Measurement of the dimuon invariant mass (OS and SS) and related quantities in Z to bbar events with ALEPH archived data.'
+BibKey: Heister:2016stz
+BibTeX: '@article{Heister:2016stz,
+      author         = "Heister, Arno",
+      title          = "{Observation of an excess at 30 GeV in the opposite sign
+                        di-muon spectra of ${\rm Z} \to b\overline{ b} + {\rm X}$
+                        events recorded by the ALEPH experiment at LEP}",
+      year           = "2016",
+      eprint         = "1610.06536",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      SLACcitation   = "%%CITATION = ARXIV:1610.06536;%%"
+}'
+ToDo:
+ - Check normalisation
diff --git a/analyses/pluginLEP/ALEPH_2016_I1492968.plot b/analyses/pluginLEP/ALEPH_2016_I1492968.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/ALEPH_2016_I1492968.plot
@@ -0,0 +1,9 @@
+BEGIN PLOT /ALEPH_2016_I1492968/d03-x01-y01
+XLabel=$m_\text{OS}$ [GeV]
+YLabel=\text{Events}
+END PLOT
+
+BEGIN PLOT /ALEPH_2016_I1492968/d05-x01-y01
+XLabel=$m_\text{SS}$ [GeV]
+YLabel=\text{Events}
+END PLOT
diff --git a/analyses/pluginLEP/ALEPH_2016_I1492968.yoda b/analyses/pluginLEP/ALEPH_2016_I1492968.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/ALEPH_2016_I1492968.yoda
@@ -0,0 +1,214 @@
+BEGIN YODA_SCATTER2D /REF/ALEPH_2016_I1492968/d01-x01-y01
+IsRef=1
+Title=boosted muon- cos theta (side band)
+Type=Scatter2D
+XLabel=cos
+YLabel=dN/dcos
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-9.500000e-01	5.000000e-02	5.000000e-02	9.200000e+02	9.591663e+01	9.591663e+01
+-8.500000e-01	5.000000e-02	5.000000e-02	1.700000e+02	4.123106e+01	4.123106e+01
+-7.500000e-01	5.000000e-02	5.000000e-02	8.000000e+01	2.828427e+01	2.828427e+01
+-6.500000e-01	5.000000e-02	5.000000e-02	6.000000e+01	2.449490e+01	2.449490e+01
+-5.500000e-01	5.000000e-02	5.000000e-02	5.000000e+01	2.236068e+01	2.236068e+01
+-4.500000e-01	5.000000e-02	5.000000e-02	1.000000e+01	1.000000e+01	1.000000e+01
+-3.500000e-01	5.000000e-02	5.000000e-02	2.000000e+01	1.414214e+01	1.414214e+01
+-2.500000e-01	5.000000e-02	5.000000e-02	4.000000e+01	2.000000e+01	2.000000e+01
+-1.500000e-01	5.000000e-02	5.000000e-02	3.000000e+01	1.732051e+01	1.732051e+01
+-5.000000e-02	5.000000e-02	5.000000e-02	2.000000e+01	1.414214e+01	1.414214e+01
+5.000000e-02	5.000000e-02	5.000000e-02	5.000000e+01	2.236068e+01	2.236068e+01
+1.500000e-01	5.000000e-02	5.000000e-02	2.000000e+01	1.414214e+01	1.414214e+01
+2.500000e-01	5.000000e-02	5.000000e-02	4.000000e+01	2.000000e+01	2.000000e+01
+3.500000e-01	5.000000e-02	5.000000e-02	5.000000e+01	2.236068e+01	2.236068e+01
+4.500000e-01	5.000000e-02	5.000000e-02	3.000000e+01	1.732051e+01	1.732051e+01
+5.500000e-01	5.000000e-02	5.000000e-02	3.000000e+01	1.732051e+01	1.732051e+01
+6.500000e-01	5.000000e-02	5.000000e-02	1.000000e+02	3.162278e+01	3.162278e+01
+7.500000e-01	5.000000e-02	5.000000e-02	9.000000e+01	3.000000e+01	3.000000e+01
+8.500000e-01	5.000000e-02	5.000000e-02	1.900000e+02	4.358899e+01	4.358899e+01
+9.500000e-01	5.000000e-02	5.000000e-02	9.600000e+02	9.797959e+01	9.797959e+01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ALEPH_2016_I1492968/d02-x01-y01
+IsRef=1
+Title=boosted muon- cos theta (mass window)
+Type=Scatter2D
+XLabel=cos
+YLabel=dN/dcos
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-9.500000e-01	5.000000e-02	5.000000e-02	2.200000e+02	4.690416e+01	4.690416e+01
+-8.500000e-01	5.000000e-02	5.000000e-02	2.000000e+01	1.414214e+01	1.414214e+01
+-7.500000e-01	5.000000e-02	5.000000e-02	3.000000e+01	1.732051e+01	1.732051e+01
+-6.500000e-01	5.000000e-02	5.000000e-02	2.000000e+01	1.414214e+01	1.414214e+01
+-5.500000e-01	5.000000e-02	5.000000e-02	0.000000e+00	0.000000e+00	0.000000e+00
+-4.500000e-01	5.000000e-02	5.000000e-02	0.000000e+00	0.000000e+00	0.000000e+00
+-3.500000e-01	5.000000e-02	5.000000e-02	0.000000e+00	0.000000e+00	0.000000e+00
+-2.500000e-01	5.000000e-02	5.000000e-02	1.000000e+01	1.000000e+01	1.000000e+01
+-1.500000e-01	5.000000e-02	5.000000e-02	1.000000e+01	1.000000e+01	1.000000e+01
+-5.000000e-02	5.000000e-02	5.000000e-02	0.000000e+00	0.000000e+00	0.000000e+00
+5.000000e-02	5.000000e-02	5.000000e-02	2.000000e+01	1.414214e+01	1.414214e+01
+1.500000e-01	5.000000e-02	5.000000e-02	1.000000e+01	1.000000e+01	1.000000e+01
+2.500000e-01	5.000000e-02	5.000000e-02	2.000000e+01	1.414214e+01	1.414214e+01
+3.500000e-01	5.000000e-02	5.000000e-02	0.000000e+00	0.000000e+00	0.000000e+00
+4.500000e-01	5.000000e-02	5.000000e-02	0.000000e+00	0.000000e+00	0.000000e+00
+5.500000e-01	5.000000e-02	5.000000e-02	4.000000e+01	2.000000e+01	2.000000e+01
+6.500000e-01	5.000000e-02	5.000000e-02	1.000000e+01	1.000000e+01	1.000000e+01
+7.500000e-01	5.000000e-02	5.000000e-02	5.000000e+01	2.236068e+01	2.236068e+01
+8.500000e-01	5.000000e-02	5.000000e-02	6.000000e+01	2.449490e+01	2.449490e+01
+9.500000e-01	5.000000e-02	5.000000e-02	1.400000e+02	3.741657e+01	3.741657e+01
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ALEPH_2016_I1492968/d03-x01-y01
+IsRef=1
+Title=Histogram of binnedSignalDiMuonsOS__x
+Type=Scatter2D
+XLabel=m
+YLabel=Events
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	1.160000e+02	1.077033e+01	1.077033e+01
+1.500000e+00	5.000000e-01	5.000000e-01	2.590000e+02	1.609348e+01	1.609348e+01
+2.500000e+00	5.000000e-01	5.000000e-01	1.210000e+02	1.100000e+01	1.100000e+01
+3.500000e+00	5.000000e-01	5.000000e-01	1.040000e+02	1.019804e+01	1.019804e+01
+4.500000e+00	5.000000e-01	5.000000e-01	4.000000e+00	2.000000e+00	2.000000e+00
+5.500000e+00	5.000000e-01	5.000000e-01	1.400000e+01	3.741657e+00	3.741657e+00
+6.500000e+00	5.000000e-01	5.000000e-01	2.900000e+01	5.385165e+00	5.385165e+00
+7.500000e+00	5.000000e-01	5.000000e-01	3.300000e+01	5.744563e+00	5.744563e+00
+8.500000e+00	5.000000e-01	5.000000e-01	4.300000e+01	6.557439e+00	6.557439e+00
+9.500000e+00	5.000000e-01	5.000000e-01	4.700000e+01	6.855655e+00	6.855655e+00
+1.050000e+01	5.000000e-01	5.000000e-01	4.800000e+01	6.928203e+00	6.928203e+00
+1.150000e+01	5.000000e-01	5.000000e-01	5.800000e+01	7.615773e+00	7.615773e+00
+1.250000e+01	5.000000e-01	5.000000e-01	4.400000e+01	6.633250e+00	6.633250e+00
+1.350000e+01	5.000000e-01	5.000000e-01	5.000000e+01	7.071068e+00	7.071068e+00
+1.450000e+01	5.000000e-01	5.000000e-01	5.500000e+01	7.416198e+00	7.416198e+00
+1.550000e+01	5.000000e-01	5.000000e-01	3.900000e+01	6.244998e+00	6.244998e+00
+1.650000e+01	5.000000e-01	5.000000e-01	4.100000e+01	6.403124e+00	6.403124e+00
+1.750000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.567764e+00	5.567764e+00
+1.850000e+01	5.000000e-01	5.000000e-01	2.400000e+01	4.898979e+00	4.898979e+00
+1.950000e+01	5.000000e-01	5.000000e-01	2.300000e+01	4.795832e+00	4.795832e+00
+2.050000e+01	5.000000e-01	5.000000e-01	2.000000e+01	4.472136e+00	4.472136e+00
+2.150000e+01	5.000000e-01	5.000000e-01	2.100000e+01	4.582576e+00	4.582576e+00
+2.250000e+01	5.000000e-01	5.000000e-01	2.100000e+01	4.582576e+00	4.582576e+00
+2.350000e+01	5.000000e-01	5.000000e-01	2.300000e+01	4.795832e+00	4.795832e+00
+2.450000e+01	5.000000e-01	5.000000e-01	1.400000e+01	3.741657e+00	3.741657e+00
+2.550000e+01	5.000000e-01	5.000000e-01	1.900000e+01	4.358899e+00	4.358899e+00
+2.650000e+01	5.000000e-01	5.000000e-01	9.000000e+00	3.000000e+00	3.000000e+00
+2.750000e+01	5.000000e-01	5.000000e-01	9.000000e+00	3.000000e+00	3.000000e+00
+2.850000e+01	5.000000e-01	5.000000e-01	8.000000e+00	2.828427e+00	2.828427e+00
+2.950000e+01	5.000000e-01	5.000000e-01	1.200000e+01	3.464102e+00	3.464102e+00
+3.050000e+01	5.000000e-01	5.000000e-01	1.400000e+01	3.741657e+00	3.741657e+00
+3.150000e+01	5.000000e-01	5.000000e-01	7.000000e+00	2.645751e+00	2.645751e+00
+3.250000e+01	5.000000e-01	5.000000e-01	6.000000e+00	2.449490e+00	2.449490e+00
+3.350000e+01	5.000000e-01	5.000000e-01	5.000000e+00	2.236068e+00	2.236068e+00
+3.450000e+01	5.000000e-01	5.000000e-01	3.000000e+00	1.732051e+00	1.732051e+00
+3.550000e+01	5.000000e-01	5.000000e-01	5.000000e+00	2.236068e+00	2.236068e+00
+3.650000e+01	5.000000e-01	5.000000e-01	0.000000e+00	0.000000e+00	0.000000e+00
+3.750000e+01	5.000000e-01	5.000000e-01	0.000000e+00	0.000000e+00	0.000000e+00
+3.850000e+01	5.000000e-01	5.000000e-01	3.000000e+00	1.732051e+00	1.732051e+00
+3.950000e+01	5.000000e-01	5.000000e-01	1.000000e+00	1.000000e+00	1.000000e+00
+4.050000e+01	5.000000e-01	5.000000e-01	2.000000e+00	1.414214e+00	1.414214e+00
+4.150000e+01	5.000000e-01	5.000000e-01	0.000000e+00	0.000000e+00	0.000000e+00
+4.250000e+01	5.000000e-01	5.000000e-01	1.000000e+00	1.000000e+00	1.000000e+00
+4.350000e+01	5.000000e-01	5.000000e-01	0.000000e+00	0.000000e+00	0.000000e+00
+4.450000e+01	5.000000e-01	5.000000e-01	0.000000e+00	0.000000e+00	0.000000e+00
+4.550000e+01	5.000000e-01	5.000000e-01	1.000000e+00	1.000000e+00	1.000000e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ALEPH_2016_I1492968/d04-x01-y01
+IsRef=1
+Title=Histogram of binnedBackgroundElectronMuonsOS__x
+Type=Scatter2D
+XLabel=m
+YLabel=Events
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	2.650000e+02	1.627882e+01	1.627882e+01
+1.500000e+00	5.000000e-01	5.000000e-01	5.630000e+02	2.372762e+01	2.372762e+01
+2.500000e+00	5.000000e-01	5.000000e-01	2.570000e+02	1.603122e+01	1.603122e+01
+3.500000e+00	5.000000e-01	5.000000e-01	2.400000e+01	4.898979e+00	4.898979e+00
+4.500000e+00	5.000000e-01	5.000000e-01	1.600000e+01	4.000000e+00	4.000000e+00
+5.500000e+00	5.000000e-01	5.000000e-01	4.600000e+01	6.782330e+00	6.782330e+00
+6.500000e+00	5.000000e-01	5.000000e-01	6.300000e+01	7.937254e+00	7.937254e+00
+7.500000e+00	5.000000e-01	5.000000e-01	9.100000e+01	9.539392e+00	9.539392e+00
+8.500000e+00	5.000000e-01	5.000000e-01	8.600000e+01	9.273618e+00	9.273618e+00
+9.500000e+00	5.000000e-01	5.000000e-01	8.900000e+01	9.433981e+00	9.433981e+00
+1.050000e+01	5.000000e-01	5.000000e-01	9.600000e+01	9.797959e+00	9.797959e+00
+1.150000e+01	5.000000e-01	5.000000e-01	9.500000e+01	9.746794e+00	9.746794e+00
+1.250000e+01	5.000000e-01	5.000000e-01	9.500000e+01	9.746794e+00	9.746794e+00
+1.350000e+01	5.000000e-01	5.000000e-01	9.600000e+01	9.797959e+00	9.797959e+00
+1.450000e+01	5.000000e-01	5.000000e-01	7.400000e+01	8.602325e+00	8.602325e+00
+1.550000e+01	5.000000e-01	5.000000e-01	5.900000e+01	7.681146e+00	7.681146e+00
+1.650000e+01	5.000000e-01	5.000000e-01	6.600000e+01	8.124038e+00	8.124038e+00
+1.750000e+01	5.000000e-01	5.000000e-01	5.900000e+01	7.681146e+00	7.681146e+00
+1.850000e+01	5.000000e-01	5.000000e-01	4.400000e+01	6.633250e+00	6.633250e+00
+1.950000e+01	5.000000e-01	5.000000e-01	5.400000e+01	7.348469e+00	7.348469e+00
+2.050000e+01	5.000000e-01	5.000000e-01	4.200000e+01	6.480741e+00	6.480741e+00
+2.150000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.477226e+00	5.477226e+00
+2.250000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.477226e+00	5.477226e+00
+2.350000e+01	5.000000e-01	5.000000e-01	3.700000e+01	6.082763e+00	6.082763e+00
+2.450000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.477226e+00	5.477226e+00
+2.550000e+01	5.000000e-01	5.000000e-01	2.000000e+01	4.472136e+00	4.472136e+00
+2.650000e+01	5.000000e-01	5.000000e-01	1.400000e+01	3.741657e+00	3.741657e+00
+2.750000e+01	5.000000e-01	5.000000e-01	1.400000e+01	3.741657e+00	3.741657e+00
+2.850000e+01	5.000000e-01	5.000000e-01	7.000000e+00	2.645751e+00	2.645751e+00
+2.950000e+01	5.000000e-01	5.000000e-01	1.100000e+01	3.316625e+00	3.316625e+00
+3.050000e+01	5.000000e-01	5.000000e-01	9.000000e+00	3.000000e+00	3.000000e+00
+3.150000e+01	5.000000e-01	5.000000e-01	9.000000e+00	3.000000e+00	3.000000e+00
+3.250000e+01	5.000000e-01	5.000000e-01	9.000000e+00	3.000000e+00	3.000000e+00
+3.350000e+01	5.000000e-01	5.000000e-01	5.000000e+00	2.236068e+00	2.236068e+00
+3.450000e+01	5.000000e-01	5.000000e-01	4.000000e+00	2.000000e+00	2.000000e+00
+3.550000e+01	5.000000e-01	5.000000e-01	4.000000e+00	2.000000e+00	2.000000e+00
+3.650000e+01	5.000000e-01	5.000000e-01	1.000000e+00	1.000000e+00	1.000000e+00
+3.750000e+01	5.000000e-01	5.000000e-01	5.000000e+00	2.236068e+00	2.236068e+00
+3.850000e+01	5.000000e-01	5.000000e-01	2.000000e+00	1.414214e+00	1.414214e+00
+3.950000e+01	5.000000e-01	5.000000e-01	3.000000e+00	1.732051e+00	1.732051e+00
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/ALEPH_2016_I1492968/d05-x01-y01
+IsRef=1
+Title=Histogram of binnedDiMuonsSS__x
+Type=Scatter2D
+XLabel=m
+YLabel=Events
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+5.000000e-01	5.000000e-01	5.000000e-01	3.250000e+02	1.802776e+01	1.802776e+01
+1.500000e+00	5.000000e-01	5.000000e-01	3.500000e+01	5.916080e+00	5.916080e+00
+2.500000e+00	5.000000e-01	5.000000e-01	1.300000e+01	3.605551e+00	3.605551e+00
+3.500000e+00	5.000000e-01	5.000000e-01	5.000000e+00	2.236068e+00	2.236068e+00
+4.500000e+00	5.000000e-01	5.000000e-01	1.000000e+00	1.000000e+00	1.000000e+00
+5.500000e+00	5.000000e-01	5.000000e-01	1.200000e+01	3.464102e+00	3.464102e+00
+6.500000e+00	5.000000e-01	5.000000e-01	2.900000e+01	5.385165e+00	5.385165e+00
+7.500000e+00	5.000000e-01	5.000000e-01	5.000000e+01	7.071068e+00	7.071068e+00
+8.500000e+00	5.000000e-01	5.000000e-01	5.200000e+01	7.211103e+00	7.211103e+00
+9.500000e+00	5.000000e-01	5.000000e-01	6.100000e+01	7.810250e+00	7.810250e+00
+1.050000e+01	5.000000e-01	5.000000e-01	4.300000e+01	6.557439e+00	6.557439e+00
+1.150000e+01	5.000000e-01	5.000000e-01	4.800000e+01	6.928203e+00	6.928203e+00
+1.250000e+01	5.000000e-01	5.000000e-01	4.600000e+01	6.782330e+00	6.782330e+00
+1.350000e+01	5.000000e-01	5.000000e-01	5.200000e+01	7.211103e+00	7.211103e+00
+1.450000e+01	5.000000e-01	5.000000e-01	4.000000e+01	6.324555e+00	6.324555e+00
+1.550000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.830952e+00	5.830952e+00
+1.650000e+01	5.000000e-01	5.000000e-01	2.400000e+01	4.898979e+00	4.898979e+00
+1.750000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e+00	5.000000e+00
+1.850000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.196152e+00	5.196152e+00
+1.950000e+01	5.000000e-01	5.000000e-01	1.800000e+01	4.242641e+00	4.242641e+00
+2.050000e+01	5.000000e-01	5.000000e-01	9.000000e+00	3.000000e+00	3.000000e+00
+2.150000e+01	5.000000e-01	5.000000e-01	1.100000e+01	3.316625e+00	3.316625e+00
+2.250000e+01	5.000000e-01	5.000000e-01	1.400000e+01	3.741657e+00	3.741657e+00
+2.350000e+01	5.000000e-01	5.000000e-01	9.000000e+00	3.000000e+00	3.000000e+00
+2.450000e+01	5.000000e-01	5.000000e-01	1.500000e+01	3.872983e+00	3.872983e+00
+2.550000e+01	5.000000e-01	5.000000e-01	5.000000e+00	2.236068e+00	2.236068e+00
+2.650000e+01	5.000000e-01	5.000000e-01	1.000000e+01	3.162278e+00	3.162278e+00
+2.750000e+01	5.000000e-01	5.000000e-01	8.000000e+00	2.828427e+00	2.828427e+00
+2.850000e+01	5.000000e-01	5.000000e-01	2.000000e+00	1.414214e+00	1.414214e+00
+2.950000e+01	5.000000e-01	5.000000e-01	3.000000e+00	1.732051e+00	1.732051e+00
+3.050000e+01	5.000000e-01	5.000000e-01	3.000000e+00	1.732051e+00	1.732051e+00
+3.150000e+01	5.000000e-01	5.000000e-01	0.000000e+00	0.000000e+00	0.000000e+00
+3.250000e+01	5.000000e-01	5.000000e-01	3.000000e+00	1.732051e+00	1.732051e+00
+3.350000e+01	5.000000e-01	5.000000e-01	4.000000e+00	2.000000e+00	2.000000e+00
+3.450000e+01	5.000000e-01	5.000000e-01	5.000000e+00	2.236068e+00	2.236068e+00
+3.550000e+01	5.000000e-01	5.000000e-01	2.000000e+00	1.414214e+00	1.414214e+00
+3.650000e+01	5.000000e-01	5.000000e-01	1.000000e+00	1.000000e+00	1.000000e+00
+3.750000e+01	5.000000e-01	5.000000e-01	2.000000e+00	1.414214e+00	1.414214e+00
+3.850000e+01	5.000000e-01	5.000000e-01	0.000000e+00	0.000000e+00	0.000000e+00
+3.950000e+01	5.000000e-01	5.000000e-01	0.000000e+00	0.000000e+00	0.000000e+00
+4.050000e+01	5.000000e-01	5.000000e-01	0.000000e+00	0.000000e+00	0.000000e+00
+4.150000e+01	5.000000e-01	5.000000e-01	0.000000e+00	0.000000e+00	0.000000e+00
+4.250000e+01	5.000000e-01	5.000000e-01	1.000000e+00	1.000000e+00	1.000000e+00
+END YODA_SCATTER2D
+
diff --git a/analyses/pluginLEP/DELPHI_1991_I301657.cc b/analyses/pluginLEP/DELPHI_1991_I301657.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/DELPHI_1991_I301657.cc
@@ -0,0 +1,63 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+
+namespace Rivet {
+
+
+  /// @brief DELPHI LEP1 charged multiplicity, code basically a copy of the ALEPH one
+  /// @author Peter Richardson
+  class DELPHI_1991_I301657 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(DELPHI_1991_I301657);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+      const ChargedFinalState cfs;
+      declare(cfs, "CFS");
+
+      _histChTot = bookHisto1D(2, 1, 1);
+      _histAver  = bookProfile1D(4, 1, 1);
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+      const FinalState& cfs = apply<FinalState>(event, "CFS");
+      MSG_DEBUG("Total charged multiplicity = " << cfs.size());
+      _histChTot->fill(cfs.size(), event.weight());
+      _histAver->fill(sqrtS(),cfs.size(),event.weight());
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+      scale(_histChTot, 200.0/sumOfWeights()); // bin width (2) and %age (100)
+    }
+
+    //@}
+
+
+  private:
+
+    /// @name Histograms
+    //@{
+    Histo1DPtr _histChTot;
+    Profile1DPtr _histAver;
+    //@}
+
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(DELPHI_1991_I301657);
+
+
+}
diff --git a/analyses/pluginLEP/DELPHI_1991_I301657.info b/analyses/pluginLEP/DELPHI_1991_I301657.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/DELPHI_1991_I301657.info
@@ -0,0 +1,35 @@
+Name: DELPHI_1991_I301657
+Year: 1991
+Summary:  Hadronic Z decay charged multiplicity measurement
+Experiment: DELPHI
+Collider: LEP 1
+InspireID: 301657
+Status: VALIDATED
+Authors:
+ - Peter Richardson <peter.richardson@durham.ac.uk>
+References:
+- Z.Phys. C50 (1991) 185-194
+RunInfo: 
+  Hadronic Z decay events generated on the Z pole ($\sqrt{s} = 91.2$ GeV)
+NumEvents: 1000000
+Beams: [e+, e-]
+Energies: [91.2]
+PtCuts: [0]
+Description:
+  The charged particle multiplicity distribution of hadronic Z decays,
+  as measured on the peak of the Z resonance using the DELPHI detector at
+  LEP.
+BibKey: Abreu:1990cc
+BibTeX: '@article{Abreu:1990cc,
+      author         = "Abreu, P. and others",
+      title          = "{Charged particle multiplicity distributions in Z0
+                        hadronic decays}",
+      collaboration  = "DELPHI",
+      journal        = "Z. Phys.",
+      volume         = "C50",
+      year           = "1991",
+      pages          = "185-194",
+      doi            = "10.1007/BF01474073",
+      reportNumber   = "CERN-PPE-90-173",
+      SLACcitation   = "%%CITATION = ZEPYA,C50,185;%%"
+}'
diff --git a/analyses/pluginLEP/DELPHI_1991_I301657.plot b/analyses/pluginLEP/DELPHI_1991_I301657.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/DELPHI_1991_I301657.plot
@@ -0,0 +1,16 @@
+# BEGIN PLOT /DELPHI_1991_I301657/d02-x01-y01
+Title=Total charged multiplicity
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ (\%)
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+
+
+# BEGIN PLOT /DELPHI_1991_I301657/d04-x01-y01
+Title=Mean charged multiplicity
+LegendXPos=0.25
+LegendYPos=0.5
+LogY=0
+# END PLOT
+
diff --git a/analyses/pluginLEP/DELPHI_1991_I301657.yoda b/analyses/pluginLEP/DELPHI_1991_I301657.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/DELPHI_1991_I301657.yoda
@@ -0,0 +1,236 @@
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d01-x01-y01
+Path=/REF/DELPHI_1991_I301657/d01-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.0	0.0	0.0			46.0	0.0	0.0
+6.0	0.0	0.0			93.0	0.0	0.0
+7.0	0.0	0.0			180.0	0.0	0.0
+8.0	0.0	0.0			291.0	0.0	0.0
+9.0	0.0	0.0			507.0	0.0	0.0
+10.0	0.0	0.0			717.0	0.0	0.0
+11.0	0.0	0.0			1026.0	0.0	0.0
+12.0	0.0	0.0			1300.0	0.0	0.0
+13.0	0.0	0.0			1527.0	0.0	0.0
+14.0	0.0	0.0			1728.0	0.0	0.0
+15.0	0.0	0.0			1855.0	0.0	0.0
+16.0	0.0	0.0			1834.0	0.0	0.0
+17.0	0.0	0.0			1829.0	0.0	0.0
+18.0	0.0	0.0			1717.0	0.0	0.0
+19.0	0.0	0.0			1644.0	0.0	0.0
+20.0	0.0	0.0			1485.0	0.0	0.0
+21.0	0.0	0.0			1292.0	0.0	0.0
+22.0	0.0	0.0			1107.0	0.0	0.0
+23.0	0.0	0.0			1053.0	0.0	0.0
+24.0	0.0	0.0			822.0	0.0	0.0
+25.0	0.0	0.0			666.0	0.0	0.0
+26.0	0.0	0.0			572.0	0.0	0.0
+27.0	0.0	0.0			459.0	0.0	0.0
+28.0	0.0	0.0			380.0	0.0	0.0
+29.0	0.0	0.0			293.0	0.0	0.0
+30.0	0.0	0.0			250.0	0.0	0.0
+31.0	0.0	0.0			201.0	0.0	0.0
+32.0	0.0	0.0			129.0	0.0	0.0
+33.0	0.0	0.0			116.0	0.0	0.0
+34.0	0.0	0.0			74.0	0.0	0.0
+35.0	0.0	0.0			51.0	0.0	0.0
+36.0	0.0	0.0			43.0	0.0	0.0
+37.0	0.0	0.0			19.0	0.0	0.0
+38.0	0.0	0.0			13.0	0.0	0.0
+39.0	0.0	0.0			13.0	0.0	0.0
+40.0	0.0	0.0			7.0	0.0	0.0
+41.0	0.0	0.0			6.0	0.0	0.0
+42.0	0.0	0.0			7.0	0.0	0.0
+43.0	0.0	0.0			3.0	0.0	0.0
+44.0	0.0	0.0			3.0	0.0	0.0
+45.0	0.0	0.0			3.0	0.0	0.0
+47.0	0.0	0.0			2.0	0.0	0.0
+51.0	0.0	0.0			1.0	0.0	0.0
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d02-x01-y01
+Path=/REF/DELPHI_1991_I301657/d02-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			0.001	0.001	0.001
+4.0	1.0	1.0			0.025	0.008	0.008
+6.0	1.0	1.0			0.155	0.04	0.04
+8.0	1.0	1.0			0.674	0.055	0.055
+10.0	1.0	1.0			2.28	0.16	0.16
+12.0	1.0	1.0			4.85	0.28	0.28
+14.0	1.0	1.0			8.22	0.44	0.44
+16.0	1.0	1.0			11.1	0.58	0.58
+18.0	1.0	1.0			12.9	0.66	0.66
+20.0	1.0	1.0			13.1	0.67	0.67
+22.0	1.0	1.0			11.7	0.6	0.6
+24.0	1.0	1.0			9.79	0.51	0.51
+26.0	1.0	1.0			7.53	0.4	0.4
+28.0	1.0	1.0			5.76	0.31	0.31
+30.0	1.0	1.0			4.14	0.23	0.23
+32.0	1.0	1.0			2.93	0.17	0.17
+34.0	1.0	1.0			1.88	0.11	0.11
+36.0	1.0	1.0			1.22	0.08	0.08
+38.0	1.0	1.0			0.755	0.056	0.056
+40.0	1.0	1.0			0.478	0.1	0.1
+42.0	1.0	1.0			0.251	0.06	0.06
+44.0	1.0	1.0			0.143	0.035	0.035
+46.0	1.0	1.0			0.082	0.021	0.021
+48.0	1.0	1.0			0.02	0.006	0.006
+50.0	1.0	1.0			0.011	0.017	0.017
+52.0	1.0	1.0			0.006	0.005	0.005
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d03-x01-y01
+Path=/REF/DELPHI_1991_I301657/d03-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+1.0	0.0	0.0			0.124	0.02	0.02
+2.0	0.0	0.0			0.466	0.065	0.065
+3.0	0.0	0.0			1.21	0.17	0.17
+4.0	0.0	0.0			2.67	0.1	0.1
+5.0	0.0	0.0			4.56	0.17	0.17
+6.0	0.0	0.0			7.04	0.26	0.26
+7.0	0.0	0.0			8.58	0.31	0.31
+8.0	0.0	0.0			9.97	0.36	0.36
+9.0	0.0	0.0			10.2	0.36	0.36
+10.0	0.0	0.0			9.87	0.35	0.35
+11.0	0.0	0.0			8.85	0.32	0.32
+12.0	0.0	0.0			7.83	0.28	0.28
+13.0	0.0	0.0			6.44	0.23	0.23
+14.0	0.0	0.0			5.19	0.19	0.19
+15.0	0.0	0.0			4.14	0.15	0.15
+16.0	0.0	0.0			3.22	0.12	0.12
+17.0	0.0	0.0			2.49	0.094	0.094
+18.0	0.0	0.0			1.98	0.077	0.077
+19.0	0.0	0.0			1.4	0.056	0.056
+20.0	0.0	0.0			1.04	0.14	0.14
+21.0	0.0	0.0			0.76	0.1	0.1
+22.0	0.0	0.0			0.591	0.081	0.081
+23.0	0.0	0.0			0.426	0.059	0.059
+24.0	0.0	0.0			0.285	0.04	0.04
+25.0	0.0	0.0			0.212	0.031	0.031
+26.0	0.0	0.0			0.128	0.019	0.019
+27.0	0.0	0.0			0.076	0.014	0.014
+28.0	0.0	0.0			0.041	0.007	0.007
+29.0	0.0	0.0			0.042	0.021	0.021
+30.0	0.0	0.0			0.015	0.007	0.007
+31.0	0.0	0.0			0.015	0.005	0.005
+32.0	0.0	0.0			0.007	0.001	0.001
+33.0	0.0	0.0			0.003	0.001	0.001
+34.0	0.0	0.0			0.006	0.007	0.007
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d04-x01-y01
+Path=/REF/DELPHI_1991_I301657/d04-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.25	0.25	0.25			20.71	0.7710382610480494	0.7710382610480494
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d04-x01-y02
+Path=/REF/DELPHI_1991_I301657/d04-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.25	0.25	0.25			6.28	0.4310452412450461	0.4310452412450461
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d04-x01-y03
+Path=/REF/DELPHI_1991_I301657/d04-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.25	0.25	0.25			3.3	0.2009975124224178	0.2009975124224178
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d04-x01-y04
+Path=/REF/DELPHI_1991_I301657/d04-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.25	0.25	0.25			1.092	0.030149626863362672	0.030149626863362672
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d04-x01-y05
+Path=/REF/DELPHI_1991_I301657/d04-x01-y05
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.25	0.25	0.25			1.293	0.030149626863362672	0.030149626863362672
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d04-x01-y06
+Path=/REF/DELPHI_1991_I301657/d04-x01-y06
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.25	0.25	0.25			1.647	0.041	0.041
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d04-x01-y07
+Path=/REF/DELPHI_1991_I301657/d04-x01-y07
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.25	0.25	0.25			2.245	0.06236184731067546	0.06236184731067546
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d05-x01-y01
+Path=/REF/DELPHI_1991_I301657/d05-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.25	0.25	0.25			10.35	0.470425339453563	0.470425339453563
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d05-x01-y02
+Path=/REF/DELPHI_1991_I301657/d05-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.25	0.25	0.25			4.19	0.32062439083762795	0.32062439083762795
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d05-x01-y03
+Path=/REF/DELPHI_1991_I301657/d05-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.25	0.25	0.25			2.47	0.2002498439450079	0.2002498439450079
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d05-x01-y04
+Path=/REF/DELPHI_1991_I301657/d05-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.25	0.25	0.25			1.164	0.030149626863362672	0.030149626863362672
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d05-x01-y05
+Path=/REF/DELPHI_1991_I301657/d05-x01-y05
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.25	0.25	0.25			1.544	0.04044749683231337	0.04044749683231337
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d05-x01-y06
+Path=/REF/DELPHI_1991_I301657/d05-x01-y06
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.25	0.25	0.25			2.296	0.0626418390534633	0.0626418390534633
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/DELPHI_1991_I301657/d05-x01-y07
+Path=/REF/DELPHI_1991_I301657/d05-x01-y07
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.25	0.25	0.25			3.77	0.1034456378974	0.1034456378974
+# END YODA_SCATTER2D 
+
+
diff --git a/src/Analyses/DELPHI_1995_S3137023.cc b/analyses/pluginLEP/DELPHI_1995_S3137023.cc
rename from src/Analyses/DELPHI_1995_S3137023.cc
rename to analyses/pluginLEP/DELPHI_1995_S3137023.cc
diff --git a/data/anainfo/DELPHI_1995_S3137023.info b/analyses/pluginLEP/DELPHI_1995_S3137023.info
rename from data/anainfo/DELPHI_1995_S3137023.info
rename to analyses/pluginLEP/DELPHI_1995_S3137023.info
diff --git a/data/plotinfo/DELPHI_1995_S3137023.plot b/analyses/pluginLEP/DELPHI_1995_S3137023.plot
rename from data/plotinfo/DELPHI_1995_S3137023.plot
rename to analyses/pluginLEP/DELPHI_1995_S3137023.plot
diff --git a/data/refdata/DELPHI_1995_S3137023.yoda b/analyses/pluginLEP/DELPHI_1995_S3137023.yoda
rename from data/refdata/DELPHI_1995_S3137023.yoda
rename to analyses/pluginLEP/DELPHI_1995_S3137023.yoda
diff --git a/src/Analyses/DELPHI_1996_S3430090.cc b/analyses/pluginLEP/DELPHI_1996_S3430090.cc
rename from src/Analyses/DELPHI_1996_S3430090.cc
rename to analyses/pluginLEP/DELPHI_1996_S3430090.cc
diff --git a/data/anainfo/DELPHI_1996_S3430090.info b/analyses/pluginLEP/DELPHI_1996_S3430090.info
rename from data/anainfo/DELPHI_1996_S3430090.info
rename to analyses/pluginLEP/DELPHI_1996_S3430090.info
diff --git a/data/plotinfo/DELPHI_1996_S3430090.plot b/analyses/pluginLEP/DELPHI_1996_S3430090.plot
rename from data/plotinfo/DELPHI_1996_S3430090.plot
rename to analyses/pluginLEP/DELPHI_1996_S3430090.plot
diff --git a/data/refdata/DELPHI_1996_S3430090.yoda b/analyses/pluginLEP/DELPHI_1996_S3430090.yoda
rename from data/refdata/DELPHI_1996_S3430090.yoda
rename to analyses/pluginLEP/DELPHI_1996_S3430090.yoda
diff --git a/src/Analyses/DELPHI_1999_S3960137.cc b/analyses/pluginLEP/DELPHI_1999_S3960137.cc
rename from src/Analyses/DELPHI_1999_S3960137.cc
rename to analyses/pluginLEP/DELPHI_1999_S3960137.cc
diff --git a/data/anainfo/DELPHI_1999_S3960137.info b/analyses/pluginLEP/DELPHI_1999_S3960137.info
rename from data/anainfo/DELPHI_1999_S3960137.info
rename to analyses/pluginLEP/DELPHI_1999_S3960137.info
diff --git a/data/plotinfo/DELPHI_1999_S3960137.plot b/analyses/pluginLEP/DELPHI_1999_S3960137.plot
rename from data/plotinfo/DELPHI_1999_S3960137.plot
rename to analyses/pluginLEP/DELPHI_1999_S3960137.plot
diff --git a/data/refdata/DELPHI_1999_S3960137.yoda b/analyses/pluginLEP/DELPHI_1999_S3960137.yoda
rename from data/refdata/DELPHI_1999_S3960137.yoda
rename to analyses/pluginLEP/DELPHI_1999_S3960137.yoda
diff --git a/src/Analyses/DELPHI_2000_S4328825.cc b/analyses/pluginLEP/DELPHI_2000_S4328825.cc
rename from src/Analyses/DELPHI_2000_S4328825.cc
rename to analyses/pluginLEP/DELPHI_2000_S4328825.cc
diff --git a/data/anainfo/DELPHI_2000_S4328825.info b/analyses/pluginLEP/DELPHI_2000_S4328825.info
rename from data/anainfo/DELPHI_2000_S4328825.info
rename to analyses/pluginLEP/DELPHI_2000_S4328825.info
diff --git a/data/plotinfo/DELPHI_2000_S4328825.plot b/analyses/pluginLEP/DELPHI_2000_S4328825.plot
rename from data/plotinfo/DELPHI_2000_S4328825.plot
rename to analyses/pluginLEP/DELPHI_2000_S4328825.plot
diff --git a/data/refdata/DELPHI_2000_S4328825.yoda b/analyses/pluginLEP/DELPHI_2000_S4328825.yoda
rename from data/refdata/DELPHI_2000_S4328825.yoda
rename to analyses/pluginLEP/DELPHI_2000_S4328825.yoda
diff --git a/src/Analyses/DELPHI_2002_069_CONF_603.cc b/analyses/pluginLEP/DELPHI_2002_069_CONF_603.cc
rename from src/Analyses/DELPHI_2002_069_CONF_603.cc
rename to analyses/pluginLEP/DELPHI_2002_069_CONF_603.cc
--- a/src/Analyses/DELPHI_2002_069_CONF_603.cc
+++ b/analyses/pluginLEP/DELPHI_2002_069_CONF_603.cc
@@ -1,129 +1,124 @@
 // -*- C++ -*-
 #include "Rivet/Analysis.hh"
 #include "Rivet/Projections/Beam.hh"
 #include "Rivet/Projections/FinalState.hh"
 #include "Rivet/Projections/ChargedFinalState.hh"
 
-
-/// @todo Use inline PID functions instead
-#define IS_PARTON_PDGID(id) ( abs(id) <= 100 && abs(id) != 22 && (abs(id) < 11 || abs(id) > 18) )
-#define IS_BHADRON_PDGID(id) ( ((abs(id)/100)%10 == 5) || (abs(id) >= 5000 && abs(id) <= 5999) )
-
 namespace Rivet {
 
 
   /// @brief DELPHI b-fragmentation measurement
   /// @author Hendrik Hoeth
   class DELPHI_2002_069_CONF_603 : public Analysis {
   public:
 
     /// Constructor
     DELPHI_2002_069_CONF_603()
       : Analysis("DELPHI_2002_069_CONF_603")
     {
     }
 
 
     /// @name Analysis methods
     //@{
 
     /// Book projections and histograms
     void init() {
       declare(Beam(), "Beams");
       declare(ChargedFinalState(), "FS");
 
       _histXbprim     = bookHisto1D(1, 1, 1);
       _histXbweak     = bookHisto1D(2, 1, 1);
       _histMeanXbprim = bookProfile1D(4, 1, 1);
       _histMeanXbweak = bookProfile1D(5, 1, 1);
     }
 
 
     void analyze(const Event& e) {
       const FinalState& fs = apply<FinalState>(e, "FS");
       const size_t numParticles = fs.particles().size();
 
       // Even if we only generate hadronic events, we still need a cut on numCharged >= 2.
       if (numParticles < 2) {
         MSG_DEBUG("Failed ncharged cut");
         vetoEvent;
       }
       MSG_DEBUG("Passed ncharged cut");
 
       // Get event weight for histo filling
       const double weight = e.weight();
 
       // Get beams and average beam momentum
       const ParticlePair& beams = apply<Beam>(e, "Beams").beams();
       const double meanBeamMom = ( beams.first.p3().mod() +
                                    beams.second.p3().mod() ) / 2.0;
       MSG_DEBUG("Avg beam momentum = " << meanBeamMom);
 
 
       foreach (const GenParticle* p, particles(e.genEvent())) {
         const GenVertex* pv = p->production_vertex();
         const GenVertex* dv = p->end_vertex();
-        if (IS_BHADRON_PDGID(p->pdg_id())) {
+        if (PID::isBottomHadron(p->pdg_id())) {
           const double xp = p->momentum().e()/meanBeamMom;
 
           // If the B-hadron has a parton as parent, call it primary B-hadron:
           if (pv) {
             bool is_primary = false;
             for (GenVertex::particles_in_const_iterator pp = pv->particles_in_const_begin(); pp != pv->particles_in_const_end() ; ++pp) {
-              if (IS_PARTON_PDGID((*pp)->pdg_id())) is_primary = true;
+              if (PID::isParton((*pp)->pdg_id())) is_primary = true;
             }
             if (is_primary) {
               _histXbprim->fill(xp, weight);
               _histMeanXbprim->fill(_histMeanXbprim->bin(0).xMid(), xp, weight);
             }
           }
 
           // If the B-hadron has no B-hadron as a child, it decayed weakly:
           if (dv) {
             bool is_weak = true;
             for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin() ;
                  pp != dv->particles_out_const_end() ; ++pp) {
-              if (IS_BHADRON_PDGID((*pp)->pdg_id())) {
+              if (PID::isBottomHadron((*pp)->pdg_id())) {
                 is_weak = false;
               }
             }
             if (is_weak) {
               _histXbweak->fill(xp, weight);
               _histMeanXbweak->fill(_histMeanXbweak->bin(0).xMid(), xp, weight);
             }
           }
 
         }
       }
     }
 
 
     // Finalize
     void finalize() {
       normalize(_histXbprim);
       normalize(_histXbweak);
     }
 
 
   private:
 
     /// Store the weighted sums of numbers of charged / charged+neutral
     /// particles - used to calculate average number of particles for the
     /// inclusive single particle distributions' normalisations.
 
     Histo1DPtr _histXbprim;
     Histo1DPtr _histXbweak;
 
     Profile1DPtr _histMeanXbprim;
     Profile1DPtr _histMeanXbweak;
 
     //@}
 
   };
 
 
 
   // The hook for the plugin system
   DECLARE_RIVET_PLUGIN(DELPHI_2002_069_CONF_603);
 
 }
diff --git a/data/refdata/DELPHI_2002_069_CONF_603.dat b/analyses/pluginLEP/DELPHI_2002_069_CONF_603.dat
rename from data/refdata/DELPHI_2002_069_CONF_603.dat
rename to analyses/pluginLEP/DELPHI_2002_069_CONF_603.dat
diff --git a/data/anainfo/DELPHI_2002_069_CONF_603.info b/analyses/pluginLEP/DELPHI_2002_069_CONF_603.info
rename from data/anainfo/DELPHI_2002_069_CONF_603.info
rename to analyses/pluginLEP/DELPHI_2002_069_CONF_603.info
diff --git a/data/plotinfo/DELPHI_2002_069_CONF_603.plot b/analyses/pluginLEP/DELPHI_2002_069_CONF_603.plot
rename from data/plotinfo/DELPHI_2002_069_CONF_603.plot
rename to analyses/pluginLEP/DELPHI_2002_069_CONF_603.plot
diff --git a/data/refdata/DELPHI_2002_069_CONF_603.yoda b/analyses/pluginLEP/DELPHI_2002_069_CONF_603.yoda
rename from data/refdata/DELPHI_2002_069_CONF_603.yoda
rename to analyses/pluginLEP/DELPHI_2002_069_CONF_603.yoda
diff --git a/src/Analyses/DELPHI_2011_I890503.cc b/analyses/pluginLEP/DELPHI_2011_I890503.cc
rename from src/Analyses/DELPHI_2011_I890503.cc
rename to analyses/pluginLEP/DELPHI_2011_I890503.cc
diff --git a/data/anainfo/DELPHI_2011_I890503.info b/analyses/pluginLEP/DELPHI_2011_I890503.info
rename from data/anainfo/DELPHI_2011_I890503.info
rename to analyses/pluginLEP/DELPHI_2011_I890503.info
diff --git a/data/plotinfo/DELPHI_2011_I890503.plot b/analyses/pluginLEP/DELPHI_2011_I890503.plot
rename from data/plotinfo/DELPHI_2011_I890503.plot
rename to analyses/pluginLEP/DELPHI_2011_I890503.plot
diff --git a/data/refdata/DELPHI_2011_I890503.yoda b/analyses/pluginLEP/DELPHI_2011_I890503.yoda
rename from data/refdata/DELPHI_2011_I890503.yoda
rename to analyses/pluginLEP/DELPHI_2011_I890503.yoda
diff --git a/src/Analyses/L3_1992_I336180.cc b/analyses/pluginLEP/L3_1992_I336180.cc
rename from src/Analyses/L3_1992_I336180.cc
rename to analyses/pluginLEP/L3_1992_I336180.cc
diff --git a/data/anainfo/L3_1992_I336180.info b/analyses/pluginLEP/L3_1992_I336180.info
rename from data/anainfo/L3_1992_I336180.info
rename to analyses/pluginLEP/L3_1992_I336180.info
diff --git a/data/plotinfo/L3_1992_I336180.plot b/analyses/pluginLEP/L3_1992_I336180.plot
rename from data/plotinfo/L3_1992_I336180.plot
rename to analyses/pluginLEP/L3_1992_I336180.plot
diff --git a/data/refdata/L3_1992_I336180.yoda b/analyses/pluginLEP/L3_1992_I336180.yoda
rename from data/refdata/L3_1992_I336180.yoda
rename to analyses/pluginLEP/L3_1992_I336180.yoda
diff --git a/src/Analyses/L3_2004_I652683.cc b/analyses/pluginLEP/L3_2004_I652683.cc
rename from src/Analyses/L3_2004_I652683.cc
rename to analyses/pluginLEP/L3_2004_I652683.cc
diff --git a/data/anainfo/L3_2004_I652683.info b/analyses/pluginLEP/L3_2004_I652683.info
rename from data/anainfo/L3_2004_I652683.info
rename to analyses/pluginLEP/L3_2004_I652683.info
diff --git a/data/plotinfo/L3_2004_I652683.plot b/analyses/pluginLEP/L3_2004_I652683.plot
rename from data/plotinfo/L3_2004_I652683.plot
rename to analyses/pluginLEP/L3_2004_I652683.plot
diff --git a/data/refdata/L3_2004_I652683.yoda b/analyses/pluginLEP/L3_2004_I652683.yoda
rename from data/refdata/L3_2004_I652683.yoda
rename to analyses/pluginLEP/L3_2004_I652683.yoda
diff --git a/analyses/pluginLEP/OPAL_1992_I321190.cc b/analyses/pluginLEP/OPAL_1992_I321190.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/OPAL_1992_I321190.cc
@@ -0,0 +1,62 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+
+namespace Rivet {
+
+
+  /// @brief OPAL LEP1 charged multiplicity, code basically a copy of the ALEPH one
+  /// @author Peter Richardson
+  class OPAL_1992_I321190 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(OPAL_1992_I321190);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+      const ChargedFinalState cfs;
+      declare(cfs, "CFS");
+
+      _histChTot = bookHisto1D(1, 1, 1);
+      _histAver  = bookProfile1D(5, 1, 1);
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+      const FinalState& cfs = apply<FinalState>(event, "CFS");
+      MSG_DEBUG("Total charged multiplicity = " << cfs.size());
+      _histChTot->fill(cfs.size(), event.weight());
+      _histAver->fill(sqrtS(),cfs.size(),event.weight());
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+      scale(_histChTot, 200.0/sumOfWeights()); // bin width (2) and %age (100)
+    }
+
+    //@}
+
+
+  private:
+
+    /// @name Histograms
+    //@{
+    Histo1DPtr _histChTot;
+    Profile1DPtr _histAver;
+    //@}
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(OPAL_1992_I321190);
+
+
+}
diff --git a/analyses/pluginLEP/OPAL_1992_I321190.info b/analyses/pluginLEP/OPAL_1992_I321190.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/OPAL_1992_I321190.info
@@ -0,0 +1,35 @@
+Name: OPAL_1992_I321190
+Year: 1992
+Summary: Hadronic Z decay charged multiplicity measurement
+Experiment: OPAL
+Collider: LEP 1
+InspireID: 321190
+Status: VALIDATED
+Authors:
+ - Peter Richardson <peter.richardson@durham.ac.uk>
+References:
+ - Z.Phys. C53 (1992) 539-554
+RunInfo: 
+  Hadronic Z decay events generated on the Z pole ($\sqrt{s} = 91.2$ GeV)
+NumEvents: 1000000
+Beams: [e+, e-]
+Energies: [91.2]
+PtCuts: [0]
+Description:
+  The charged particle multiplicity distribution of hadronic Z decays,
+  as measured on the peak of the Z resonance using the OPAL detector at
+  LEP.
+BibKey: Acton:1991aa
+BibTeX: '@article{Acton:1991aa,
+      author         = "Acton, P. D. and others",
+      title          = "{A Study of charged particle multiplicities in hadronic
+                        decays of the Z0}",
+      collaboration  = "OPAL",
+      journal        = "Z. Phys.",
+      volume         = "C53",
+      year           = "1992",
+      pages          = "539-554",
+      doi            = "10.1007/BF01559731",
+      reportNumber   = "CERN-PPE-91-176",
+      SLACcitation   = "%%CITATION = ZEPYA,C53,539;%%"
+}'
diff --git a/analyses/pluginLEP/OPAL_1992_I321190.plot b/analyses/pluginLEP/OPAL_1992_I321190.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/OPAL_1992_I321190.plot
@@ -0,0 +1,16 @@
+# BEGIN PLOT /OPAL_1992_I321190/d01-x01-y01
+Title=Total charged multiplicity
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ (\%)
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+
+
+# BEGIN PLOT /OPAL_1992_I321190/d05-x01-y01
+Title=Mean charged multiplicity
+LegendXPos=0.25
+LegendYPos=0.5
+LogY=0
+# END PLOT
+
diff --git a/analyses/pluginLEP/OPAL_1992_I321190.yoda b/analyses/pluginLEP/OPAL_1992_I321190.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/OPAL_1992_I321190.yoda
@@ -0,0 +1,373 @@
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d01-x01-y01
+Path=/REF/OPAL_1992_I321190/d01-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			0.001	0.001	0.001
+4.0	1.0	1.0			0.016	0.02	0.02
+6.0	1.0	1.0			0.16	0.1044030650891055	0.1044030650891055
+8.0	1.0	1.0			0.68	0.18681541692269404	0.18681541692269404
+10.0	1.0	1.0			2.08	0.20615528128088303	0.20615528128088303
+12.0	1.0	1.0			4.69	0.25942243542145693	0.25942243542145693
+14.0	1.0	1.0			8.0	0.24839484696748443	0.24839484696748443
+16.0	1.0	1.0			10.79	0.4386342439892262	0.4386342439892262
+18.0	1.0	1.0			12.61	0.30610455730027936	0.30610455730027936
+20.0	1.0	1.0			12.85	0.3944616584663204	0.3944616584663204
+22.0	1.0	1.0			11.83	0.2758622844826744	0.2758622844826744
+24.0	1.0	1.0			9.99	0.38910152916687435	0.38910152916687435
+26.0	1.0	1.0			7.85	0.2051828452868319	0.2051828452868319
+28.0	1.0	1.0			5.95	0.21400934559032697	0.21400934559032697
+30.0	1.0	1.0			4.35	0.2024845673131659	0.2024845673131659
+32.0	1.0	1.0			2.97	0.12727922061357855	0.12727922061357855
+34.0	1.0	1.0			2.02	0.12041594578792295	0.12041594578792295
+36.0	1.0	1.0			1.29	0.12529964086141668	0.12529964086141668
+38.0	1.0	1.0			0.81	0.07810249675906655	0.07810249675906655
+40.0	1.0	1.0			0.47	0.06403124237432849	0.06403124237432849
+42.0	1.0	1.0			0.26	0.05	0.05
+44.0	1.0	1.0			0.17	0.05385164807134505	0.05385164807134505
+46.0	1.0	1.0			0.089	0.0412310562561766	0.0412310562561766
+48.0	1.0	1.0			0.042	0.022825424421026655	0.022825424421026655
+50.0	1.0	1.0			0.025	0.017492855684535902	0.017492855684535902
+52.0	1.0	1.0			0.011	0.009899494936611667	0.009899494936611667
+54.0	1.0	1.0			0.004	0.00565685424949238	0.00565685424949238
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d02-x01-y01
+Path=/REF/OPAL_1992_I321190/d02-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.017	0.008602325267042627	0.008602325267042627
+1.0	0.0	0.0			0.092	0.028600699292150183	0.028600699292150183
+2.0	0.0	0.0			0.446	0.0967729300992793	0.0967729300992793
+3.0	0.0	0.0			1.18	0.17088007490635063	0.17088007490635063
+4.0	0.0	0.0			2.74	0.30364452901377953	0.30364452901377953
+5.0	0.0	0.0			4.57	0.3794733192202055	0.3794733192202055
+6.0	0.0	0.0			6.86	0.30886890422961005	0.30886890422961005
+7.0	0.0	0.0			8.52	0.2262741699796952	0.2262741699796952
+8.0	0.0	0.0			9.89	0.6332456079595026	0.6332456079595026
+9.0	0.0	0.0			10.02	0.3535533905932738	0.3535533905932738
+10.0	0.0	0.0			9.72	0.34481879299133333	0.34481879299133333
+11.0	0.0	0.0			8.68	0.3138470965295043	0.3138470965295043
+12.0	0.0	0.0			7.64	0.22671568097509268	0.22671568097509268
+13.0	0.0	0.0			6.42	0.21400934559032697	0.21400934559032697
+14.0	0.0	0.0			5.26	0.19209372712298547	0.19209372712298547
+15.0	0.0	0.0			4.24	0.13601470508735444	0.13601470508735444
+16.0	0.0	0.0			3.33	0.1118033988749895	0.1118033988749895
+17.0	0.0	0.0			2.62	0.1063014581273465	0.1063014581273465
+18.0	0.0	0.0			2.02	0.09899494936611666	0.09899494936611666
+19.0	0.0	0.0			1.55	0.130384048104053	0.130384048104053
+20.0	0.0	0.0			1.18	0.1	0.1
+21.0	0.0	0.0			0.856	0.08521150157109075	0.08521150157109075
+22.0	0.0	0.0			0.646	0.06747592163134936	0.06747592163134936
+23.0	0.0	0.0			0.462	0.07343023900274327	0.07343023900274327
+24.0	0.0	0.0			0.326	0.06020797289396147	0.06020797289396147
+25.0	0.0	0.0			0.25	0.05866856057549051	0.05866856057549051
+26.0	0.0	0.0			0.164	0.05503635162326806	0.05503635162326806
+27.0	0.0	0.0			0.103	0.044384682042344296	0.044384682042344296
+28.0	0.0	0.0			0.067	0.030870698080866264	0.030870698080866264
+29.0	0.0	0.0			0.046	0.02418677324489565	0.02418677324489565
+30.0	0.0	0.0			0.03	0.016643316977093238	0.016643316977093238
+31.0	0.0	0.0			0.017	0.0078102496759066544	0.0078102496759066544
+32.0	0.0	0.0			0.011	0.007071067811865475	0.007071067811865475
+33.0	0.0	0.0			0.0052	0.006280127387243033	0.006280127387243033
+34.0	0.0	0.0			0.002	0.0030479501308256344	0.0030479501308256344
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d03-x01-y01
+Path=/REF/OPAL_1992_I321190/d03-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	0.0	0.0			0.0054	0.0054	0.0054
+4.0	0.0	0.0			0.06	0.07	0.07
+6.0	0.0	0.0			0.39	0.2433105012119288	0.2433105012119288
+8.0	0.0	0.0			1.52	0.0806225774829855	0.0806225774829855
+10.0	0.0	0.0			4.02	0.3764306044943742	0.3764306044943742
+12.0	0.0	0.0			7.54	0.40853396431630995	0.40853396431630995
+14.0	0.0	0.0			11.06	0.32449961479175904	0.32449961479175904
+16.0	0.0	0.0			13.28	0.5292447448959696	0.5292447448959696
+18.0	0.0	0.0			13.78	0.3440930106817051	0.3440930106817051
+20.0	0.0	0.0			12.63	0.38078865529319544	0.38078865529319544
+22.0	0.0	0.0			10.53	0.2701851217221259	0.2701851217221259
+24.0	0.0	0.0			8.13	0.31764760348537185	0.31764760348537185
+26.0	0.0	0.0			6.01	0.17691806012954134	0.17691806012954134
+28.0	0.0	0.0			4.13	0.16278820596099705	0.16278820596099705
+30.0	0.0	0.0			2.74	0.14212670403551894	0.14212670403551894
+32.0	0.0	0.0			1.76	0.08602325267042628	0.08602325267042628
+34.0	0.0	0.0			1.08	0.07071067811865477	0.07071067811865477
+36.0	0.0	0.0			0.62	0.06403124237432849	0.06403124237432849
+38.0	0.0	0.0			0.36	0.042426406871192854	0.042426406871192854
+40.0	0.0	0.0			0.21	0.03605551275463989	0.03605551275463989
+42.0	0.0	0.0			0.1	0.0282842712474619	0.0282842712474619
+44.0	0.0	0.0			0.055	0.0206155281280883	0.0206155281280883
+46.0	0.0	0.0			0.028	0.016278820596099707	0.016278820596099707
+48.0	0.0	0.0			0.015	0.011401754250991379	0.011401754250991379
+50.0	0.0	0.0			0.005	0.005	0.005
+52.0	0.0	0.0			0.002	0.0022360679774997894	0.0022360679774997894
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d04-x01-y01
+Path=/REF/OPAL_1992_I321190/d04-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.046	0.020518284528683192	0.020518284528683192
+1.0	0.0	0.0			0.192	0.05590169943749475	0.05590169943749475
+2.0	0.0	0.0			0.818	0.1676305461424021	0.1676305461424021
+3.0	0.0	0.0			2.02	0.29120439557122074	0.29120439557122074
+4.0	0.0	0.0			4.16	0.4729693436154187	0.4729693436154187
+5.0	0.0	0.0			6.38	0.5288667128870941	0.5288667128870941
+6.0	0.0	0.0			8.84	0.38483762809787714	0.38483762809787714
+7.0	0.0	0.0			10.13	0.2624880949681338	0.2624880949681338
+8.0	0.0	0.0			10.91	0.6744627491566899	0.6744627491566899
+9.0	0.0	0.0			10.32	0.36235341863986875	0.36235341863986875
+10.0	0.0	0.0			9.44	0.33120990323358385	0.33120990323358385
+11.0	0.0	0.0			8.03	0.291547594742265	0.291547594742265
+12.0	0.0	0.0			6.75	0.2051828452868319	0.2051828452868319
+13.0	0.0	0.0			5.37	0.18439088914585774	0.18439088914585774
+14.0	0.0	0.0			4.27	0.16278820596099705	0.16278820596099705
+15.0	0.0	0.0			3.28	0.10816653826391967	0.10816653826391967
+16.0	0.0	0.0			2.49	0.08944271909999159	0.08944271909999159
+17.0	0.0	0.0			1.85	0.08602325267042628	0.08602325267042628
+18.0	0.0	0.0			1.4	0.07810249675906655	0.07810249675906655
+19.0	0.0	0.0			1.02	0.08602325267042628	0.08602325267042628
+20.0	0.0	0.0			0.73	0.0636553218513582	0.0636553218513582
+21.0	0.0	0.0			0.51	0.05590169943749474	0.05590169943749474
+22.0	0.0	0.0			0.353	0.041773197148410844	0.041773197148410844
+23.0	0.0	0.0			0.232	0.040607881008493905	0.040607881008493905
+24.0	0.0	0.0			0.16	0.0340587727318528	0.0340587727318528
+25.0	0.0	0.0			0.109	0.029068883707497266	0.029068883707497266
+26.0	0.0	0.0			0.068	0.02441311123146741	0.02441311123146741
+27.0	0.0	0.0			0.046	0.021633307652783935	0.021633307652783935
+28.0	0.0	0.0			0.03	0.016401219466856725	0.016401219466856725
+29.0	0.0	0.0			0.013	0.009219544457292887	0.009219544457292887
+30.0	0.0	0.0			0.012	0.00848528137423857	0.00848528137423857
+31.0	0.0	0.0			0.0058	0.004472135954999579	0.004472135954999579
+32.0	0.0	0.0			0.0052	0.006003332407921454	0.006003332407921454
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d05-x01-y01
+Path=/REF/OPAL_1992_I321190/d05-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			21.4	0.43046486500061765	0.43046486500061765
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d05-x01-y02
+Path=/REF/OPAL_1992_I321190/d05-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			6.49	0.2009975124224178	0.2009975124224178
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d05-x01-y03
+Path=/REF/OPAL_1992_I321190/d05-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			3.3	0.11045361017187261	0.11045361017187261
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d05-x01-y04
+Path=/REF/OPAL_1992_I321190/d05-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			1.092	0.0070178344238091	0.0070178344238091
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d05-x01-y05
+Path=/REF/OPAL_1992_I321190/d05-x01-y05
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			1.293	0.025079872407968908	0.025079872407968908
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d05-x01-y06
+Path=/REF/OPAL_1992_I321190/d05-x01-y06
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			1.649	0.07011419257183242	0.07011419257183242
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d05-x01-y07
+Path=/REF/OPAL_1992_I321190/d05-x01-y07
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			2.251	0.17029386365926402	0.17029386365926402
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d06-x01-y01
+Path=/REF/OPAL_1992_I321190/d06-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			10.7	0.191049731745428	0.191049731745428
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d06-x01-y02
+Path=/REF/OPAL_1992_I321190/d06-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			4.4	0.130384048104053	0.130384048104053
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d06-x01-y03
+Path=/REF/OPAL_1992_I321190/d06-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			2.431	0.0644980619863884	0.0644980619863884
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d06-x01-y04
+Path=/REF/OPAL_1992_I321190/d06-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			1.169	0.009055385138137416	0.009055385138137416
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d06-x01-y05
+Path=/REF/OPAL_1992_I321190/d06-x01-y05
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			1.563	0.03512833614050059	0.03512833614050059
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d06-x01-y06
+Path=/REF/OPAL_1992_I321190/d06-x01-y06
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			2.348	0.1004987562112089	0.1004987562112089
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d06-x01-y07
+Path=/REF/OPAL_1992_I321190/d06-x01-y07
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			3.899	0.28139651739138494	0.28139651739138494
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d07-x01-y01
+Path=/REF/OPAL_1992_I321190/d07-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			19.41	0.4004996878900158	0.4004996878900158
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d07-x01-y02
+Path=/REF/OPAL_1992_I321190/d07-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			6.06	0.161245154965971	0.161245154965971
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d07-x01-y03
+Path=/REF/OPAL_1992_I321190/d07-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			3.2	0.1004987562112089	0.1004987562112089
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d07-x01-y04
+Path=/REF/OPAL_1992_I321190/d07-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			1.0975	0.006020797289396148	0.006020797289396148
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d07-x01-y05
+Path=/REF/OPAL_1992_I321190/d07-x01-y05
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			1.311	0.02009975124224178	0.02009975124224178
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d07-x01-y06
+Path=/REF/OPAL_1992_I321190/d07-x01-y06
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			1.694	0.050159744815937816	0.050159744815937816
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d07-x01-y07
+Path=/REF/OPAL_1992_I321190/d07-x01-y07
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			2.349	0.12050311199301036	0.12050311199301036
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d08-x01-y01
+Path=/REF/OPAL_1992_I321190/d08-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			9.69	0.18027756377319948	0.18027756377319948
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d08-x01-y02
+Path=/REF/OPAL_1992_I321190/d08-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			4.1	0.12041594578792295	0.12041594578792295
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d08-x01-y03
+Path=/REF/OPAL_1992_I321190/d08-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			2.364	0.06648308055437865	0.06648308055437865
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d08-x01-y04
+Path=/REF/OPAL_1992_I321190/d08-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			1.179	0.01004987562112089	0.01004987562112089
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d08-x01-y05
+Path=/REF/OPAL_1992_I321190/d08-x01-y05
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			1.597	0.041194659848091966	0.041194659848091966
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d08-x01-y06
+Path=/REF/OPAL_1992_I321190/d08-x01-y06
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			2.439	0.12050311199301036	0.12050311199301036
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_1992_I321190/d08-x01-y07
+Path=/REF/OPAL_1992_I321190/d08-x01-y07
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+91.2	0.5	0.5			4.133	0.3415977166200032	0.3415977166200032
+# END YODA_SCATTER2D 
+
+
diff --git a/src/Analyses/OPAL_1993_I342766.cc b/analyses/pluginLEP/OPAL_1993_I342766.cc
rename from src/Analyses/OPAL_1993_I342766.cc
rename to analyses/pluginLEP/OPAL_1993_I342766.cc
diff --git a/data/anainfo/OPAL_1993_I342766.info b/analyses/pluginLEP/OPAL_1993_I342766.info
rename from data/anainfo/OPAL_1993_I342766.info
rename to analyses/pluginLEP/OPAL_1993_I342766.info
diff --git a/data/plotinfo/OPAL_1993_I342766.plot b/analyses/pluginLEP/OPAL_1993_I342766.plot
rename from data/plotinfo/OPAL_1993_I342766.plot
rename to analyses/pluginLEP/OPAL_1993_I342766.plot
diff --git a/data/refdata/OPAL_1993_I342766.yoda b/analyses/pluginLEP/OPAL_1993_I342766.yoda
rename from data/refdata/OPAL_1993_I342766.yoda
rename to analyses/pluginLEP/OPAL_1993_I342766.yoda
diff --git a/src/Analyses/OPAL_1993_S2692198.cc b/analyses/pluginLEP/OPAL_1993_S2692198.cc
rename from src/Analyses/OPAL_1993_S2692198.cc
rename to analyses/pluginLEP/OPAL_1993_S2692198.cc
diff --git a/data/anainfo/OPAL_1993_S2692198.info b/analyses/pluginLEP/OPAL_1993_S2692198.info
rename from data/anainfo/OPAL_1993_S2692198.info
rename to analyses/pluginLEP/OPAL_1993_S2692198.info
diff --git a/data/plotinfo/OPAL_1993_S2692198.plot b/analyses/pluginLEP/OPAL_1993_S2692198.plot
rename from data/plotinfo/OPAL_1993_S2692198.plot
rename to analyses/pluginLEP/OPAL_1993_S2692198.plot
diff --git a/data/refdata/OPAL_1993_S2692198.yoda b/analyses/pluginLEP/OPAL_1993_S2692198.yoda
rename from data/refdata/OPAL_1993_S2692198.yoda
rename to analyses/pluginLEP/OPAL_1993_S2692198.yoda
diff --git a/src/Analyses/OPAL_1994_S2927284.cc b/analyses/pluginLEP/OPAL_1994_S2927284.cc
rename from src/Analyses/OPAL_1994_S2927284.cc
rename to analyses/pluginLEP/OPAL_1994_S2927284.cc
diff --git a/data/anainfo/OPAL_1994_S2927284.info b/analyses/pluginLEP/OPAL_1994_S2927284.info
rename from data/anainfo/OPAL_1994_S2927284.info
rename to analyses/pluginLEP/OPAL_1994_S2927284.info
diff --git a/data/plotinfo/OPAL_1994_S2927284.plot b/analyses/pluginLEP/OPAL_1994_S2927284.plot
rename from data/plotinfo/OPAL_1994_S2927284.plot
rename to analyses/pluginLEP/OPAL_1994_S2927284.plot
diff --git a/data/refdata/OPAL_1994_S2927284.yoda b/analyses/pluginLEP/OPAL_1994_S2927284.yoda
rename from data/refdata/OPAL_1994_S2927284.yoda
rename to analyses/pluginLEP/OPAL_1994_S2927284.yoda
diff --git a/src/Analyses/OPAL_1995_S3198391.cc b/analyses/pluginLEP/OPAL_1995_S3198391.cc
rename from src/Analyses/OPAL_1995_S3198391.cc
rename to analyses/pluginLEP/OPAL_1995_S3198391.cc
diff --git a/data/anainfo/OPAL_1995_S3198391.info b/analyses/pluginLEP/OPAL_1995_S3198391.info
rename from data/anainfo/OPAL_1995_S3198391.info
rename to analyses/pluginLEP/OPAL_1995_S3198391.info
diff --git a/data/plotinfo/OPAL_1995_S3198391.plot b/analyses/pluginLEP/OPAL_1995_S3198391.plot
rename from data/plotinfo/OPAL_1995_S3198391.plot
rename to analyses/pluginLEP/OPAL_1995_S3198391.plot
diff --git a/data/refdata/OPAL_1995_S3198391.yoda b/analyses/pluginLEP/OPAL_1995_S3198391.yoda
rename from data/refdata/OPAL_1995_S3198391.yoda
rename to analyses/pluginLEP/OPAL_1995_S3198391.yoda
diff --git a/src/Analyses/OPAL_1996_S3257789.cc b/analyses/pluginLEP/OPAL_1996_S3257789.cc
rename from src/Analyses/OPAL_1996_S3257789.cc
rename to analyses/pluginLEP/OPAL_1996_S3257789.cc
diff --git a/data/anainfo/OPAL_1996_S3257789.info b/analyses/pluginLEP/OPAL_1996_S3257789.info
rename from data/anainfo/OPAL_1996_S3257789.info
rename to analyses/pluginLEP/OPAL_1996_S3257789.info
diff --git a/data/plotinfo/OPAL_1996_S3257789.plot b/analyses/pluginLEP/OPAL_1996_S3257789.plot
rename from data/plotinfo/OPAL_1996_S3257789.plot
rename to analyses/pluginLEP/OPAL_1996_S3257789.plot
diff --git a/data/refdata/OPAL_1996_S3257789.yoda b/analyses/pluginLEP/OPAL_1996_S3257789.yoda
rename from data/refdata/OPAL_1996_S3257789.yoda
rename to analyses/pluginLEP/OPAL_1996_S3257789.yoda
diff --git a/src/Analyses/OPAL_1997_S3396100.cc b/analyses/pluginLEP/OPAL_1997_S3396100.cc
rename from src/Analyses/OPAL_1997_S3396100.cc
rename to analyses/pluginLEP/OPAL_1997_S3396100.cc
diff --git a/data/anainfo/OPAL_1997_S3396100.info b/analyses/pluginLEP/OPAL_1997_S3396100.info
rename from data/anainfo/OPAL_1997_S3396100.info
rename to analyses/pluginLEP/OPAL_1997_S3396100.info
diff --git a/data/plotinfo/OPAL_1997_S3396100.plot b/analyses/pluginLEP/OPAL_1997_S3396100.plot
rename from data/plotinfo/OPAL_1997_S3396100.plot
rename to analyses/pluginLEP/OPAL_1997_S3396100.plot
diff --git a/data/refdata/OPAL_1997_S3396100.yoda b/analyses/pluginLEP/OPAL_1997_S3396100.yoda
rename from data/refdata/OPAL_1997_S3396100.yoda
rename to analyses/pluginLEP/OPAL_1997_S3396100.yoda
diff --git a/src/Analyses/OPAL_1997_S3608263.cc b/analyses/pluginLEP/OPAL_1997_S3608263.cc
rename from src/Analyses/OPAL_1997_S3608263.cc
rename to analyses/pluginLEP/OPAL_1997_S3608263.cc
diff --git a/data/anainfo/OPAL_1997_S3608263.info b/analyses/pluginLEP/OPAL_1997_S3608263.info
rename from data/anainfo/OPAL_1997_S3608263.info
rename to analyses/pluginLEP/OPAL_1997_S3608263.info
diff --git a/data/plotinfo/OPAL_1997_S3608263.plot b/analyses/pluginLEP/OPAL_1997_S3608263.plot
rename from data/plotinfo/OPAL_1997_S3608263.plot
rename to analyses/pluginLEP/OPAL_1997_S3608263.plot
diff --git a/data/refdata/OPAL_1997_S3608263.yoda b/analyses/pluginLEP/OPAL_1997_S3608263.yoda
rename from data/refdata/OPAL_1997_S3608263.yoda
rename to analyses/pluginLEP/OPAL_1997_S3608263.yoda
diff --git a/src/Analyses/OPAL_1998_S3702294.cc b/analyses/pluginLEP/OPAL_1998_S3702294.cc
rename from src/Analyses/OPAL_1998_S3702294.cc
rename to analyses/pluginLEP/OPAL_1998_S3702294.cc
diff --git a/data/anainfo/OPAL_1998_S3702294.info b/analyses/pluginLEP/OPAL_1998_S3702294.info
rename from data/anainfo/OPAL_1998_S3702294.info
rename to analyses/pluginLEP/OPAL_1998_S3702294.info
diff --git a/data/plotinfo/OPAL_1998_S3702294.plot b/analyses/pluginLEP/OPAL_1998_S3702294.plot
rename from data/plotinfo/OPAL_1998_S3702294.plot
rename to analyses/pluginLEP/OPAL_1998_S3702294.plot
diff --git a/data/refdata/OPAL_1998_S3702294.yoda b/analyses/pluginLEP/OPAL_1998_S3702294.yoda
rename from data/refdata/OPAL_1998_S3702294.yoda
rename to analyses/pluginLEP/OPAL_1998_S3702294.yoda
diff --git a/src/Analyses/OPAL_1998_S3749908.cc b/analyses/pluginLEP/OPAL_1998_S3749908.cc
rename from src/Analyses/OPAL_1998_S3749908.cc
rename to analyses/pluginLEP/OPAL_1998_S3749908.cc
diff --git a/data/anainfo/OPAL_1998_S3749908.info b/analyses/pluginLEP/OPAL_1998_S3749908.info
rename from data/anainfo/OPAL_1998_S3749908.info
rename to analyses/pluginLEP/OPAL_1998_S3749908.info
diff --git a/data/plotinfo/OPAL_1998_S3749908.plot b/analyses/pluginLEP/OPAL_1998_S3749908.plot
rename from data/plotinfo/OPAL_1998_S3749908.plot
rename to analyses/pluginLEP/OPAL_1998_S3749908.plot
diff --git a/data/refdata/OPAL_1998_S3749908.yoda b/analyses/pluginLEP/OPAL_1998_S3749908.yoda
rename from data/refdata/OPAL_1998_S3749908.yoda
rename to analyses/pluginLEP/OPAL_1998_S3749908.yoda
diff --git a/src/Analyses/OPAL_1998_S3780481.cc b/analyses/pluginLEP/OPAL_1998_S3780481.cc
rename from src/Analyses/OPAL_1998_S3780481.cc
rename to analyses/pluginLEP/OPAL_1998_S3780481.cc
diff --git a/data/anainfo/OPAL_1998_S3780481.info b/analyses/pluginLEP/OPAL_1998_S3780481.info
rename from data/anainfo/OPAL_1998_S3780481.info
rename to analyses/pluginLEP/OPAL_1998_S3780481.info
diff --git a/data/plotinfo/OPAL_1998_S3780481.plot b/analyses/pluginLEP/OPAL_1998_S3780481.plot
rename from data/plotinfo/OPAL_1998_S3780481.plot
rename to analyses/pluginLEP/OPAL_1998_S3780481.plot
diff --git a/data/refdata/OPAL_1998_S3780481.yoda b/analyses/pluginLEP/OPAL_1998_S3780481.yoda
rename from data/refdata/OPAL_1998_S3780481.yoda
rename to analyses/pluginLEP/OPAL_1998_S3780481.yoda
diff --git a/src/Analyses/OPAL_2000_S4418603.cc b/analyses/pluginLEP/OPAL_2000_S4418603.cc
rename from src/Analyses/OPAL_2000_S4418603.cc
rename to analyses/pluginLEP/OPAL_2000_S4418603.cc
diff --git a/data/anainfo/OPAL_2000_S4418603.info b/analyses/pluginLEP/OPAL_2000_S4418603.info
rename from data/anainfo/OPAL_2000_S4418603.info
rename to analyses/pluginLEP/OPAL_2000_S4418603.info
diff --git a/data/plotinfo/OPAL_2000_S4418603.plot b/analyses/pluginLEP/OPAL_2000_S4418603.plot
rename from data/plotinfo/OPAL_2000_S4418603.plot
rename to analyses/pluginLEP/OPAL_2000_S4418603.plot
diff --git a/data/refdata/OPAL_2000_S4418603.yoda b/analyses/pluginLEP/OPAL_2000_S4418603.yoda
rename from data/refdata/OPAL_2000_S4418603.yoda
rename to analyses/pluginLEP/OPAL_2000_S4418603.yoda
diff --git a/src/Analyses/OPAL_2001_S4553896.cc b/analyses/pluginLEP/OPAL_2001_S4553896.cc
rename from src/Analyses/OPAL_2001_S4553896.cc
rename to analyses/pluginLEP/OPAL_2001_S4553896.cc
diff --git a/data/anainfo/OPAL_2001_S4553896.info b/analyses/pluginLEP/OPAL_2001_S4553896.info
rename from data/anainfo/OPAL_2001_S4553896.info
rename to analyses/pluginLEP/OPAL_2001_S4553896.info
diff --git a/data/plotinfo/OPAL_2001_S4553896.plot b/analyses/pluginLEP/OPAL_2001_S4553896.plot
rename from data/plotinfo/OPAL_2001_S4553896.plot
rename to analyses/pluginLEP/OPAL_2001_S4553896.plot
diff --git a/data/refdata/OPAL_2001_S4553896.yoda b/analyses/pluginLEP/OPAL_2001_S4553896.yoda
rename from data/refdata/OPAL_2001_S4553896.yoda
rename to analyses/pluginLEP/OPAL_2001_S4553896.yoda
diff --git a/src/Analyses/OPAL_2002_S5361494.cc b/analyses/pluginLEP/OPAL_2002_S5361494.cc
rename from src/Analyses/OPAL_2002_S5361494.cc
rename to analyses/pluginLEP/OPAL_2002_S5361494.cc
diff --git a/data/anainfo/OPAL_2002_S5361494.info b/analyses/pluginLEP/OPAL_2002_S5361494.info
rename from data/anainfo/OPAL_2002_S5361494.info
rename to analyses/pluginLEP/OPAL_2002_S5361494.info
diff --git a/data/plotinfo/OPAL_2002_S5361494.plot b/analyses/pluginLEP/OPAL_2002_S5361494.plot
rename from data/plotinfo/OPAL_2002_S5361494.plot
rename to analyses/pluginLEP/OPAL_2002_S5361494.plot
diff --git a/data/refdata/OPAL_2002_S5361494.yoda b/analyses/pluginLEP/OPAL_2002_S5361494.yoda
rename from data/refdata/OPAL_2002_S5361494.yoda
rename to analyses/pluginLEP/OPAL_2002_S5361494.yoda
diff --git a/src/Analyses/OPAL_2003_I599181.cc b/analyses/pluginLEP/OPAL_2003_I599181.cc
rename from src/Analyses/OPAL_2003_I599181.cc
rename to analyses/pluginLEP/OPAL_2003_I599181.cc
diff --git a/data/anainfo/OPAL_2003_I599181.info b/analyses/pluginLEP/OPAL_2003_I599181.info
rename from data/anainfo/OPAL_2003_I599181.info
rename to analyses/pluginLEP/OPAL_2003_I599181.info
--- a/data/anainfo/OPAL_2003_I599181.info
+++ b/analyses/pluginLEP/OPAL_2003_I599181.info
@@ -1,40 +1,40 @@
 Name: OPAL_2003_I599181
 Year: 2003
 Summary: Inclusive analysis of the b quark fragmentation function in Z decays
 Experiment: OPAL
 Collider: LEP2
 InspireID: 599181
 Status: VALIDATED
 Authors:
  - Simone Amoroso <amoroso@cern.ch>
 References:
  - Eur.Phys.J.C29:463-478,2003
  - doi:10.1140/epjc/s2003-01229-x
  - arXiv:hep-ex/0210031
 RunInfo:  Hadronic Z decay events generated on the Z pole ($\sqrt{s} = 91.2$ GeV)
 
 NumEvents: 1000000
 NeedCrossSection: no
 Beams: [e+,e-]
 Energies: [91.2]
 Description:
-'A study of b quark fragmentation function is presented using inclusively reconstructed weakly decaying B hadrons. 
-The measurement uses about four million hadronic Z decays recorded in 1992-2000 with the OPAL detector at LEP.'
+  'A study of b quark fragmentation function is presented using inclusively reconstructed weakly decaying B hadrons. 
+  The measurement uses about four million hadronic Z decays recorded in 1992-2000 with the OPAL detector at LEP.'
 BibKey: Abbiendi:2002vt
 BibTeX: '@article{Abbiendi:2002vt,
       author         = "Abbiendi, G. and others",
       title          = "{Inclusive analysis of the b quark fragmentation function
                         in Z decays at LEP}",
       collaboration  = "OPAL",
       journal        = "Eur. Phys. J.",
       volume         = "C29",
       year           = "2003",
       pages          = "463-478",
       doi            = "10.1140/epjc/s2003-01229-x",
       eprint         = "hep-ex/0210031",
       archivePrefix  = "arXiv",
       primaryClass   = "hep-ex",
       reportNumber   = "CERN-EP-2002-051",
       SLACcitation   = "%%CITATION = HEP-EX/0210031;%%"
 }'
 
diff --git a/data/plotinfo/OPAL_2003_I599181.plot b/analyses/pluginLEP/OPAL_2003_I599181.plot
rename from data/plotinfo/OPAL_2003_I599181.plot
rename to analyses/pluginLEP/OPAL_2003_I599181.plot
diff --git a/data/refdata/OPAL_2003_I599181.yoda b/analyses/pluginLEP/OPAL_2003_I599181.yoda
rename from data/refdata/OPAL_2003_I599181.yoda
rename to analyses/pluginLEP/OPAL_2003_I599181.yoda
diff --git a/analyses/pluginLEP/OPAL_2004_I631361.cc b/analyses/pluginLEP/OPAL_2004_I631361.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/OPAL_2004_I631361.cc
@@ -0,0 +1,119 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+
+namespace Rivet {
+
+
+  class OPAL_2004_I631361 : public Analysis {
+  public:
+
+    /// Constructor
+    OPAL_2004_I631361()
+      : Analysis("OPAL_2004_I631361"), _sumW(0.0)
+    {    }
+
+
+    /// @name Analysis methods
+    //@{
+    void init() {
+      declare(FinalState(), "FS");
+      declare(ChargedFinalState(), "CFS");
+      int ih(0), iy(0);
+      if (inRange(0.5*sqrtS()/GeV, 5.0, 5.5)) {
+        ih = 1;
+	iy = 1;
+      } else if (inRange(0.5*sqrtS()/GeV, 5.5, 6.5)) {
+        ih = 1;
+	iy = 2;
+      } else if (inRange(0.5*sqrtS()/GeV, 6.5, 7.5)) {
+        ih = 1;
+	iy = 3;
+      } else if (inRange(0.5*sqrtS()/GeV, 7.5, 9.5)) {
+        ih = 2;
+	iy = 1;
+      } else if (inRange(0.5*sqrtS()/GeV, 9.5, 13.0)) {
+        ih = 2;
+	iy = 2;
+      } else if (inRange(0.5*sqrtS()/GeV, 13.0, 16.0)) {
+        ih = 3;
+	iy = 1;
+      } else if (inRange(0.5*sqrtS()/GeV, 16.0, 20.0)) {
+        ih = 3;
+	iy = 2;
+      }
+      assert(ih>0);
+      _h_chMult     = bookHisto1D(ih,1,iy);
+      if(ih==3)
+	_h_chFragFunc = bookHisto1D(5,1,iy);
+      else
+	_h_chFragFunc = NULL;
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+      const double weight = event.weight();
+      // find the initial gluons
+      ParticleVector initial;
+      for (const GenParticle* p : Rivet::particles(event.genEvent())) {
+	const GenVertex* pv = p->production_vertex();
+	const PdgId pid = p->pdg_id();
+	if(pid!=21) continue;
+	bool passed = false;
+	for (const GenParticle* pp : particles_in(pv)) {
+	  const PdgId ppid = abs(pp->pdg_id());
+	  passed = (ppid == PID::ELECTRON || ppid == PID::HIGGS || 
+		    ppid == PID::ZBOSON   || ppid == PID::GAMMA);
+	  if(passed) break;
+	}
+	if(passed) initial.push_back(Particle(*p));
+      }
+      if(initial.size()!=2) vetoEvent;
+      // use the direction for the event axis
+      Vector3 axis = initial[0].momentum().p3().unit();
+      // fill histograms
+      const Particles& chps = applyProjection<FinalState>(event, "CFS").particles();
+      unsigned int nMult[2] = {0,0};
+      _sumW += 2.*weight;
+      // distribution
+      foreach(const Particle& p, chps) {
+        double xE = 2.*p.E()/sqrtS();
+	if(_h_chFragFunc) _h_chFragFunc->fill(xE, weight);
+	if(p.momentum().p3().dot(axis)>0.)
+	  ++nMult[0];
+	else
+	  ++nMult[1];
+      }
+      // multiplcities in jet
+      _h_chMult->fill(nMult[0],weight);
+      _h_chMult->fill(nMult[1],weight);
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+      normalize(_h_chMult);
+      if(_h_chFragFunc) scale(_h_chFragFunc, 1./_sumW);
+    }
+
+    //@}
+
+
+  private:
+
+    double _sumW;
+
+    /// @name Histograms
+    //@{
+    Histo1DPtr _h_chMult;
+    Histo1DPtr _h_chFragFunc;
+    //@}
+  };
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(OPAL_2004_I631361);
+
+
+}
diff --git a/analyses/pluginLEP/OPAL_2004_I631361.info b/analyses/pluginLEP/OPAL_2004_I631361.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/OPAL_2004_I631361.info
@@ -0,0 +1,38 @@
+Name: OPAL_2004_I631361
+Year: 2004
+Summary: Gluon jet charged multiplicities and fragmentation functions
+Experiment: OPAL
+Collider: LEP
+InspireID: 631361
+Status: VALIDATED
+Authors:
+ - Daniel Reichelt [d.reichelt@cern.ch]
+References:
+ - Phys. Rev. D69, 032002,2004
+ - hep-ex/0310048
+RunInfo:
+  The fictonal $e^+e^-\to gg$ process is required.
+NumEvents: 100000
+NeedCrossSection: no
+Beams: [e+, e- ] 
+Energies: [10.50,11.96,13.96,16.86,21.84,28.48,35.44]
+NeedCrossSection: False
+Description:
+  ' Measurement of gluon jet properties using the jet boost algorithm, a technique to select unbiased samples of gluon jets in $e^+e^-$ annihilation, i.e. gluon jets free of biases introduced by event selection or jet finding criteria. This analysis requires the  fictional $e^+e^-\to g g $ process to be used due to the corrections applied to the data. It allows the study of gluon jet properties. This analysis can be used for tuning etc..'
+BibKey: Abbiendi:2004gh
+BibTeX: '@article{Abbiendi:2004gh,
+      author         = "Abbiendi, G. and others",
+      title          = "{Experimental studies of unbiased gluon jets from $e^{+}
+                        e^{-}$ annihilations using the jet boost algorithm}",
+      collaboration  = "OPAL",
+      journal        = "Phys. Rev.",
+      volume         = "D69",
+      year           = "2004",
+      pages          = "032002",
+      doi            = "10.1103/PhysRevD.69.032002",
+      eprint         = "hep-ex/0310048",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2004-067",
+      SLACcitation   = "%%CITATION = HEP-EX/0310048;%%"
+}'
diff --git a/analyses/pluginLEP/OPAL_2004_I631361.plot b/analyses/pluginLEP/OPAL_2004_I631361.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/OPAL_2004_I631361.plot
@@ -0,0 +1,75 @@
+# BEGIN PLOT /OPAL_2004_I631361/d01-x01-y01
+Title=Charged particle multiplicity, $E^*_g=5.25~\mathrm{GeV}$
+XLabel=$n^\mathrm{ch.}_\mathrm{gluon}$
+YLabel=$P(n^\mathrm{ch.}_\mathrm{gluon})$                                      
+LogX=0
+LogY=0
+LogZ=0
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I631361/d01-x01-y02
+Title=Charged particle multiplicity, $E^*_g=5.98~\mathrm{GeV}$   
+XLabel=$n^\mathrm{ch.}_\mathrm{gluon}$                                         
+YLabel=$P(n^\mathrm{ch.}_\mathrm{gluon})$                                      
+LogX=0
+LogY=0
+LogZ=0
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I631361/d01-x01-y03
+Title=Charged particle multiplicity, $E^*_g=6.98~\mathrm{GeV}$   
+XLabel=$n^\mathrm{ch.}_\mathrm{gluon}$                                         
+YLabel=$P(n^\mathrm{ch.}_\mathrm{gluon})$                                      
+LogX=0
+LogY=0
+LogZ=0
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I631361/d02-x01-y01
+Title=Charged particle multiplicity, $E^*_g=8.43~\mathrm{GeV}$   
+XLabel=$n^\mathrm{ch.}_\mathrm{gluon}$                                         
+YLabel=$P(n^\mathrm{ch.}_\mathrm{gluon})$                                      
+LogX=0
+LogY=0
+LogZ=0
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I631361/d02-x01-y02
+Title=Charged particle multiplicity, $E^*_g=10.92~\mathrm{GeV}$   
+XLabel=$n^\mathrm{ch.}_\mathrm{gluon}$                                         
+YLabel=$P(n^\mathrm{ch.}_\mathrm{gluon})$                                      
+LogX=0
+LogY=0
+LogZ=0
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I631361/d03-x01-y01
+Title=Charged particle multiplicity, $E^*_g=14.24~\mathrm{GeV}$   
+XLabel=$n^\mathrm{ch.}_\mathrm{gluon}$                                         
+YLabel=$P(n^\mathrm{ch.}_\mathrm{gluon})$                                      
+LogX=0
+LogY=0
+LogZ=0
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I631361/d03-x01-y02
+Title=Charged particle multiplicity, $E^*_g=17.72~\mathrm{GeV}$   
+XLabel=$n^\mathrm{ch.}_\mathrm{gluon}$                                         
+YLabel=$P(n^\mathrm{ch.}_\mathrm{gluon})$                                      
+LogX=0
+LogY=0
+LogZ=0
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I631361/d05-x01-y01
+Title=Charged particle fragmentation function, $E^*_g=14.24~\mathrm{GeV}$   
+XLabel=$x^*_\mathrm{E}$                                         
+YLabel=$\frac{1}{N}\frac{\mathop{dn^\mathrm{ch.}_\mathrm{gluon}}}{\mathop{dx^*_\mathrm{E}}}$                                      
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I631361/d05-x01-y02
+Title=Charged particle fragmentation function, $E^*_g=17.72~\mathrm{GeV}$   
+XLabel=$x^*_\mathrm{E}$                                         
+YLabel=$\frac{1}{N}\frac{\mathop{dn^\mathrm{ch.}_\mathrm{gluon}}}{\mathop{dx^*_\mathrm{E}}}$                                      
+# END PLOT
+
diff --git a/analyses/pluginLEP/OPAL_2004_I631361.yoda b/analyses/pluginLEP/OPAL_2004_I631361.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/OPAL_2004_I631361.yoda
@@ -0,0 +1,269 @@
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361/d01-x01-y01
+Path=/REF/OPAL_2004_I631361/d01-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.5	0.5			0.0036	0.0037107950630558945	0.0037107950630558945
+1.0	0.5	0.5			0.0266	0.007116881339463234	0.007116881339463234
+2.0	0.5	0.5			0.0808	0.010375451797391765	0.010375451797391765
+3.0	0.5	0.5			0.149	0.010282509421342633	0.010282509421342633
+4.0	0.5	0.5			0.1982	0.008563293758829018	0.008563293758829018
+5.0	0.5	0.5			0.199	0.01341640786499874	0.01341640786499874
+6.0	0.5	0.5			0.154	0.0116619037896906	0.0116619037896906
+7.0	0.5	0.5			0.1	0.0074813100457072354	0.0074813100457072354
+8.0	0.5	0.5			0.0545	0.005693856338194704	0.005693856338194704
+9.0	0.5	0.5			0.023	0.0024186773244895647	0.0024186773244895647
+10.0	0.5	0.5			0.0079	0.001697056274847714	0.001697056274847714
+11.0	0.5	0.5			0.00232	8.459905436823748E-4	8.459905436823748E-4
+12.0	0.5	0.5			4.1E-4	4.964876634922564E-4	4.964876634922564E-4
+							
+							
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361/d01-x01-y02
+Path=/REF/OPAL_2004_I631361/d01-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.5	0.5			0.0025	0.0025495097567963926	0.0025495097567963926
+1.0	0.5	0.5			0.019	0.004237924020083418	0.004237924020083418
+2.0	0.5	0.5			0.0618	0.005458937625582472	0.005458937625582472
+3.0	0.5	0.5			0.1186	0.006365532185135819	0.006365532185135819
+4.0	0.5	0.5			0.1794	0.0063953107821277935	0.0063953107821277935
+5.0	0.5	0.5			0.1935	0.006660330322138685	0.006660330322138685
+6.0	0.5	0.5			0.1769	0.007294518489934754	0.007294518489934754
+7.0	0.5	0.5			0.1236	0.006010823570859487	0.006010823570859487
+8.0	0.5	0.5			0.071	0.003764306044943742	0.003764306044943742
+9.0	0.5	0.5			0.033	0.0027586228448267442	0.0027586228448267442
+10.0	0.5	0.5			0.0139	0.0021095023109728986	0.0021095023109728986
+11.0	0.5	0.5			0.005	0.0015652475842498528	0.0015652475842498528
+12.0	0.5	0.5			0.00129	8.586617494683224E-4	8.586617494683224E-4
+13.0	0.5	0.5			3.4E-4	3.488552708502481E-4	3.488552708502481E-4
+							
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361/d01-x01-y03
+Path=/REF/OPAL_2004_I631361/d01-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.5	0.5			0.0019	0.00194164878389476	0.00194164878389476
+1.0	0.5	0.5			0.0117	0.006987131027825369	0.006987131027825369
+2.0	0.5	0.5			0.0427	0.006109828148156051	0.006109828148156051
+3.0	0.5	0.5			0.0943	0.008628441342444185	0.008628441342444185
+4.0	0.5	0.5			0.1494	0.011182575731914363	0.011182575731914363
+5.0	0.5	0.5			0.1857	0.010539449701004318	0.010539449701004318
+6.0	0.5	0.5			0.1803	0.009264987857520375	0.009264987857520375
+7.0	0.5	0.5			0.1422	0.00840535543567314	0.00840535543567314
+8.0	0.5	0.5			0.0961	0.00776659513557904	0.00776659513557904
+9.0	0.5	0.5			0.0543	0.006041522986797286	0.006041522986797286
+10.0	0.5	0.5			0.0256	0.004031128874149275	0.004031128874149275
+11.0	0.5	0.5			0.0106	0.0022825424421026655	0.0022825424421026655
+12.0	0.5	0.5			0.0039	0.0012206555615733702	0.0012206555615733702
+13.0	0.5	0.5			9.4E-4	6.981403870282824E-4	6.981403870282824E-4
+14.0	0.5	0.5			1.7E-4	2.404163056034262E-4	2.404163056034262E-4
+15.0	0.5	0.5			1.7E-4	1.802775637731995E-4	1.802775637731995E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361/d02-x01-y01
+Path=/REF/OPAL_2004_I631361/d02-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.5	0.5			0.0012	0.0012369316876852982	0.0012369316876852982
+1.0	0.5	0.5			0.0069	0.006675327707311454	0.006675327707311454
+2.0	0.5	0.5			0.028	0.007736924453553879	0.007736924453553879
+3.0	0.5	0.5			0.0646	0.008321658488546619	0.008321658488546619
+4.0	0.5	0.5			0.1157	0.008276472678623425	0.008276472678623425
+5.0	0.5	0.5			0.1621	0.009964436762808022	0.009964436762808022
+6.0	0.5	0.5			0.1783	0.009082400563727631	0.009082400563727631
+7.0	0.5	0.5			0.1632	0.009706183596038146	0.009706183596038146
+8.0	0.5	0.5			0.1207	0.008276472678623425	0.008276472678623425
+9.0	0.5	0.5			0.0756	0.00711125867902441	0.00711125867902441
+10.0	0.5	0.5			0.0443	0.005700877125495689	0.005700877125495689
+11.0	0.5	0.5			0.0226	0.0032572994949804663	0.0032572994949804663
+12.0	0.5	0.5			0.0103	0.0021540659228538013	0.0021540659228538013
+13.0	0.5	0.5			0.0044	0.0013416407864998738	0.0013416407864998738
+14.0	0.5	0.5			0.00141	8.300602387778854E-4	8.300602387778854E-4
+15.0	0.5	0.5			4.8E-4	3.8832975677895203E-4	3.8832975677895203E-4
+16.0	0.5	0.5			1.9E-4	1.6552945357246846E-4	1.6552945357246846E-4
+							
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361/d02-x01-y02
+Path=/REF/OPAL_2004_I631361/d02-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.5	0.5			8.0E-4	8.944271909999159E-4	8.944271909999159E-4
+1.0	0.5	0.5			0.0047	0.004850773134253961	0.004850773134253961
+2.0	0.5	0.5			0.0152	0.005470831746635972	0.005470831746635972
+3.0	0.5	0.5			0.0373	0.006747592163134935	0.006747592163134935
+4.0	0.5	0.5			0.0749	0.008627861844049196	0.008627861844049196
+5.0	0.5	0.5			0.1083	0.00949210198006743	0.00949210198006743
+6.0	0.5	0.5			0.1419	0.01145600279329575	0.01145600279329575
+7.0	0.5	0.5			0.153	0.010625441167311594	0.010625441167311594
+8.0	0.5	0.5			0.1428	0.010580170130957254	0.010580170130957254
+9.0	0.5	0.5			0.1173	0.009990495483208028	0.009990495483208028
+10.0	0.5	0.5			0.0862	0.008780091115700338	0.008780091115700338
+11.0	0.5	0.5			0.055	0.00641404708432983	0.00641404708432983
+12.0	0.5	0.5			0.032	0.004669047011971501	0.004669047011971501
+13.0	0.5	0.5			0.0172	0.004313930922024598	0.004313930922024598
+14.0	0.5	0.5			0.0074	0.0024839484696748443	0.0024839484696748443
+15.0	0.5	0.5			0.0042	0.0017029386365926401	0.0017029386365926401
+16.0	0.5	0.5			0.0011	0.0012083045973594571	0.0012083045973594571
+17.0	0.5	0.5			4.0E-4	5.65685424949238E-4	5.65685424949238E-4
+18.0	0.5	0.5			1.8E-4	2.5455844122715713E-4	2.5455844122715713E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361/d03-x01-y01
+Path=/REF/OPAL_2004_I631361/d03-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.5	0.5			1.0E-4	1.414213562373095E-4	1.414213562373095E-4
+1.0	0.5	0.5			5.0E-4	7.071067811865475E-4	7.071067811865475E-4
+2.0	0.5	0.5			0.0068	0.004560701700396552	0.004560701700396552
+3.0	0.5	0.5			0.0179	0.007780102827083971	0.007780102827083971
+4.0	0.5	0.5			0.0363	0.011101801655587258	0.011101801655587258
+5.0	0.5	0.5			0.072	0.013601470508735444	0.013601470508735444
+6.0	0.5	0.5			0.099	0.014317821063276353	0.014317821063276353
+7.0	0.5	0.5			0.131	0.018867962264113206	0.018867962264113206
+8.0	0.5	0.5			0.137	0.017204650534085254	0.017204650534085254
+9.0	0.5	0.5			0.132	0.0147648230602334	0.0147648230602334
+10.0	0.5	0.5			0.116	0.017088007490635063	0.017088007490635063
+11.0	0.5	0.5			0.0924	0.014317821063276353	0.014317821063276353
+12.0	0.5	0.5			0.067	0.01341640786499874	0.01341640786499874
+13.0	0.5	0.5			0.047	0.0116619037896906	0.0116619037896906
+14.0	0.5	0.5			0.025	0.009219544457292887	0.009219544457292887
+15.0	0.5	0.5			0.01447	0.004472135954999579	0.004472135954999579
+16.0	0.5	0.5			0.0051	0.004338202392696772	0.004338202392696772
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361/d03-x01-y02
+Path=/REF/OPAL_2004_I631361/d03-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.5	0.5			4.0E-5	4.123105625617661E-5	4.123105625617661E-5
+1.0	0.5	0.5			4.0E-4	5.65685424949238E-4	5.65685424949238E-4
+2.0	0.5	0.5			0.0013	0.0018384776310850235	0.0018384776310850235
+3.0	0.5	0.5			0.008	0.00918313671900838	0.00918313671900838
+4.0	0.5	0.5			0.018	0.0170293863659264	0.0170293863659264
+5.0	0.5	0.5			0.047	0.022803508501982758	0.022803508501982758
+6.0	0.5	0.5			0.067	0.029832867780352594	0.029832867780352594
+7.0	0.5	0.5			0.102	0.0366742416417845	0.0366742416417845
+8.0	0.5	0.5			0.103	0.037013511046643494	0.037013511046643494
+9.0	0.5	0.5			0.125	0.043416586692184816	0.043416586692184816
+10.0	0.5	0.5			0.143	0.03860051813123756	0.03860051813123756
+11.0	0.5	0.5			0.128	0.037643060449437424	0.037643060449437424
+12.0	0.5	0.5			0.153	0.05968249324550709	0.05968249324550709
+13.0	0.5	0.5			0.054	0.05015974481593781	0.05015974481593781
+14.0	0.5	0.5			0.022	0.02842534080710379	0.02842534080710379
+15.0	0.5	0.5			0.017	0.0214009345590327	0.0214009345590327
+16.0	0.5	0.5			0.01	0.01345362404707371	0.01345362404707371
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361/d04-x01-y01
+Path=/REF/OPAL_2004_I631361/d04-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	0.0	0.0			4.803	0.055758407437802596	0.055758407437802596
+5.98	0.0	0.0			5.19	0.06887670143089025	0.06887670143089025
+6.98	0.0	0.0			5.677	0.07984985911070851	0.07984985911070851
+8.43	0.0	0.0			6.291	0.09486832980505137	0.09486832980505137
+10.92	0.0	0.0			7.378	0.09885848471426213	0.09885848471426213
+14.24	0.0	0.0			8.62	0.16401219466856726	0.16401219466856726
+17.72	0.0	0.0			9.52	0.4459820624195552	0.4459820624195552
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361/d04-x01-y02
+Path=/REF/OPAL_2004_I631361/d04-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	0.0	0.0			0.9528	0.00920271699010678	0.00920271699010678
+5.98	0.0	0.0			0.956	0.011180339887498947	0.011180339887498947
+6.98	0.0	0.0			0.963	0.011180339887498947	0.011180339887498947
+8.43	0.0	0.0			0.97	0.011180339887498947	0.011180339887498947
+10.92	0.0	0.0			0.989	0.011704699910719625	0.011704699910719625
+14.24	0.0	0.0			0.988	0.015811388300841896	0.015811388300841896
+17.72	0.0	0.0			0.973	0.029832867780352598	0.029832867780352598
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361/d04-x01-y03
+Path=/REF/OPAL_2004_I631361/d04-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	0.0	0.0			0.863	0.021540659228538015	0.021540659228538015
+5.98	0.0	0.0			0.87	0.02765863337187866	0.02765863337187866
+6.98	0.0	0.0			0.891	0.026683328128252668	0.026683328128252668
+8.43	0.0	0.0			0.915	0.02745906043549196	0.02745906043549196
+10.92	0.0	0.0			0.964	0.028635642126552705	0.028635642126552705
+14.24	0.0	0.0			0.96	0.04401136216933078	0.04401136216933078
+17.72	0.0	0.0			0.914	0.08077747210701756	0.08077747210701756
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361/d05-x01-y01
+Path=/REF/OPAL_2004_I631361/d05-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.005	0.005	0.005			4.9	4.850773134253962	4.850773134253962
+0.015	0.004999999999999999	0.005000000000000001			104.7	6.519202405202649	6.519202405202649
+0.025	0.005000000000000001	0.0049999999999999975			131.4	8.765842800324451	8.765842800324451
+0.035	0.0050000000000000044	0.0049999999999999975			93.4	8.417244204607586	8.417244204607586
+0.045	0.0049999999999999975	0.0050000000000000044			89.0	7.615773105863908	7.615773105863908
+0.055	0.0049999999999999975	0.0049999999999999975			61.8	9.213576938409968	9.213576938409968
+0.065	0.0050000000000000044	0.0050000000000000044			55.4	8.149233092751734	8.149233092751734
+0.07500000000000001	0.0050000000000000044	0.0049999999999999906			54.7	6.449806198638839	6.449806198638839
+0.08499999999999999	0.0049999999999999906	0.0050000000000000044			41.1	5.420332093147061	5.420332093147061
+0.095	0.0050000000000000044	0.0050000000000000044			33.9	4.545327270945404	4.545327270945404
+0.11	0.009999999999999995	0.009999999999999995			27.0	4.071854614300467	4.071854614300467
+0.13	0.010000000000000009	0.010000000000000009			15.9	3.2249030993194197	3.2249030993194197
+0.15000000000000002	0.010000000000000009	0.009999999999999981			14.7	3.1622776601683795	3.1622776601683795
+0.16999999999999998	0.009999999999999981	0.010000000000000009			10.2	2.23606797749979	2.23606797749979
+0.19	0.010000000000000009	0.010000000000000009			7.6	1.3892443989449805	1.3892443989449805
+0.225	0.024999999999999994	0.024999999999999994			4.75	0.9666436778875658	0.9666436778875658
+0.275	0.025000000000000022	0.024999999999999967			1.96	0.7130918594402829	0.7130918594402829
+0.35	0.04999999999999999	0.050000000000000044			0.66	0.5080354318352215	0.5080354318352215
+0.45	0.04999999999999999	0.04999999999999999			0.19	0.15231546211727817	0.15231546211727817
+0.55	0.050000000000000044	0.04999999999999993			0.16	0.11882760622010359	0.11882760622010359
+0.7	0.09999999999999998	0.10000000000000009			0.014	0.016643316977093238	0.016643316977093238
+0.9	0.09999999999999998	0.09999999999999998			2.0E-4	2.82842712474619E-4	2.82842712474619E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361/d05-x01-y02
+Path=/REF/OPAL_2004_I631361/d05-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.005	0.005	0.005			27.1	9.021086409075128	9.021086409075128
+0.015	0.004999999999999999	0.005000000000000001			155.0	21.400934559032695	21.400934559032695
+0.025	0.005000000000000001	0.0049999999999999975			128.0	20.248456731316587	20.248456731316587
+0.035	0.0050000000000000044	0.0049999999999999975			110.0	18.35755975068582	18.35755975068582
+0.045	0.0049999999999999975	0.0050000000000000044			106.0	26.248809496813376	26.248809496813376
+0.055	0.0049999999999999975	0.0049999999999999975			83.0	22.47220505424423	22.47220505424423
+0.065	0.0050000000000000044	0.0050000000000000044			76.0	17.46424919657298	17.46424919657298
+0.07500000000000001	0.0050000000000000044	0.0049999999999999906			46.0	16.15549442140351	16.15549442140351
+0.08499999999999999	0.0049999999999999906	0.0050000000000000044			50.0	15.231546211727817	15.231546211727817
+0.095	0.0050000000000000044	0.0050000000000000044			48.0	18.681541692269406	18.681541692269406
+0.11	0.009999999999999995	0.009999999999999995			24.0	15.297058540778355	15.297058540778355
+0.13	0.010000000000000009	0.010000000000000009			18.2	6.4621977685614045	6.4621977685614045
+0.15000000000000002	0.010000000000000009	0.009999999999999981			11.1	3.5805027579936315	3.5805027579936315
+0.16999999999999998	0.009999999999999981	0.010000000000000009			10.5	3.8587562763149474	3.8587562763149474
+0.19	0.010000000000000009	0.010000000000000009			5.4	4.55411901469428	4.55411901469428
+0.225	0.024999999999999994	0.024999999999999994			4.2	3.178049716414141	3.178049716414141
+0.275	0.025000000000000022	0.024999999999999967			2.6	1.4317821063276355	1.4317821063276355
+0.35	0.04999999999999999	0.050000000000000044			0.71	0.7300684899377592	0.7300684899377592
+0.45	0.04999999999999999	0.04999999999999999			0.14	0.15231546211727817	0.15231546211727817
+0.55	0.050000000000000044	0.04999999999999993			0.029	0.03178049716414141	0.03178049716414141
+0.7	0.09999999999999998	0.10000000000000009			0.012	0.01697056274847714	0.01697056274847714
+							
+# END YODA_SCATTER2D 
+
+
diff --git a/analyses/pluginLEP/OPAL_2004_I631361_qq.cc b/analyses/pluginLEP/OPAL_2004_I631361_qq.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/OPAL_2004_I631361_qq.cc
@@ -0,0 +1,241 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Projections/HadronicFinalState.hh"
+#include "Rivet/Jet.hh"
+#include "Rivet/Tools/BinnedHistogram.hh"
+#include "fastjet/JetDefinition.hh"
+
+namespace fastjet {
+
+class P_scheme : public JetDefinition::Recombiner {
+ public:
+  std::string description() const {return "";}
+  void recombine(const PseudoJet & pa, const PseudoJet & pb,
+                         PseudoJet & pab) const {
+    PseudoJet tmp = pa + pb;
+    double E = sqrt(tmp.px()*tmp.px() + tmp.py()*tmp.py() + tmp.pz()*tmp.pz());
+    pab.reset_momentum(tmp.px(), tmp.py(), tmp.pz(), E);
+  }
+  void preprocess(PseudoJet & p) const {
+    double E = sqrt(p.px()*p.px() + p.py()*p.py() + p.pz()*p.pz());
+    p.reset_momentum(p.px(), p.py(), p.pz(), E);
+  }
+  ~P_scheme() { }
+};
+
+}
+
+namespace Rivet {
+
+  class OPAL_2004_I631361_qq : public Analysis {
+  public:
+
+    /// Constructor
+    OPAL_2004_I631361_qq()
+      : Analysis("OPAL_2004_I631361_qq"), _sumWEbin(7,0.)
+    {     }
+
+    /// @name Analysis methods
+    //@{
+    int getEbin(double E_glue) {
+      int ih = -1;
+      if (inRange(E_glue/GeV, 5.0, 5.5)) {
+        ih = 0;
+      } else if (inRange(E_glue/GeV, 5.5, 6.5)) {
+        ih = 1;
+      } else if (inRange(E_glue/GeV, 6.5, 7.5)) {
+        ih = 2;
+      } else if (inRange(E_glue/GeV, 7.5, 9.5)) {
+        ih = 3;
+      } else if (inRange(E_glue/GeV, 9.5, 13.0)) {
+        ih = 4;
+      } else if (inRange(E_glue/GeV, 13.0, 16.0)) {
+        ih = 5;
+      } else if (inRange(E_glue/GeV, 16.0, 20.0)) {
+        ih = 6;
+      }
+      assert(ih >= 0);
+      return ih;
+    }
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      const FinalState fs;
+      addProjection(fs, "FS");
+      addProjection(HadronicFinalState(fs), "HFS");
+
+      const ChargedFinalState cfs;
+      addProjection(cfs, "CFS");
+      addProjection(HadronicFinalState(cfs), "HCFS");
+
+      _h_chMult.addHistogram(5.0, 5.5, bookHisto1D(1,1,1));
+      _h_chMult.addHistogram(5.5, 6.5, bookHisto1D(1,1,2));
+      _h_chMult.addHistogram(6.5, 7.5, bookHisto1D(1,1,3));
+      _h_chMult.addHistogram(7.5, 9.5, bookHisto1D(2,1,1));
+      _h_chMult.addHistogram(9.5, 13.0, bookHisto1D(2,1,2));
+      _h_chMult.addHistogram(13.0, 16.0, bookHisto1D(3,1,1));
+      _h_chMult.addHistogram(16.0, 20.0, bookHisto1D(3,1,2));
+
+      _h_chFragFunc.addHistogram(13.0, 16.0, bookHisto1D(5,1,1));
+      _h_chFragFunc.addHistogram(16.0, 20.0, bookHisto1D(5,1,2));
+
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+      // cut on the number of charged particles
+      const Particles& chParticles = applyProjection<FinalState>(event, "CFS").particles();
+      if(chParticles.size() < 5) vetoEvent;  
+      // cluster the jets
+      const Particles& particles = applyProjection<FinalState>(event, "FS").particles();
+      fastjet::JetDefinition ee_kt_def(fastjet::ee_kt_algorithm, &p_scheme);
+      PseudoJets pParticles;
+      foreach(Particle p, particles) {
+        PseudoJet temp = p.pseudojet();
+        if(p.fromBottom()) {
+          temp.set_user_index(5);
+        }
+        pParticles.push_back(temp);
+      }
+      fastjet::ClusterSequence cluster(pParticles, ee_kt_def);
+      // rescale energys to just keep the directions of the jets
+      // and keep track of b tags
+      PseudoJets pJets = sorted_by_E(cluster.exclusive_jets_up_to(3));
+      if(pJets.size() < 3) vetoEvent;
+      array<Vector3, 3> dirs;
+      for(int i=0; i<3; i++) {
+        dirs[i] = Vector3(pJets[i].px(),pJets[i].py(),pJets[i].pz()).unit();
+      }
+      array<bool, 3> bTagged;
+      Jets jets;
+      for(int i=0; i<3; i++) {
+        double Ejet = sqrtS()*sin(angle(dirs[(i+1)%3],dirs[(i+2)%3])) /
+          (sin(angle(dirs[i],dirs[(i+1)%3])) + sin(angle(dirs[i],dirs[(i+2)%3])) + sin(angle(dirs[(i+1)%3],dirs[(i+2)%3])));
+        jets.push_back(FourMomentum(Ejet,Ejet*dirs[i].x(),Ejet*dirs[i].y(),Ejet*dirs[i].z()));
+        bTagged[i] = false;
+        foreach(PseudoJet particle, pJets[i].constituents()) {
+          if(particle.user_index() > 1 and !bTagged[i]) {
+            bTagged[i] = true;
+          }
+        }
+      }
+
+      int QUARK1 = 0, QUARK2 = 1, GLUON = 2; 
+      
+      if(jets[QUARK2].E() > jets[QUARK1].E()) swap(QUARK1, QUARK2);
+      if(jets[GLUON].E() > jets[QUARK1].E())  swap(QUARK1,  GLUON);
+      if(!bTagged[QUARK2]) {
+        if(!bTagged[GLUON]) vetoEvent;
+        else swap(QUARK2, GLUON);
+      }
+      if(bTagged[GLUON]) vetoEvent;
+
+      // exclude collinear or soft jets
+      double k1 = jets[QUARK1].E()*min(angle(jets[QUARK1].momentum(),jets[QUARK2].momentum()),
+				       angle(jets[QUARK1].momentum(),jets[GLUON].momentum())); 
+      double k2 = jets[QUARK2].E()*min(angle(jets[QUARK2].momentum(),jets[QUARK1].momentum()),
+				       angle(jets[QUARK2].momentum(),jets[GLUON].momentum()));
+      if(k1<8.0*GeV || k2<8.0*GeV) vetoEvent;
+
+      double sqg = (jets[QUARK1].momentum()+jets[GLUON].momentum()).mass2();
+      double sgq = (jets[QUARK2].momentum()+jets[GLUON].momentum()).mass2();
+      double s = (jets[QUARK1].momentum()+jets[QUARK2].momentum()+jets[GLUON].momentum()).mass2();
+
+      double Eg = 0.5*sqrt(sqg*sgq/s);
+
+      if(Eg < 5.0 || Eg > 20.0) { vetoEvent; }
+      else if(Eg > 9.5) {
+        //requirements for experimental reconstructability raise as energy raises
+        if(!bTagged[QUARK1]) {
+          vetoEvent;
+        }
+      }
+
+      // all cuts applied, increment sum of weights
+      const double weight = event.weight();
+      _sumWEbin[getEbin(Eg)] += weight;
+
+
+      // transform to frame with event in y-z and glue jet in z direction
+      Matrix3 glueTOz(jets[GLUON].momentum().vector3(), Vector3(0,0,1));
+      Vector3 transQuark = glueTOz*jets[QUARK2].momentum().vector3();
+      Matrix3 quarksTOyz(Vector3(transQuark.x(), transQuark.y(), 0), Vector3(0,1,0));
+
+      // work out transformation to symmetric frame
+      array<double, 3> x_cm;
+      array<double, 3> x_cm_y;
+      array<double, 3> x_cm_z;
+      array<double, 3> x_pr;
+      for(int i=0; i<3; i++) {
+        x_cm[i] = 2*jets[i].E()/sqrt(s);
+        Vector3 p_transf = quarksTOyz*glueTOz*jets[i].p3();
+        x_cm_y[i] = 2*p_transf.y()/sqrt(s);
+        x_cm_z[i] = 2*p_transf.z()/sqrt(s);
+      }
+      x_pr[GLUON] = sqrt(4*(1-x_cm[QUARK1])*(1-x_cm[QUARK2])/(3+x_cm[GLUON]));
+      x_pr[QUARK1] = x_pr[GLUON]/(1-x_cm[QUARK1]);
+      x_pr[QUARK2] = x_pr[GLUON]/(1-x_cm[QUARK2]);
+      double gamma = (x_pr[QUARK1] + x_pr[GLUON] + x_pr[QUARK2])/2;
+      double beta_z = x_pr[GLUON]/(gamma*x_cm[GLUON]) - 1;
+      double beta_y = (x_pr[QUARK2]/gamma - x_cm[QUARK2] - beta_z*x_cm_z[QUARK2])/x_cm_y[QUARK2];
+
+      LorentzTransform toSymmetric = LorentzTransform::mkObjTransformFromBeta(Vector3(0.,beta_y,beta_z)).
+	postMult(quarksTOyz*glueTOz);
+      
+      FourMomentum transGlue = toSymmetric.transform(jets[GLUON].momentum());
+      double cutAngle = angle(toSymmetric.transform(jets[QUARK2].momentum()), transGlue)/2;
+
+      int nCh = 0;
+      foreach(const Particle& chP, chParticles ) {
+        FourMomentum pSymmFrame = toSymmetric.transform(FourMomentum(chP.p3().mod(), chP.px(), chP.py(), chP.pz()));
+	if(angle(pSymmFrame, transGlue) < cutAngle) {
+          _h_chFragFunc.fill(Eg, pSymmFrame.E()*sin(cutAngle)/Eg, weight);
+          nCh++;
+        }
+      }
+      _h_chMult.fill(Eg, nCh, weight);
+    }
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+
+      foreach(Histo1DPtr hist, _h_chMult.getHistograms()) {
+        normalize(hist);
+      }
+      for(int i=0; i<2; i++) {
+        if(!isZero(_sumWEbin[i+5])) {
+          scale(_h_chFragFunc.getHistograms()[i], 1./_sumWEbin[i+5]);
+        }
+      }
+    }
+
+    //@}
+
+
+  private:
+
+    // Data members like post-cuts event weight counters go here
+    vector<double> _sumWEbin;
+
+    // p scheme jet definition
+    fastjet::P_scheme p_scheme;
+
+    /// @name Histograms
+    //@{
+    BinnedHistogram<double> _h_chMult;
+    BinnedHistogram<double> _h_chFragFunc;
+    //@}
+
+
+  };
+
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(OPAL_2004_I631361_qq);
+}
diff --git a/analyses/pluginLEP/OPAL_2004_I631361_qq.info b/analyses/pluginLEP/OPAL_2004_I631361_qq.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/OPAL_2004_I631361_qq.info
@@ -0,0 +1,38 @@
+Name: OPAL_2004_I631361_qq
+Year: 2004
+Summary: Gluon jet charged multiplicities and fragmentation functions
+Experiment: OPAL
+Collider: LEP
+InspireID: 631361
+Status: VALIDATED
+Authors:
+ - Daniel Reichelt [d.reichelt@cern.ch]
+References:
+ - Phys. Rev. D69, 032002,2004
+ - hep-ex/0310048
+RunInfo:
+  $e^+e^-\to q\bar q$.
+NumEvents: 100000
+NeedCrossSection: no
+Beams: [e+, e- ] 
+Energies: [91.2]
+NeedCrossSection: False
+Description:
+  ' Measurement of gluon jet properties using the jet boost algorithm, a technique to select unbiased samples of gluon jets in $e^+e^-$ annihilation, i.e. gluon jets free of biases introduced by event selection or jet finding criteria. This analysis uses the original analysis technique to extract gluon jets from hadronic $e^+e^-$ events. It cannot therefore  be used for tuning as the data has been corrected for impurities, however it is still useful qualitatively in order to check the properties of gluon jets in the original way in which there were measured rather than using a fictitious process.'
+BibKey: Abbiendi:2004gh
+BibTeX: '@article{Abbiendi:2004gh,
+      author         = "Abbiendi, G. and others",
+      title          = "{Experimental studies of unbiased gluon jets from $e^{+}
+                        e^{-}$ annihilations using the jet boost algorithm}",
+      collaboration  = "OPAL",
+      journal        = "Phys. Rev.",
+      volume         = "D69",
+      year           = "2004",
+      pages          = "032002",
+      doi            = "10.1103/PhysRevD.69.032002",
+      eprint         = "hep-ex/0310048",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-EP-2004-067",
+      SLACcitation   = "%%CITATION = HEP-EX/0310048;%%"
+}'
diff --git a/analyses/pluginLEP/OPAL_2004_I631361_qq.plot b/analyses/pluginLEP/OPAL_2004_I631361_qq.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/OPAL_2004_I631361_qq.plot
@@ -0,0 +1,75 @@
+# BEGIN PLOT /OPAL_2004_I631361_qq/d01-x01-y01
+Title=Charged particle multiplicity, $E^*_g=5.25~\mathrm{GeV}$
+XLabel=$n^\mathrm{ch.}_\mathrm{gluon}$
+YLabel=$P(n^\mathrm{ch.}_\mathrm{gluon})$                                      
+LogX=0
+LogY=0
+LogZ=0
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I631361_qq/d01-x01-y02
+Title=Charged particle multiplicity, $E^*_g=5.98~\mathrm{GeV}$   
+XLabel=$n^\mathrm{ch.}_\mathrm{gluon}$                                         
+YLabel=$P(n^\mathrm{ch.}_\mathrm{gluon})$                                      
+LogX=0
+LogY=0
+LogZ=0
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I631361_qq/d01-x01-y03
+Title=Charged particle multiplicity, $E^*_g=6.98~\mathrm{GeV}$   
+XLabel=$n^\mathrm{ch.}_\mathrm{gluon}$                                         
+YLabel=$P(n^\mathrm{ch.}_\mathrm{gluon})$                                      
+LogX=0
+LogY=0
+LogZ=0
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I631361_qq/d02-x01-y01
+Title=Charged particle multiplicity, $E^*_g=8.43~\mathrm{GeV}$   
+XLabel=$n^\mathrm{ch.}_\mathrm{gluon}$                                         
+YLabel=$P(n^\mathrm{ch.}_\mathrm{gluon})$                                      
+LogX=0
+LogY=0
+LogZ=0
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I631361_qq/d02-x01-y02
+Title=Charged particle multiplicity, $E^*_g=10.92~\mathrm{GeV}$   
+XLabel=$n^\mathrm{ch.}_\mathrm{gluon}$                                         
+YLabel=$P(n^\mathrm{ch.}_\mathrm{gluon})$                                      
+LogX=0
+LogY=0
+LogZ=0
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I631361_qq/d03-x01-y01
+Title=Charged particle multiplicity, $E^*_g=14.24~\mathrm{GeV}$   
+XLabel=$n^\mathrm{ch.}_\mathrm{gluon}$                                         
+YLabel=$P(n^\mathrm{ch.}_\mathrm{gluon})$                                      
+LogX=0
+LogY=0
+LogZ=0
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I631361_qq/d03-x01-y02
+Title=Charged particle multiplicity, $E^*_g=17.72~\mathrm{GeV}$   
+XLabel=$n^\mathrm{ch.}_\mathrm{gluon}$                                         
+YLabel=$P(n^\mathrm{ch.}_\mathrm{gluon})$                                      
+LogX=0
+LogY=0
+LogZ=0
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I631361_qq/d05-x01-y01
+Title=Charged particle fragmentation function, $E^*_g=14.24~\mathrm{GeV}$   
+XLabel=$x^*_\mathrm{E}$                                         
+YLabel=$\frac{1}{N}\frac{\mathop{dn^\mathrm{ch.}_\mathrm{gluon}}}{\mathop{dx^*_\mathrm{E}}}$                                      
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I631361_qq/d05-x01-y02
+Title=Charged particle fragmentation function, $E^*_g=17.72~\mathrm{GeV}$   
+XLabel=$x^*_\mathrm{E}$                                         
+YLabel=$\frac{1}{N}\frac{\mathop{dn^\mathrm{ch.}_\mathrm{gluon}}}{\mathop{dx^*_\mathrm{E}}}$                                      
+# END PLOT
+
diff --git a/analyses/pluginLEP/OPAL_2004_I631361_qq.yoda b/analyses/pluginLEP/OPAL_2004_I631361_qq.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/OPAL_2004_I631361_qq.yoda
@@ -0,0 +1,269 @@
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361_qq/d01-x01-y01
+Path=/REF/OPAL_2004_I631361_qq/d01-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.5	0.5			0.0036	0.0037107950630558945	0.0037107950630558945
+1.0	0.5	0.5			0.0266	0.007116881339463234	0.007116881339463234
+2.0	0.5	0.5			0.0808	0.010375451797391765	0.010375451797391765
+3.0	0.5	0.5			0.149	0.010282509421342633	0.010282509421342633
+4.0	0.5	0.5			0.1982	0.008563293758829018	0.008563293758829018
+5.0	0.5	0.5			0.199	0.01341640786499874	0.01341640786499874
+6.0	0.5	0.5			0.154	0.0116619037896906	0.0116619037896906
+7.0	0.5	0.5			0.1	0.0074813100457072354	0.0074813100457072354
+8.0	0.5	0.5			0.0545	0.005693856338194704	0.005693856338194704
+9.0	0.5	0.5			0.023	0.0024186773244895647	0.0024186773244895647
+10.0	0.5	0.5			0.0079	0.001697056274847714	0.001697056274847714
+11.0	0.5	0.5			0.00232	8.459905436823748E-4	8.459905436823748E-4
+12.0	0.5	0.5			4.1E-4	4.964876634922564E-4	4.964876634922564E-4
+							
+							
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361_qq/d01-x01-y02
+Path=/REF/OPAL_2004_I631361_qq/d01-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.5	0.5			0.0025	0.0025495097567963926	0.0025495097567963926
+1.0	0.5	0.5			0.019	0.004237924020083418	0.004237924020083418
+2.0	0.5	0.5			0.0618	0.005458937625582472	0.005458937625582472
+3.0	0.5	0.5			0.1186	0.006365532185135819	0.006365532185135819
+4.0	0.5	0.5			0.1794	0.0063953107821277935	0.0063953107821277935
+5.0	0.5	0.5			0.1935	0.006660330322138685	0.006660330322138685
+6.0	0.5	0.5			0.1769	0.007294518489934754	0.007294518489934754
+7.0	0.5	0.5			0.1236	0.006010823570859487	0.006010823570859487
+8.0	0.5	0.5			0.071	0.003764306044943742	0.003764306044943742
+9.0	0.5	0.5			0.033	0.0027586228448267442	0.0027586228448267442
+10.0	0.5	0.5			0.0139	0.0021095023109728986	0.0021095023109728986
+11.0	0.5	0.5			0.005	0.0015652475842498528	0.0015652475842498528
+12.0	0.5	0.5			0.00129	8.586617494683224E-4	8.586617494683224E-4
+13.0	0.5	0.5			3.4E-4	3.488552708502481E-4	3.488552708502481E-4
+							
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361_qq/d01-x01-y03
+Path=/REF/OPAL_2004_I631361_qq/d01-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.5	0.5			0.0019	0.00194164878389476	0.00194164878389476
+1.0	0.5	0.5			0.0117	0.006987131027825369	0.006987131027825369
+2.0	0.5	0.5			0.0427	0.006109828148156051	0.006109828148156051
+3.0	0.5	0.5			0.0943	0.008628441342444185	0.008628441342444185
+4.0	0.5	0.5			0.1494	0.011182575731914363	0.011182575731914363
+5.0	0.5	0.5			0.1857	0.010539449701004318	0.010539449701004318
+6.0	0.5	0.5			0.1803	0.009264987857520375	0.009264987857520375
+7.0	0.5	0.5			0.1422	0.00840535543567314	0.00840535543567314
+8.0	0.5	0.5			0.0961	0.00776659513557904	0.00776659513557904
+9.0	0.5	0.5			0.0543	0.006041522986797286	0.006041522986797286
+10.0	0.5	0.5			0.0256	0.004031128874149275	0.004031128874149275
+11.0	0.5	0.5			0.0106	0.0022825424421026655	0.0022825424421026655
+12.0	0.5	0.5			0.0039	0.0012206555615733702	0.0012206555615733702
+13.0	0.5	0.5			9.4E-4	6.981403870282824E-4	6.981403870282824E-4
+14.0	0.5	0.5			1.7E-4	2.404163056034262E-4	2.404163056034262E-4
+15.0	0.5	0.5			1.7E-4	1.802775637731995E-4	1.802775637731995E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361_qq/d02-x01-y01
+Path=/REF/OPAL_2004_I631361_qq/d02-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.5	0.5			0.0012	0.0012369316876852982	0.0012369316876852982
+1.0	0.5	0.5			0.0069	0.006675327707311454	0.006675327707311454
+2.0	0.5	0.5			0.028	0.007736924453553879	0.007736924453553879
+3.0	0.5	0.5			0.0646	0.008321658488546619	0.008321658488546619
+4.0	0.5	0.5			0.1157	0.008276472678623425	0.008276472678623425
+5.0	0.5	0.5			0.1621	0.009964436762808022	0.009964436762808022
+6.0	0.5	0.5			0.1783	0.009082400563727631	0.009082400563727631
+7.0	0.5	0.5			0.1632	0.009706183596038146	0.009706183596038146
+8.0	0.5	0.5			0.1207	0.008276472678623425	0.008276472678623425
+9.0	0.5	0.5			0.0756	0.00711125867902441	0.00711125867902441
+10.0	0.5	0.5			0.0443	0.005700877125495689	0.005700877125495689
+11.0	0.5	0.5			0.0226	0.0032572994949804663	0.0032572994949804663
+12.0	0.5	0.5			0.0103	0.0021540659228538013	0.0021540659228538013
+13.0	0.5	0.5			0.0044	0.0013416407864998738	0.0013416407864998738
+14.0	0.5	0.5			0.00141	8.300602387778854E-4	8.300602387778854E-4
+15.0	0.5	0.5			4.8E-4	3.8832975677895203E-4	3.8832975677895203E-4
+16.0	0.5	0.5			1.9E-4	1.6552945357246846E-4	1.6552945357246846E-4
+							
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361_qq/d02-x01-y02
+Path=/REF/OPAL_2004_I631361_qq/d02-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.5	0.5			8.0E-4	8.944271909999159E-4	8.944271909999159E-4
+1.0	0.5	0.5			0.0047	0.004850773134253961	0.004850773134253961
+2.0	0.5	0.5			0.0152	0.005470831746635972	0.005470831746635972
+3.0	0.5	0.5			0.0373	0.006747592163134935	0.006747592163134935
+4.0	0.5	0.5			0.0749	0.008627861844049196	0.008627861844049196
+5.0	0.5	0.5			0.1083	0.00949210198006743	0.00949210198006743
+6.0	0.5	0.5			0.1419	0.01145600279329575	0.01145600279329575
+7.0	0.5	0.5			0.153	0.010625441167311594	0.010625441167311594
+8.0	0.5	0.5			0.1428	0.010580170130957254	0.010580170130957254
+9.0	0.5	0.5			0.1173	0.009990495483208028	0.009990495483208028
+10.0	0.5	0.5			0.0862	0.008780091115700338	0.008780091115700338
+11.0	0.5	0.5			0.055	0.00641404708432983	0.00641404708432983
+12.0	0.5	0.5			0.032	0.004669047011971501	0.004669047011971501
+13.0	0.5	0.5			0.0172	0.004313930922024598	0.004313930922024598
+14.0	0.5	0.5			0.0074	0.0024839484696748443	0.0024839484696748443
+15.0	0.5	0.5			0.0042	0.0017029386365926401	0.0017029386365926401
+16.0	0.5	0.5			0.0011	0.0012083045973594571	0.0012083045973594571
+17.0	0.5	0.5			4.0E-4	5.65685424949238E-4	5.65685424949238E-4
+18.0	0.5	0.5			1.8E-4	2.5455844122715713E-4	2.5455844122715713E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361_qq/d03-x01-y01
+Path=/REF/OPAL_2004_I631361_qq/d03-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.5	0.5			1.0E-4	1.414213562373095E-4	1.414213562373095E-4
+1.0	0.5	0.5			5.0E-4	7.071067811865475E-4	7.071067811865475E-4
+2.0	0.5	0.5			0.0068	0.004560701700396552	0.004560701700396552
+3.0	0.5	0.5			0.0179	0.007780102827083971	0.007780102827083971
+4.0	0.5	0.5			0.0363	0.011101801655587258	0.011101801655587258
+5.0	0.5	0.5			0.072	0.013601470508735444	0.013601470508735444
+6.0	0.5	0.5			0.099	0.014317821063276353	0.014317821063276353
+7.0	0.5	0.5			0.131	0.018867962264113206	0.018867962264113206
+8.0	0.5	0.5			0.137	0.017204650534085254	0.017204650534085254
+9.0	0.5	0.5			0.132	0.0147648230602334	0.0147648230602334
+10.0	0.5	0.5			0.116	0.017088007490635063	0.017088007490635063
+11.0	0.5	0.5			0.0924	0.014317821063276353	0.014317821063276353
+12.0	0.5	0.5			0.067	0.01341640786499874	0.01341640786499874
+13.0	0.5	0.5			0.047	0.0116619037896906	0.0116619037896906
+14.0	0.5	0.5			0.025	0.009219544457292887	0.009219544457292887
+15.0	0.5	0.5			0.01447	0.004472135954999579	0.004472135954999579
+16.0	0.5	0.5			0.0051	0.004338202392696772	0.004338202392696772
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361_qq/d03-x01-y02
+Path=/REF/OPAL_2004_I631361_qq/d03-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.5	0.5			4.0E-5	4.123105625617661E-5	4.123105625617661E-5
+1.0	0.5	0.5			4.0E-4	5.65685424949238E-4	5.65685424949238E-4
+2.0	0.5	0.5			0.0013	0.0018384776310850235	0.0018384776310850235
+3.0	0.5	0.5			0.008	0.00918313671900838	0.00918313671900838
+4.0	0.5	0.5			0.018	0.0170293863659264	0.0170293863659264
+5.0	0.5	0.5			0.047	0.022803508501982758	0.022803508501982758
+6.0	0.5	0.5			0.067	0.029832867780352594	0.029832867780352594
+7.0	0.5	0.5			0.102	0.0366742416417845	0.0366742416417845
+8.0	0.5	0.5			0.103	0.037013511046643494	0.037013511046643494
+9.0	0.5	0.5			0.125	0.043416586692184816	0.043416586692184816
+10.0	0.5	0.5			0.143	0.03860051813123756	0.03860051813123756
+11.0	0.5	0.5			0.128	0.037643060449437424	0.037643060449437424
+12.0	0.5	0.5			0.153	0.05968249324550709	0.05968249324550709
+13.0	0.5	0.5			0.054	0.05015974481593781	0.05015974481593781
+14.0	0.5	0.5			0.022	0.02842534080710379	0.02842534080710379
+15.0	0.5	0.5			0.017	0.0214009345590327	0.0214009345590327
+16.0	0.5	0.5			0.01	0.01345362404707371	0.01345362404707371
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361_qq/d04-x01-y01
+Path=/REF/OPAL_2004_I631361_qq/d04-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	0.0	0.0			4.803	0.055758407437802596	0.055758407437802596
+5.98	0.0	0.0			5.19	0.06887670143089025	0.06887670143089025
+6.98	0.0	0.0			5.677	0.07984985911070851	0.07984985911070851
+8.43	0.0	0.0			6.291	0.09486832980505137	0.09486832980505137
+10.92	0.0	0.0			7.378	0.09885848471426213	0.09885848471426213
+14.24	0.0	0.0			8.62	0.16401219466856726	0.16401219466856726
+17.72	0.0	0.0			9.52	0.4459820624195552	0.4459820624195552
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361_qq/d04-x01-y02
+Path=/REF/OPAL_2004_I631361_qq/d04-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	0.0	0.0			0.9528	0.00920271699010678	0.00920271699010678
+5.98	0.0	0.0			0.956	0.011180339887498947	0.011180339887498947
+6.98	0.0	0.0			0.963	0.011180339887498947	0.011180339887498947
+8.43	0.0	0.0			0.97	0.011180339887498947	0.011180339887498947
+10.92	0.0	0.0			0.989	0.011704699910719625	0.011704699910719625
+14.24	0.0	0.0			0.988	0.015811388300841896	0.015811388300841896
+17.72	0.0	0.0			0.973	0.029832867780352598	0.029832867780352598
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361_qq/d04-x01-y03
+Path=/REF/OPAL_2004_I631361_qq/d04-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	0.0	0.0			0.863	0.021540659228538015	0.021540659228538015
+5.98	0.0	0.0			0.87	0.02765863337187866	0.02765863337187866
+6.98	0.0	0.0			0.891	0.026683328128252668	0.026683328128252668
+8.43	0.0	0.0			0.915	0.02745906043549196	0.02745906043549196
+10.92	0.0	0.0			0.964	0.028635642126552705	0.028635642126552705
+14.24	0.0	0.0			0.96	0.04401136216933078	0.04401136216933078
+17.72	0.0	0.0			0.914	0.08077747210701756	0.08077747210701756
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361_qq/d05-x01-y01
+Path=/REF/OPAL_2004_I631361_qq/d05-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.005	0.005	0.005			4.9	4.850773134253962	4.850773134253962
+0.015	0.004999999999999999	0.005000000000000001			104.7	6.519202405202649	6.519202405202649
+0.025	0.005000000000000001	0.0049999999999999975			131.4	8.765842800324451	8.765842800324451
+0.035	0.0050000000000000044	0.0049999999999999975			93.4	8.417244204607586	8.417244204607586
+0.045	0.0049999999999999975	0.0050000000000000044			89.0	7.615773105863908	7.615773105863908
+0.055	0.0049999999999999975	0.0049999999999999975			61.8	9.213576938409968	9.213576938409968
+0.065	0.0050000000000000044	0.0050000000000000044			55.4	8.149233092751734	8.149233092751734
+0.07500000000000001	0.0050000000000000044	0.0049999999999999906			54.7	6.449806198638839	6.449806198638839
+0.08499999999999999	0.0049999999999999906	0.0050000000000000044			41.1	5.420332093147061	5.420332093147061
+0.095	0.0050000000000000044	0.0050000000000000044			33.9	4.545327270945404	4.545327270945404
+0.11	0.009999999999999995	0.009999999999999995			27.0	4.071854614300467	4.071854614300467
+0.13	0.010000000000000009	0.010000000000000009			15.9	3.2249030993194197	3.2249030993194197
+0.15000000000000002	0.010000000000000009	0.009999999999999981			14.7	3.1622776601683795	3.1622776601683795
+0.16999999999999998	0.009999999999999981	0.010000000000000009			10.2	2.23606797749979	2.23606797749979
+0.19	0.010000000000000009	0.010000000000000009			7.6	1.3892443989449805	1.3892443989449805
+0.225	0.024999999999999994	0.024999999999999994			4.75	0.9666436778875658	0.9666436778875658
+0.275	0.025000000000000022	0.024999999999999967			1.96	0.7130918594402829	0.7130918594402829
+0.35	0.04999999999999999	0.050000000000000044			0.66	0.5080354318352215	0.5080354318352215
+0.45	0.04999999999999999	0.04999999999999999			0.19	0.15231546211727817	0.15231546211727817
+0.55	0.050000000000000044	0.04999999999999993			0.16	0.11882760622010359	0.11882760622010359
+0.7	0.09999999999999998	0.10000000000000009			0.014	0.016643316977093238	0.016643316977093238
+0.9	0.09999999999999998	0.09999999999999998			2.0E-4	2.82842712474619E-4	2.82842712474619E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I631361_qq/d05-x01-y02
+Path=/REF/OPAL_2004_I631361_qq/d05-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.005	0.005	0.005			27.1	9.021086409075128	9.021086409075128
+0.015	0.004999999999999999	0.005000000000000001			155.0	21.400934559032695	21.400934559032695
+0.025	0.005000000000000001	0.0049999999999999975			128.0	20.248456731316587	20.248456731316587
+0.035	0.0050000000000000044	0.0049999999999999975			110.0	18.35755975068582	18.35755975068582
+0.045	0.0049999999999999975	0.0050000000000000044			106.0	26.248809496813376	26.248809496813376
+0.055	0.0049999999999999975	0.0049999999999999975			83.0	22.47220505424423	22.47220505424423
+0.065	0.0050000000000000044	0.0050000000000000044			76.0	17.46424919657298	17.46424919657298
+0.07500000000000001	0.0050000000000000044	0.0049999999999999906			46.0	16.15549442140351	16.15549442140351
+0.08499999999999999	0.0049999999999999906	0.0050000000000000044			50.0	15.231546211727817	15.231546211727817
+0.095	0.0050000000000000044	0.0050000000000000044			48.0	18.681541692269406	18.681541692269406
+0.11	0.009999999999999995	0.009999999999999995			24.0	15.297058540778355	15.297058540778355
+0.13	0.010000000000000009	0.010000000000000009			18.2	6.4621977685614045	6.4621977685614045
+0.15000000000000002	0.010000000000000009	0.009999999999999981			11.1	3.5805027579936315	3.5805027579936315
+0.16999999999999998	0.009999999999999981	0.010000000000000009			10.5	3.8587562763149474	3.8587562763149474
+0.19	0.010000000000000009	0.010000000000000009			5.4	4.55411901469428	4.55411901469428
+0.225	0.024999999999999994	0.024999999999999994			4.2	3.178049716414141	3.178049716414141
+0.275	0.025000000000000022	0.024999999999999967			2.6	1.4317821063276355	1.4317821063276355
+0.35	0.04999999999999999	0.050000000000000044			0.71	0.7300684899377592	0.7300684899377592
+0.45	0.04999999999999999	0.04999999999999999			0.14	0.15231546211727817	0.15231546211727817
+0.55	0.050000000000000044	0.04999999999999993			0.029	0.03178049716414141	0.03178049716414141
+0.7	0.09999999999999998	0.10000000000000009			0.012	0.01697056274847714	0.01697056274847714
+							
+# END YODA_SCATTER2D 
+
+
diff --git a/analyses/pluginLEP/OPAL_2004_I648738.cc b/analyses/pluginLEP/OPAL_2004_I648738.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/OPAL_2004_I648738.cc
@@ -0,0 +1,116 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+
+namespace Rivet {
+
+
+  class OPAL_2004_I648738 : public Analysis {
+  public:
+
+    /// Constructor
+    OPAL_2004_I648738()
+      : Analysis("OPAL_2004_I648738"), _sumW(3,0.)
+    {    }
+
+
+    /// @name Analysis methods
+    //@{
+    void init() {
+      declare(FinalState(), "FS");
+      declare(ChargedFinalState(), "CFS");
+      unsigned int ih=0;
+      if (inRange(0.5*sqrtS()/GeV, 4.0, 9.0)) {
+	ih = 1;
+      }
+      else if (inRange(0.5*sqrtS()/GeV, 9.0, 19.0)) {
+	ih = 2;
+      }
+      else if (inRange(0.5*sqrtS()/GeV, 19.0, 30.0)) {
+	ih = 3;
+      }
+      else if (inRange(0.5*sqrtS()/GeV, 45.5, 45.7)) {
+	ih = 5;
+      }
+      else if (inRange(0.5*sqrtS()/GeV, 30.0, 70.0)) {
+	ih = 4;
+      }
+      else if (inRange(0.5*sqrtS()/GeV, 91.5, 104.5)) {
+	ih = 6;
+      }
+      assert(ih>0);
+      // book the histograms
+      _histo_xE.push_back(bookHisto1D(ih+5,1,1));
+      _histo_xE.push_back(bookHisto1D(ih+5,1,2));
+      if(ih<5) _histo_xE.push_back(bookHisto1D(ih+5,1,3));
+    }
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+      const double weight = event.weight();
+      // find the initial quarks/gluons
+      ParticleVector initial;
+      for (const GenParticle* p : Rivet::particles(event.genEvent())) {
+	const GenVertex* pv = p->production_vertex();
+	const PdgId pid = abs(p->pdg_id());
+	if(!( (pid>=1&&pid<=5) || pid ==21) ) continue;
+	bool passed = false;
+	for (const GenParticle* pp : particles_in(pv)) {
+	  const PdgId ppid = abs(pp->pdg_id());
+	  passed = (ppid == PID::ELECTRON || ppid == PID::HIGGS || 
+		    ppid == PID::ZBOSON   || ppid == PID::GAMMA);
+	  if(passed) break;
+	}
+	if(passed) initial.push_back(Particle(*p));
+      }
+      if(initial.size()!=2) {
+	vetoEvent;
+      }
+      // type of event
+      unsigned int itype=2;
+      if(initial[0].pdgId()==-initial[1].pdgId()) {
+	PdgId pid = abs(initial[0].pdgId());
+	if(pid>=1&&pid<=4) 
+	  itype=0;
+	else
+	  itype=1;
+      }
+      assert(itype<_histo_xE.size());
+
+      // fill histograms
+      _sumW[itype] += 2.*weight;
+      const Particles& chps = applyProjection<FinalState>(event, "CFS").particles();
+      foreach(const Particle& p, chps) {
+        double xE = 2.*p.E()/sqrtS();
+	_histo_xE[itype]->fill(xE, weight);
+      }
+
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+      for(unsigned int ix=0;ix<_histo_xE.size();++ix) {
+	if(_sumW[ix]>0.) scale(_histo_xE[ix],1./_sumW[ix]);
+      }
+    }
+    //@}
+
+
+  private:
+
+    vector<double> _sumW;
+
+    /// @name Histograms
+    //@{
+    vector<Histo1DPtr> _histo_xE;
+    //@}
+
+
+  };
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(OPAL_2004_I648738);
+
+}
diff --git a/analyses/pluginLEP/OPAL_2004_I648738.info b/analyses/pluginLEP/OPAL_2004_I648738.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/OPAL_2004_I648738.info
@@ -0,0 +1,48 @@
+Name: OPAL_2004_I648738
+Year: 2004
+Summary: Quark and gluon jet fragmentation functions
+Experiment: OPAL
+Collider: LEP
+InspireID: 648738
+Status: VALIDATED
+Authors:
+ - Daniel Reichelt [d.reichelt@cern.ch]
+References:
+ - Eur.Phys.J. C37 (2004) no.1, 25-47
+ - hep-ex/0404026
+RunInfo:
+  For quark fragmentation $e^+e^-\to q\bar{q}$ events are required, while for gluon fragmentation
+  the fictonal $e^+e^-\to gg$ process is required.
+NumEvents: 1000000
+NeedCrossSection: no
+Beams: [e+, e-]
+Energies: [12.8,26.8,48.0,91.2,93.0,97.0,197.0]
+NeedCrossSection: False
+Description:
+  Measurement of the fragmentation functions for quarks and gluons at LEP. Useful for studying the properties
+  of gluon jets and the differences between quark and gluon jets. For the study of gluon jets the fictional
+  $e^+e^-\to g g $ process must be used. The data in histograms labelled "hemisphere fragmentation" are measured
+  from jets defined by hemispheres, with an energy scale defined by $E=\sqrt{s}/2$,
+  while data in histograms named "durham fragmentation" are measured from jets defined by the durham algorithm
+  with $Q_\mathrm{jet}=E_\mathrm{jet}\sin(\theta/2)$ as the energy scale. The rivet analysis defines the jet
+  flavour from the initial quarks, as the data are corrected for impurities, and defines all jets as
+  hemispheres with energy scale $E=\sqrt{s}/2$.
+BibKey: Abbiendi:2004pr
+BibTeX: '@article{Abbiendi:2004pr,
+      author         = "Abbiendi, G. and others",
+      title          = "{Scaling violations of quark and gluon jet fragmentation
+                        functions in e+ e- annihilations at s**(1/2) = 91.2-GeV
+                        and 183-GeV to 209-GeV}",
+      collaboration  = "OPAL",
+      journal        = "Eur. Phys. J.",
+      volume         = "C37",
+      year           = "2004",
+      number         = "1",
+      pages          = "25-47",
+      doi            = "10.1140/epjc/s2004-01964-4",
+      eprint         = "hep-ex/0404026",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "CERN-PH-EP-2004-011",
+      SLACcitation   = "%%CITATION = HEP-EX/0404026;%%"
+}'
diff --git a/analyses/pluginLEP/OPAL_2004_I648738.plot b/analyses/pluginLEP/OPAL_2004_I648738.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/OPAL_2004_I648738.plot
@@ -0,0 +1,95 @@
+# BEGIN PLOT /OPAL_2004_I648738/d06-x01-y01
+Title=udsc durham jet fragmentation, $Q_\mathrm{jet}=4.0-9.0~\mathrm{GeV}$
+XLabel=$x_\mathrm{E}$
+YLabel=$\frac{1}{N_\mathrm{jet}^\mathrm{udsc}(Q_\mathrm{jet})}\frac{\mathop{dN_\mathrm{ch}}}{\mathop{dx_\mathrm{E}}}$
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I648738/d06-x01-y02
+Title=b durham jet fragmentation, $Q_\mathrm{jet}=4.0-9.0~\mathrm{GeV}$
+XLabel=$x_\mathrm{E}$
+YLabel=$\frac{1}{N_\mathrm{jet}^\mathrm{b}(Q_\mathrm{jet})}\frac{\mathop{dN_\mathrm{ch}}}{\mathop{dx_\mathrm{E}}}$
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I648738/d06-x01-y03
+Title=gluon durham jet fragmentation, $Q_\mathrm{jet}=4.0-9.0~\mathrm{GeV}$
+XLabel=$x_\mathrm{E}$
+YLabel=$\frac{1}{N_\mathrm{jet}^\mathrm{gluon}(Q_\mathrm{jet})}\frac{\mathop{dN_\mathrm{ch}}}{\mathop{dx_\mathrm{E}}}$
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I648738/d07-x01-y01
+Title=udsc durham jet fragmentation, $Q_\mathrm{jet}=9.0-19.0~\mathrm{GeV}$
+XLabel=$x_\mathrm{E}$
+YLabel=$\frac{1}{N_\mathrm{jet}^\mathrm{udsc}(Q_\mathrm{jet})}\frac{\mathop{dN_\mathrm{ch}}}{\mathop{dx_\mathrm{E}}}$
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I648738/d07-x01-y02
+Title=b durham jet fragmentation, $Q_\mathrm{jet}=9.0-19.0~\mathrm{GeV}$
+XLabel=$x_\mathrm{E}$
+YLabel=$\frac{1}{N_\mathrm{jet}^\mathrm{b}(Q_\mathrm{jet})}\frac{\mathop{dN_\mathrm{ch}}}{\mathop{dx_\mathrm{E}}}$
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I648738/d07-x01-y03
+Title=gluon durham jet fragmentation, $Q_\mathrm{jet}=9.0-19.0~\mathrm{GeV}$
+XLabel=$x_\mathrm{E}$
+YLabel=$\frac{1}{N_\mathrm{jet}^\mathrm{gluon}(Q_\mathrm{jet})}\frac{\mathop{dN_\mathrm{ch}}}{\mathop{dx_\mathrm{E}}}$
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I648738/d08-x01-y01
+Title=udsc durham jet fragmentation, $Q_\mathrm{jet}=19.0-30.0~\mathrm{GeV}$
+XLabel=$x_\mathrm{E}$
+YLabel=$\frac{1}{N_\mathrm{jet}^\mathrm{udsc}(Q_\mathrm{jet})}\frac{\mathop{dN_\mathrm{ch}}}{\mathop{dx_\mathrm{E}}}$
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I648738/d08-x01-y02
+Title=b durham jet fragmentation, $Q_\mathrm{jet}=19.0-30.0~\mathrm{GeV}$
+XLabel=$x_\mathrm{E}$
+YLabel=$\frac{1}{N_\mathrm{jet}^\mathrm{b}(Q_\mathrm{jet})}\frac{\mathop{dN_\mathrm{ch}}}{\mathop{dx_\mathrm{E}}}$
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I648738/d08-x01-y03
+Title=gluon durham jet fragmentation, $Q_\mathrm{jet}=19.0-30.0~\mathrm{GeV}$
+XLabel=$x_\mathrm{E}$
+YLabel=$\frac{1}{N_\mathrm{jet}^\mathrm{gluon}(Q_\mathrm{jet})}\frac{\mathop{dN_\mathrm{ch}}}{\mathop{dx_\mathrm{E}}}$
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I648738/d09-x01-y01
+Title=udsc durham jet fragmentation, $Q_\mathrm{jet}=30.0-70.0~\mathrm{GeV}$
+XLabel=$x_\mathrm{E}$
+YLabel=$\frac{1}{N_\mathrm{jet}^\mathrm{udsc}(Q_\mathrm{jet})}\frac{\mathop{dN_\mathrm{ch}}}{\mathop{dx_\mathrm{E}}}$
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I648738/d09-x01-y02
+Title=b durham jet fragmentation, $Q_\mathrm{jet}=30.0-70.0~\mathrm{GeV}$
+XLabel=$x_\mathrm{E}$
+YLabel=$\frac{1}{N_\mathrm{jet}^\mathrm{b}(Q_\mathrm{jet})}\frac{\mathop{dN_\mathrm{ch}}}{\mathop{dx_\mathrm{E}}}$
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I648738/d09-x01-y03
+Title=gluon durham jet fragmentation, $Q_\mathrm{jet}=30.0-70.0~\mathrm{GeV}$
+XLabel=$x_\mathrm{E}$
+YLabel=$\frac{1}{N_\mathrm{jet}^\mathrm{gluon}(Q_\mathrm{jet})}\frac{\mathop{dN_\mathrm{ch}}}{\mathop{dx_\mathrm{E}}}$
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I648738/d10-x01-y01
+Title=udsc hemisphere jet fragmentation, at $91.2~\mathrm{GeV}$
+XLabel=$x_\mathrm{E}$
+YLabel=$\frac{1}{N_\mathrm{jet}^\mathrm{udsc}(Q_\mathrm{jet})}\frac{\mathop{dN_\mathrm{ch}}}{\mathop{dx_\mathrm{E}}}$
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I648738/d10-x01-y02
+Title=b hemisphere jet fragmentation, at $91.2~\mathrm{GeV}$
+XLabel=$x_\mathrm{E}$
+YLabel=$\frac{1}{N_\mathrm{jet}^\mathrm{b}(Q_\mathrm{jet})}\frac{\mathop{dN_\mathrm{ch}}}{\mathop{dx_\mathrm{E}}}$
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I648738/d11-x01-y01
+Title=udsc hemisphere jet fragmentation, at $91.5-104.5~\mathrm{GeV}$
+XLabel=$x_\mathrm{E}$
+YLabel=$\frac{1}{N_\mathrm{jet}^\mathrm{udsc}(Q_\mathrm{jet})}\frac{\mathop{dN_\mathrm{ch}}}{\mathop{dx_\mathrm{E}}}$
+# END PLOT
+
+# BEGIN PLOT /OPAL_2004_I648738/d11-x01-y02
+Title=b hemisphere jet fragmentation, at $91.5-104.5~\mathrm{GeV}$
+XLabel=$x_\mathrm{E}$
+YLabel=$\frac{1}{N_\mathrm{jet}^\mathrm{b}(Q_\mathrm{jet})}\frac{\mathop{dN_\mathrm{ch}}}{\mathop{dx_\mathrm{E}}}$
+# END PLOT
diff --git a/analyses/pluginLEP/OPAL_2004_I648738.yoda b/analyses/pluginLEP/OPAL_2004_I648738.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginLEP/OPAL_2004_I648738.yoda
@@ -0,0 +1,823 @@
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d01-x01-y01
+Path=/REF/OPAL_2004_I648738/d01-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			38.1	4.272001872658765	4.272001872658765
+7.75	1.25	1.25			45.5	4.8270073544588685	4.8270073544588685
+10.5	1.5	1.5			44.8	2.4041630560342613	2.4041630560342613
+13.5	1.5	1.5			49.8	2.6925824035672523	2.6925824035672523
+17.0	2.0	2.0			51.9	2.7658633371878665	2.7658633371878665
+21.5	2.5	2.5			54.12	1.0890821823902914	1.0890821823902914
+27.0	3.0	3.0			57.31	1.113642671596235	1.113642671596235
+36.0	6.0	6.0			55.6	2.209072203437452	2.209072203437452
+38.5	8.5	8.5			49.3	6.2008063991709985	6.2008063991709985
+45.6	0.0	0.0			61.8	0.8238931969618392	0.8238931969618392
+58.5	11.5	11.5			60.6	5.6859475903318	5.6859475903318
+87.5	17.5	17.5			61.1	11.027692415006868	11.027692415006868
+93.8	0.0	0.0			64.1	2.247220505424423	2.247220505424423
+99.0	0.0	0.0			65.3	2.751363298439521	2.751363298439521
+103.1	0.0	0.0			64.3	2.3259406699226015	2.3259406699226015
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d01-x01-y02
+Path=/REF/OPAL_2004_I648738/d01-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			20.9	1.4142135623730951	1.4142135623730951
+7.75	1.25	1.25			23.9	1.252996408614167	1.252996408614167
+10.5	1.5	1.5			22.46	0.6795586803212803	0.6795586803212803
+13.5	1.5	1.5			22.55	0.6688796603276257	0.6688796603276257
+17.0	2.0	2.0			22.88	0.6576473218982952	0.6576473218982952
+21.5	2.5	2.5			23.16	0.7877182237323191	0.7877182237323191
+27.0	3.0	3.0			22.61	0.7655063683601855	0.7655063683601855
+36.0	6.0	6.0			22.6	0.917877987534291	0.917877987534291
+38.5	8.5	8.5			23.4	2.6076809620810595	2.6076809620810595
+45.6	0.0	0.0			23.57	0.2433105012119288	0.2433105012119288
+58.5	11.5	11.5			23.3	2.4413111231467406	2.4413111231467406
+87.5	17.5	17.5			21.3	4.263801121065568	4.263801121065568
+93.8	0.0	0.0			23.1	0.7600657866263946	0.7600657866263946
+99.0	0.0	0.0			23.89	1.0916501271011698	1.0916501271011698
+103.1	0.0	0.0			23.37	0.912633551870629	0.912633551870629
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d01-x01-y03
+Path=/REF/OPAL_2004_I648738/d01-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			10.25	0.834865258589672	0.834865258589672
+7.75	1.25	1.25			9.81	0.7093659140387281	0.7093659140387281
+10.5	1.5	1.5			9.81	0.3807886552931954	0.3807886552931954
+13.5	1.5	1.5			9.87	0.3769615364994153	0.3769615364994153
+17.0	2.0	2.0			9.44	0.36055512754639896	0.36055512754639896
+21.5	2.5	2.5			9.38	0.17204650534085256	0.17204650534085256
+27.0	3.0	3.0			9.36	0.1664331697709324	0.1664331697709324
+36.0	6.0	6.0			9.23	0.25495097567963926	0.25495097567963926
+38.5	8.5	8.5			9.6	0.9962429422585638	0.9962429422585638
+45.6	0.0	0.0			8.98	0.14142135623730953	0.14142135623730953
+58.5	11.5	11.5			8.24	1.0159724405711013	1.0159724405711013
+87.5	17.5	17.5			7.7	1.3601470508735445	1.3601470508735445
+93.8	0.0	0.0			8.92	0.23345235059857505	0.23345235059857505
+99.0	0.0	0.0			8.48	0.3466987164671943	0.3466987164671943
+103.1	0.0	0.0			8.68	0.2154065922853802	0.2154065922853802
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d01-x01-y04
+Path=/REF/OPAL_2004_I648738/d01-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			2.54	0.22022715545545243	0.22022715545545243
+7.75	1.25	1.25			2.28	0.16552945357246848	0.16552945357246848
+10.5	1.5	1.5			2.383	0.07306161783043132	0.07306161783043132
+13.5	1.5	1.5			2.205	0.06711929677819933	0.06711929677819933
+17.0	2.0	2.0			2.142	0.06307138812488591	0.06307138812488591
+21.5	2.5	2.5			2.074	0.03538361202590826	0.03538361202590826
+27.0	3.0	3.0			2.017	0.03330165161069343	0.03330165161069343
+36.0	6.0	6.0			2.058	0.09960923651951159	0.09960923651951159
+38.5	8.5	8.5			2.05	0.2701851217221259	0.2701851217221259
+45.6	0.0	0.0			1.899	0.0382099463490856	0.0382099463490856
+58.5	11.5	11.5			1.68	0.2865309756378881	0.2865309756378881
+87.5	17.5	17.5			1.93	0.43278170016764805	0.43278170016764805
+93.8	0.0	0.0			1.724	0.0565685424949238	0.0565685424949238
+99.0	0.0	0.0			1.629	0.0630317380372777	0.0630317380372777
+103.1	0.0	0.0			1.695	0.06220128616033595	0.06220128616033595
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d01-x01-y05
+Path=/REF/OPAL_2004_I648738/d01-x01-y05
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			0.214	0.04045985664828782	0.04045985664828782
+7.75	1.25	1.25			0.219	0.029068883707497266	0.029068883707497266
+10.5	1.5	1.5			0.201	0.01341640786499874	0.01341640786499874
+13.5	1.5	1.5			0.183	0.012529964086141668	0.012529964086141668
+17.0	2.0	2.0			0.18	0.012083045973594572	0.012083045973594572
+21.5	2.5	2.5			0.1697	0.008588364221433555	0.008588364221433555
+27.0	3.0	3.0			0.1581	0.007960527620704549	0.007960527620704549
+36.0	6.0	6.0			0.1633	0.00455411901469428	0.00455411901469428
+							
+45.6	0.0	0.0			0.1411	0.005821511831131153	0.005821511831131153
+58.5	11.5	11.5			0.128	0.03453983207834109	0.03453983207834109
+87.5	17.5	17.5			0.052	0.07543208866258444	0.07543208866258444
+93.8	0.0	0.0			0.1231	0.009920181449953424	0.009920181449953424
+99.0	0.0	0.0			0.1154	0.0109	0.0109
+103.1	0.0	0.0			0.1289	0.01134416149391395	0.01134416149391395
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d02-x01-y01
+Path=/REF/OPAL_2004_I648738/d02-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			51.2	9.144397191723465	9.144397191723465
+7.75	1.25	1.25			61.0	11.045361017187261	11.045361017187261
+10.5	1.5	1.5			65.6	4.570557952810575	4.570557952810575
+13.5	1.5	1.5			65.7	4.55411901469428	4.55411901469428
+17.0	2.0	2.0			69.9	4.850773134253961	4.850773134253961
+21.5	2.5	2.5			70.8	2.9614185789921694	2.9614185789921694
+27.0	3.0	3.0			72.2	3.059411708155671	3.059411708155671
+36.0	6.0	6.0			71.4	3.313608305156178	3.313608305156178
+38.5	8.5	8.5			72.9	8.183520025025906	8.183520025025906
+45.6	0.0	0.0			76.9	1.91049731745428	1.91049731745428
+58.5	11.5	11.5			77.0	8.221921916437786	8.221921916437786
+87.5	17.5	17.5			74.3	8.736704184073076	8.736704184073076
+98.5	0.0	0.0			77.4	2.4041630560342613	2.4041630560342613
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d02-x01-y02
+Path=/REF/OPAL_2004_I648738/d02-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			28.7	1.9849433241279208	1.9849433241279208
+7.75	1.25	1.25			30.1	1.746424919657298	1.746424919657298
+10.5	1.5	1.5			30.32	0.6378087487640789	0.6378087487640789
+13.5	1.5	1.5			30.77	0.6389053137985314	0.6389053137985314
+17.0	2.0	2.0			30.21	0.5940538696111658	0.5940538696111658
+21.5	2.5	2.5			29.96	0.7066116330771806	0.7066116330771806
+27.0	3.0	3.0			29.9	0.6844705983459042	0.6844705983459042
+36.0	6.0	6.0			29.71	0.6236184731067546	0.6236184731067546
+38.5	8.5	8.5			28.6	4.879549159502341	4.879549159502341
+45.6	0.0	0.0			30.15	0.45607017003965516	0.45607017003965516
+58.5	11.5	11.5			26.5	4.527692569068709	4.527692569068709
+87.5	17.5	17.5			30.9	4.632493928760188	4.632493928760188
+98.5	0.0	0.0			28.9	1.6643316977093237	1.6643316977093237
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d02-x01-y03
+Path=/REF/OPAL_2004_I648738/d02-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			11.8	0.9241753080449618	0.9241753080449618
+7.75	1.25	1.25			11.14	0.7527283706623525	0.7527283706623525
+10.5	1.5	1.5			10.41	0.49335585534176035	0.49335585534176035
+13.5	1.5	1.5			9.94	0.4743416490252569	0.4743416490252569
+17.0	2.0	2.0			9.99	0.46840153714521476	0.46840153714521476
+21.5	2.5	2.5			9.98	0.30463092423455634	0.30463092423455634
+27.0	3.0	3.0			9.58	0.2823118842698621	0.2823118842698621
+36.0	6.0	6.0			9.83	0.27658633371878666	0.27658633371878666
+38.5	8.5	8.5			8.7	1.697056274847714	1.697056274847714
+45.6	0.0	0.0			9.4	0.28442925306655786	0.28442925306655786
+58.5	11.5	11.5			9.0	1.6278820596099708	1.6278820596099708
+87.5	17.5	17.5			8.8	1.3453624047073711	1.3453624047073711
+98.5	0.0	0.0			8.94	0.4080441152620633	0.4080441152620633
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d02-x01-y04
+Path=/REF/OPAL_2004_I648738/d02-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			2.1	0.25	0.25
+7.75	1.25	1.25			1.74	0.17088007490635063	0.17088007490635063
+10.5	1.5	1.5			1.53	0.13601470508735444	0.13601470508735444
+13.5	1.5	1.5			1.45	0.12649110640673517	0.12649110640673517
+17.0	2.0	2.0			1.43	0.12369316876852982	0.12369316876852982
+21.5	2.5	2.5			1.36	0.062177166226839255	0.062177166226839255
+27.0	3.0	3.0			1.359	0.06083584469702052	0.06083584469702052
+36.0	6.0	6.0			1.373	0.026627053911388695	0.026627053911388695
+38.5	8.5	8.5			1.37	0.36359317925395684	0.36359317925395684
+45.6	0.0	0.0			1.253	0.06493843238021688	0.06493843238021688
+58.5	11.5	11.5			1.12	0.32649655434629016	0.32649655434629016
+87.5	17.5	17.5			1.34	0.2765863337187866	0.2765863337187866
+98.5	0.0	0.0			1.112	0.1163872845288522	0.1163872845288522
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d02-x01-y05
+Path=/REF/OPAL_2004_I648738/d02-x01-y05
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			0.134	0.057201398584300366	0.057201398584300366
+7.75	1.25	1.25			0.111	0.03440930106817051	0.03440930106817051
+10.5	1.5	1.5			0.076	0.016401219466856725	0.016401219466856725
+13.5	1.5	1.5			0.066	0.014422205101855958	0.014422205101855958
+17.0	2.0	2.0			0.0564	0.011954078801814887	0.011954078801814887
+21.5	2.5	2.5			0.0466	0.008464632301523793	0.008464632301523793
+27.0	3.0	3.0			0.0524	0.00904433524367601	0.00904433524367601
+36.0	6.0	6.0			0.0476	0.007392563831310488	0.007392563831310488
+							
+45.6	0.0	0.0			0.0379	0.004401136216933077	0.004401136216933077
+							
+87.5	17.5	17.5			0.056	0.04308131845707603	0.04308131845707603
+98.5	0.0	0.0			0.046	0.013038404810405297	0.013038404810405297
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d03-x01-y01
+Path=/REF/OPAL_2004_I648738/d03-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			43.3	9.618731725128837	9.618731725128837
+7.75	1.25	1.25			58.2	9.419129471453294	9.419129471453294
+10.5	1.5	1.5			69.9	6.44980619863884	6.44980619863884
+13.5	1.5	1.5			73.8	6.873136110975833	6.873136110975833
+17.0	2.0	2.0			79.5	7.414849964766651	7.414849964766651
+21.5	2.5	2.5			84.7	7.009279563550023	7.009279563550023
+27.0	3.0	3.0			80.5	6.835202996254026	6.835202996254026
+36.0	6.0	6.0			89.0	14.560219778561036	14.560219778561036
+50.0	20.0	20.0			118.0	21.470910553583888	21.470910553583888
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d03-x01-y02
+Path=/REF/OPAL_2004_I648738/d03-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			26.6	1.4317821063276353	1.4317821063276353
+7.75	1.25	1.25			29.7	1.6492422502470645	1.6492422502470645
+10.5	1.5	1.5			31.65	0.8300602387778853	0.8300602387778853
+13.5	1.5	1.5			32.69	0.9402127418834526	0.9402127418834526
+17.0	2.0	2.0			32.14	0.9841239759298621	0.9841239759298621
+21.5	2.5	2.5			31.2	2.012461179749811	2.012461179749811
+27.0	3.0	3.0			33.6	2.420743687382041	2.420743687382041
+36.0	6.0	6.0			32.7	3.420526275297414	3.420526275297414
+50.0	20.0	20.0			27.5	9.457801012920498	9.457801012920498
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d03-x01-y03
+Path=/REF/OPAL_2004_I648738/d03-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			12.14	0.291547594742265	0.291547594742265
+7.75	1.25	1.25			11.88	0.2884441020371191	0.2884441020371191
+10.5	1.5	1.5			11.12	0.2624880949681338	0.2624880949681338
+13.5	1.5	1.5			10.39	0.2906888370749727	0.2906888370749727
+17.0	2.0	2.0			10.01	0.31622776601683794	0.31622776601683794
+21.5	2.5	2.5			9.26	0.7602631123499285	0.7602631123499285
+27.0	3.0	3.0			8.46	0.8091971329657563	0.8091971329657563
+36.0	6.0	6.0			7.5	1.8384776310850235	1.8384776310850235
+50.0	20.0	20.0			9.7	4.606517122512408	4.606517122512408
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d03-x01-y04
+Path=/REF/OPAL_2004_I648738/d03-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			2.603	0.10072239075796403	0.10072239075796403
+7.75	1.25	1.25			2.022	0.08141252974819048	0.08141252974819048
+10.5	1.5	1.5			1.587	0.084970583144992	0.084970583144992
+13.5	1.5	1.5			1.527	0.08962700485902672	0.08962700485902672
+17.0	2.0	2.0			1.403	0.09128526715741155	0.09128526715741155
+21.5	2.5	2.5			1.33	0.15264337522473748	0.15264337522473748
+27.0	3.0	3.0			1.35	0.19798989873223333	0.19798989873223333
+36.0	6.0	6.0			1.22	0.22203603311174516	0.22203603311174516
+50.0	20.0	20.0			1.21	0.8318653737234168	0.8318653737234168
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d03-x01-y05
+Path=/REF/OPAL_2004_I648738/d03-x01-y05
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			0.168	0.027202941017470887	0.027202941017470887
+7.75	1.25	1.25			0.085	0.014317821063276353	0.014317821063276353
+10.5	1.5	1.5			0.069	0.012206555615733704	0.012206555615733704
+13.5	1.5	1.5			0.0527	0.010615083607772479	0.010615083607772479
+17.0	2.0	2.0			0.035	0.00840238061504	0.00840238061504
+21.5	2.5	2.5			0.033	0.012727922061357855	0.012727922061357855
+27.0	3.0	3.0			0.064	0.037121422386541175	0.037121422386541175
+							
+50.0	20.0	20.0			0.028	0.052810983706043584	0.052810983706043584
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d04-x01-y01
+Path=/REF/OPAL_2004_I648738/d04-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+6.25	0.25	0.25			44.0	10.04987562112089	10.04987562112089
+7.75	1.25	1.25			57.1	6.412487816752559	6.412487816752559
+10.5	1.5	1.5			68.1	5.813776741499453	5.813776741499453
+13.5	1.5	1.5			75.7	4.440720662234904	4.440720662234904
+17.0	2.0	2.0			80.6	4.47213595499958	4.47213595499958
+21.5	2.5	2.5			85.6	5.385164807134505	5.385164807134505
+25.5	1.5	1.5			92.4	7.710382610480494	7.710382610480494
+45.0	15.0	15.0			101.0	14.212670403551895	14.212670403551895
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d04-x01-y02
+Path=/REF/OPAL_2004_I648738/d04-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+6.25	0.25	0.25			27.5	2.3537204591879637	2.3537204591879637
+7.75	1.25	1.25			30.4	1.019803902718557	1.019803902718557
+10.5	1.5	1.5			32.37	0.8852683209061533	0.8852683209061533
+13.5	1.5	1.5			33.0	0.8637708029332782	0.8637708029332782
+17.0	2.0	2.0			32.9	0.9575489543621256	0.9575489543621256
+21.5	2.5	2.5			32.2	1.3038404810405297	1.3038404810405297
+25.5	1.5	1.5			34.7	2.9546573405388314	2.9546573405388314
+45.0	15.0	15.0			30.2	5.730619512757761	5.730619512757761
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d04-x01-y03
+Path=/REF/OPAL_2004_I648738/d04-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+6.25	0.25	0.25			11.99	0.25495097567963926	0.25495097567963926
+7.75	1.25	1.25			12.1	0.22472205054244232	0.22472205054244232
+10.5	1.5	1.5			11.49	0.30364452901377953	0.30364452901377953
+13.5	1.5	1.5			10.87	0.37	0.37
+17.0	2.0	2.0			10.35	0.30528675044947495	0.30528675044947495
+21.5	2.5	2.5			9.54	0.4360045871318328	0.4360045871318328
+25.5	1.5	1.5			8.13	0.9108238029388559	0.9108238029388559
+45.0	15.0	15.0			12.6	3.1827660925679098	3.1827660925679098
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d04-x01-y04
+Path=/REF/OPAL_2004_I648738/d04-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+6.25	0.25	0.25			2.59	0.13	0.13
+7.75	1.25	1.25			2.034	0.05571355310873648	0.05571355310873648
+10.5	1.5	1.5			1.741	0.07404052944165107	0.07404052944165107
+13.5	1.5	1.5			1.589	0.0579827560572969	0.0579827560572969
+17.0	2.0	2.0			1.389	0.09808669634563089	0.09808669634563089
+21.5	2.5	2.5			1.21	0.19313207915827965	0.19313207915827965
+25.5	1.5	1.5			1.14	0.29410882339705485	0.29410882339705485
+45.0	15.0	15.0			1.03	0.5124451190127582	0.5124451190127582
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d04-x01-y05
+Path=/REF/OPAL_2004_I648738/d04-x01-y05
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+6.25	0.25	0.25			0.158	0.025079872407968905	0.025079872407968905
+7.75	1.25	1.25			0.099	0.014866068747318507	0.014866068747318507
+10.5	1.5	1.5			0.077	0.017088007490635063	0.017088007490635063
+13.5	1.5	1.5			0.072	0.02641968962724581	0.02641968962724581
+17.0	2.0	2.0			0.047	0.020518284528683192	0.020518284528683192
+21.5	2.5	2.5			0.019	0.04738143096192853	0.04738143096192853
+							
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d05-x01-y01
+Path=/REF/OPAL_2004_I648738/d05-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			46.0	9.902019995940224	9.902019995940224
+7.75	1.25	1.25			69.0	14.142135623730951	14.142135623730951
+10.5	1.5	1.5			68.9	7.891767862779543	7.891767862779543
+13.5	1.5	1.5			75.5	8.584287972802404	8.584287972802404
+17.0	2.0	2.0			80.5	9.166242414424788	9.166242414424788
+21.5	2.5	2.5			87.7	2.3259406699226015	2.3259406699226015
+27.0	3.0	3.0			94.8	2.5079872407968904	2.5079872407968904
+36.0	6.0	6.0			98.7	4.62709412050371	4.62709412050371
+45.6	0.0	0.0			115.5	1.70293863659264	1.70293863659264
+93.8	0.0	0.0			123.9	2.4186773244895647	2.4186773244895647
+99.0	0.0	0.0			124.4	3.2202484376209237	3.2202484376209237
+103.1	0.0	0.0			125.4	2.745906043549196	2.745906043549196
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d05-x01-y02
+Path=/REF/OPAL_2004_I648738/d05-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			41.5	5.080354318352215	5.080354318352215
+7.75	1.25	1.25			45.0	3.8587562763149474	3.8587562763149474
+10.5	1.5	1.5			44.9	2.3259406699226015	2.3259406699226015
+13.5	1.5	1.5			49.4	2.4698178070456938	2.4698178070456938
+17.0	2.0	2.0			51.9	2.5298221281347035	2.5298221281347035
+21.5	2.5	2.5			53.38	1.0396634070698074	1.0396634070698074
+27.0	3.0	3.0			56.42	1.018282868362225	1.018282868362225
+36.0	6.0	6.0			55.1	1.5297058540778354	1.5297058540778354
+45.6	0.0	0.0			61.42	0.5323532661682466	0.5323532661682466
+93.8	0.0	0.0			62.4	1.3601470508735445	1.3601470508735445
+99.0	0.0	0.0			62.9	1.6643316977093237	1.6643316977093237
+103.1	0.0	0.0			62.8	1.3453624047073711	1.3453624047073711
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d05-x01-y03
+Path=/REF/OPAL_2004_I648738/d05-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			30.0	3.959797974644666	3.959797974644666
+7.75	1.25	1.25			31.6	3.1953090617340916	3.1953090617340916
+10.5	1.5	1.5			28.2	1.118033988749895	1.118033988749895
+13.5	1.5	1.5			29.3	1.2083045973594573	1.2083045973594573
+17.0	2.0	2.0			30.2	1.1704699910719625	1.1704699910719625
+21.5	2.5	2.5			29.79	0.570087712549569	0.570087712549569
+27.0	3.0	3.0			30.11	0.5521775076911409	0.5521775076911409
+36.0	6.0	6.0			30.26	0.9716480844420988	0.9716480844420988
+45.6	0.0	0.0			32.32	0.19235384061671346	0.19235384061671346
+93.8	0.0	0.0			31.56	0.718679344353238	0.718679344353238
+99.0	0.0	0.0			31.93	0.9347726996441433	0.9347726996441433
+103.1	0.0	0.0			31.7	0.7481310045707236	0.7481310045707236
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d05-x01-y04
+Path=/REF/OPAL_2004_I648738/d05-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			14.8	1.788854381999832	1.788854381999832
+7.75	1.25	1.25			16.07	1.1292918134831227	1.1292918134831227
+10.5	1.5	1.5			16.75	0.523450093132096	0.523450093132096
+13.5	1.5	1.5			16.38	0.48270073544588676	0.48270073544588676
+17.0	2.0	2.0			16.23	0.45803929962395146	0.45803929962395146
+21.5	2.5	2.5			16.29	0.33241540277189324	0.33241540277189324
+27.0	3.0	3.0			15.85	0.3124099870362662	0.3124099870362662
+36.0	6.0	6.0			15.99	0.5197114584074514	0.5197114584074514
+45.6	0.0	0.0			16.508	0.05787054518492114	0.05787054518492114
+93.8	0.0	0.0			16.14	0.5283937925449163	0.5283937925449163
+99.0	0.0	0.0			16.14	0.657419196555744	0.657419196555744
+103.1	0.0	0.0			16.11	0.46010868281309364	0.46010868281309364
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d05-x01-y05
+Path=/REF/OPAL_2004_I648738/d05-x01-y05
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			10.5	1.2083045973594573	1.2083045973594573
+7.75	1.25	1.25			9.39	0.6389053137985314	0.6389053137985314
+10.5	1.5	1.5			9.46	0.32015621187164245	0.32015621187164245
+13.5	1.5	1.5			9.65	0.3023243291566195	0.3023243291566195
+17.0	2.0	2.0			8.99	0.26925824035672524	0.26925824035672524
+21.5	2.5	2.5			9.14	0.30870698080866266	0.30870698080866266
+27.0	3.0	3.0			9.08	0.29154759474226505	0.29154759474226505
+36.0	6.0	6.0			8.95	0.14317821063276354	0.14317821063276354
+45.6	0.0	0.0			8.638	0.037643060449437424	0.037643060449437424
+93.8	0.0	0.0			8.3	0.18027756377319948	0.18027756377319948
+99.0	0.0	0.0			8.12	0.2624880949681338	0.2624880949681338
+103.1	0.0	0.0			8.45	0.261725046566048	0.261725046566048
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d05-x01-y06
+Path=/REF/OPAL_2004_I648738/d05-x01-y06
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			4.57	0.6095900261651268	0.6095900261651268
+7.75	1.25	1.25			4.55	0.447213595499958	0.447213595499958
+10.5	1.5	1.5			4.58	0.14212670403551894	0.14212670403551894
+13.5	1.5	1.5			4.33	0.13601470508735444	0.13601470508735444
+17.0	2.0	2.0			4.23	0.12206555615733704	0.12206555615733704
+21.5	2.5	2.5			4.098	0.08778382538941898	0.08778382538941898
+27.0	3.0	3.0			3.979	0.0816884324736373	0.0816884324736373
+36.0	6.0	6.0			4.005	0.10113851887386922	0.10113851887386922
+45.6	0.0	0.0			3.704	0.02942787793912432	0.02942787793912432
+93.8	0.0	0.0			3.525	0.10000499987500625	0.10000499987500625
+99.0	0.0	0.0			3.373	0.11180339887498948	0.11180339887498948
+103.1	0.0	0.0			3.372	0.12169634341261039	0.12169634341261039
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d05-x01-y07
+Path=/REF/OPAL_2004_I648738/d05-x01-y07
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			2.23	0.31400636936215165	0.31400636936215165
+7.75	1.25	1.25			1.72	0.11704699910719625	0.11704699910719625
+10.5	1.5	1.5			1.994	0.0859127464349732	0.0859127464349732
+13.5	1.5	1.5			1.744	0.07402702209328699	0.07402702209328699
+17.0	2.0	2.0			1.692	0.06881860213634101	0.06881860213634101
+21.5	2.5	2.5			1.645	0.05108815909777921	0.05108815909777921
+27.0	3.0	3.0			1.619	0.048414873747640814	0.048414873747640814
+36.0	6.0	6.0			1.613	0.07180529228406497	0.07180529228406497
+45.6	0.0	0.0			1.428	0.012369316876852983	0.012369316876852983
+93.8	0.0	0.0			1.259	0.075	0.075
+99.0	0.0	0.0			1.223	0.06788225099390856	0.06788225099390856
+103.1	0.0	0.0			1.292	0.06902897942168926	0.06902897942168926
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d05-x01-y08
+Path=/REF/OPAL_2004_I648738/d05-x01-y08
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			0.664	0.10916501271011697	0.10916501271011697
+7.75	1.25	1.25			0.658	0.06095900261651268	0.06095900261651268
+10.5	1.5	1.5			0.625	0.022803508501982758	0.022803508501982758
+13.5	1.5	1.5			0.575	0.0214009345590327	0.0214009345590327
+17.0	2.0	2.0			0.564	0.0191049731745428	0.0191049731745428
+21.5	2.5	2.5			0.546	0.01769180601295413	0.01769180601295413
+27.0	3.0	3.0			0.507	0.015620499351813309	0.015620499351813309
+36.0	6.0	6.0			0.508	0.037336309405188936	0.037336309405188936
+45.6	0.0	0.0			0.4241	0.006824954212300622	0.006824954212300622
+93.8	0.0	0.0			0.416	0.02690724809414742	0.02690724809414742
+99.0	0.0	0.0			0.389	0.02765863337187866	0.02765863337187866
+103.1	0.0	0.0			0.403	0.03047950130825634	0.03047950130825634
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d05-x01-y09
+Path=/REF/OPAL_2004_I648738/d05-x01-y09
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			0.102	0.030675723300355937	0.030675723300355937
+7.75	1.25	1.25			0.137	0.0191049731745428	0.0191049731745428
+10.5	1.5	1.5			0.1251	0.0071805292284064974	0.0071805292284064974
+13.5	1.5	1.5			0.1177	0.0058940648113165505	0.0058940648113165505
+17.0	2.0	2.0			0.1146	0.004933558553417604	0.004933558553417604
+21.5	2.5	2.5			0.1057	0.006940461079784253	0.006940461079784253
+27.0	3.0	3.0			0.0958	0.006161168720299745	0.006161168720299745
+36.0	6.0	6.0			0.0922	0.0040853396431630995	0.0040853396431630995
+45.6	0.0	0.0			0.0755	0.002942787793912432	0.002942787793912432
+93.8	0.0	0.0			0.0591	0.006648308055437865	0.006648308055437865
+99.0	0.0	0.0			0.0644	0.007655063683601855	0.007655063683601855
+103.1	0.0	0.0			0.0655	0.00815965685553014	0.00815965685553014
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d05-x01-y10
+Path=/REF/OPAL_2004_I648738/d05-x01-y10
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+5.25	1.25	1.25			0.049	0.015620499351813309	0.015620499351813309
+7.75	1.25	1.25			0.0245	0.0068117545463705605	0.0068117545463705605
+10.5	1.5	1.5			0.0245	0.008973850901368931	0.008973850901368931
+13.5	1.5	1.5			0.0181	0.006573431371817919	0.006573431371817919
+17.0	2.0	2.0			0.0154	0.005675385449465085	0.005675385449465085
+21.5	2.5	2.5			0.0138	0.005197114584074514	0.005197114584074514
+27.0	3.0	3.0			0.0125	0.0047074409183759285	0.0047074409183759285
+36.0	6.0	6.0			0.0119	0.005414794548272353	0.005414794548272353
+45.6	0.0	0.0			0.0097	0.00420119030752	0.00420119030752
+93.8	0.0	0.0			0.0112	0.006744627491566899	0.006744627491566899
+99.0	0.0	0.0			0.0095	0.005818934610390462	0.005818934610390462
+103.1	0.0	0.0			0.0106	0.00657875368135941	0.00657875368135941
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d06-x01-y01
+Path=/REF/OPAL_2004_I648738/d06-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.03	0.009999999999999998	0.010000000000000002			59.0	15.033296378372908	15.033296378372908
+0.06	0.019999999999999997	0.020000000000000004			40.1	4.27551166528639	4.27551166528639
+0.11499999999999999	0.03499999999999999	0.035			17.61	0.894427190999916	0.894427190999916
+0.19	0.04000000000000001	0.04000000000000001			8.23	0.6092618484691127	0.6092618484691127
+0.28	0.05000000000000002	0.04999999999999999			3.58	0.2778488797889961	0.2778488797889961
+0.39	0.06	0.06			1.469	0.12714165328483032	0.12714165328483032
+0.525	0.07500000000000001	0.07499999999999996			0.558	0.07907591289387686	0.07907591289387686
+0.675	0.07500000000000007	0.07499999999999996			0.136	0.024083189157584593	0.024083189157584593
+0.825	0.07499999999999996	0.07500000000000007			0.0724	0.01295569372901351	0.01295569372901351
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d06-x01-y02
+Path=/REF/OPAL_2004_I648738/d06-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.03	0.009999999999999998	0.010000000000000002			84.0	26.076809620810597	26.076809620810597
+0.06	0.019999999999999997	0.020000000000000004			53.2	9.243916918709298	9.243916918709298
+0.11499999999999999	0.03499999999999999	0.035			22.7	1.2649110640673518	1.2649110640673518
+0.19	0.04000000000000001	0.04000000000000001			8.9	0.618465843842649	0.618465843842649
+0.28	0.05000000000000002	0.04999999999999999			2.94	0.30870698080866266	0.30870698080866266
+0.39	0.06	0.06			1.01	0.12549501982150527	0.12549501982150527
+0.525	0.07500000000000001	0.07499999999999996			0.334	0.0976165969494942	0.0976165969494942
+0.675	0.07500000000000007	0.07499999999999996			0.074	0.035510561809129405	0.035510561809129405
+0.825	0.07499999999999996	0.07500000000000007			0.025	0.016155494421403512	0.016155494421403512
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d06-x01-y03
+Path=/REF/OPAL_2004_I648738/d06-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.03	0.009999999999999998	0.010000000000000002			54.0	20.024984394500787	20.024984394500787
+0.06	0.019999999999999997	0.020000000000000004			46.3	8.40535543567314	8.40535543567314
+0.11499999999999999	0.03499999999999999	0.035			22.3	1.2165525060596438	1.2165525060596438
+0.19	0.04000000000000001	0.04000000000000001			9.37	0.21470910553583888	0.21470910553583888
+0.28	0.05000000000000002	0.04999999999999999			3.76	0.14317821063276354	0.14317821063276354
+0.39	0.06	0.06			1.323	0.055758407437802596	0.055758407437802596
+0.525	0.07500000000000001	0.07499999999999996			0.367	0.05869412236331675	0.05869412236331675
+0.675	0.07500000000000007	0.07499999999999996			0.108	0.018788294228055936	0.018788294228055936
+0.825	0.07499999999999996	0.07500000000000007			0.0198	0.004455333881989093	0.004455333881989093
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d07-x01-y01
+Path=/REF/OPAL_2004_I648738/d07-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.02	0.01	0.009999999999999998			94.0	23.021728866442675	23.021728866442675
+0.055	0.025	0.025			44.9	2.3194827009486403	2.3194827009486403
+0.11499999999999999	0.03499999999999999	0.035			17.78	0.4712748667179272	0.4712748667179272
+0.19	0.04000000000000001	0.04000000000000001			7.74	0.29120439557122074	0.29120439557122074
+0.28	0.05000000000000002	0.04999999999999999			3.401	0.09848857801796104	0.09848857801796104
+0.39	0.06	0.06			1.372	0.04167733196834941	0.04167733196834941
+0.525	0.07500000000000001	0.07499999999999996			0.489	0.03162277660168379	0.03162277660168379
+0.675	0.07500000000000007	0.07499999999999996			0.1501	0.010151847122568385	0.010151847122568385
+0.825	0.07499999999999996	0.07500000000000007			0.0404	0.0031400636936215164	0.0031400636936215164
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d07-x01-y02
+Path=/REF/OPAL_2004_I648738/d07-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.02	0.01	0.009999999999999998			123.0	31.016124838541646	31.016124838541646
+0.055	0.025	0.025			61.8	4.318564576337836	4.318564576337836
+0.11499999999999999	0.03499999999999999	0.035			22.51	0.3138470965295043	0.3138470965295043
+0.19	0.04000000000000001	0.04000000000000001			7.41	0.3492849839314596	0.3492849839314596
+0.28	0.05000000000000002	0.04999999999999999			2.42	0.20396078054371142	0.20396078054371142
+0.39	0.06	0.06			0.738	0.06648308055437864	0.06648308055437864
+0.525	0.07500000000000001	0.07499999999999996			0.219	0.04143669871020132	0.04143669871020132
+0.675	0.07500000000000007	0.07499999999999996			0.0366	0.008910667763978187	0.008910667763978187
+0.825	0.07499999999999996	0.07500000000000007			0.00277	0.0012869343417595167	0.0012869343417595167
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d07-x01-y03
+Path=/REF/OPAL_2004_I648738/d07-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.02	0.01	0.009999999999999998			133.0	34.0147027033899	34.0147027033899
+0.055	0.025	0.025			67.7	6.220128616033595	6.220128616033595
+0.11499999999999999	0.03499999999999999	0.035			23.44	0.5738466694161429	0.5738466694161429
+0.19	0.04000000000000001	0.04000000000000001			7.74	0.18439088914585774	0.18439088914585774
+0.28	0.05000000000000002	0.04999999999999999			2.54	0.1341640786499874	0.1341640786499874
+0.39	0.06	0.06			0.727	0.04545327270945405	0.04545327270945405
+0.525	0.07500000000000001	0.07499999999999996			0.17	0.028178005607210743	0.028178005607210743
+0.675	0.07500000000000007	0.07499999999999996			0.0352	0.007283543093852057	0.007283543093852057
+0.825	0.07499999999999996	0.07500000000000007			0.0063	0.0024698178070456937	0.0024698178070456937
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d08-x01-y01
+Path=/REF/OPAL_2004_I648738/d08-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.02	0.01	0.009999999999999998			120.2	6.251399843235114	6.251399843235114
+0.055	0.025	0.025			50.7	0.9330058949438637	0.9330058949438637
+0.11499999999999999	0.03499999999999999	0.035			17.64	0.5748912940721924	0.5748912940721924
+0.19	0.04000000000000001	0.04000000000000001			7.39	0.12529964086141668	0.12529964086141668
+0.28	0.05000000000000002	0.04999999999999999			3.14	0.05240229002629561	0.05240229002629561
+0.39	0.06	0.06			1.248	0.022671568097509268	0.022671568097509268
+0.525	0.07500000000000001	0.07499999999999996			0.427	0.0206155281280883	0.0206155281280883
+0.675	0.07500000000000007	0.07499999999999996			0.1296	0.006774215821775978	0.006774215821775978
+0.825	0.07499999999999996	0.07500000000000007			0.0314	0.001979898987322333	0.001979898987322333
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d08-x01-y02
+Path=/REF/OPAL_2004_I648738/d08-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.02	0.01	0.009999999999999998			148.1	8.75728268357257	8.75728268357257
+0.055	0.025	0.025			65.5	2.7294688127912363	2.7294688127912363
+0.11499999999999999	0.03499999999999999	0.035			21.88	0.4838388161361178	0.4838388161361178
+0.19	0.04000000000000001	0.04000000000000001			7.12	0.2154065922853802	0.2154065922853802
+0.28	0.05000000000000002	0.04999999999999999			2.207	0.09798979538707078	0.09798979538707078
+0.39	0.06	0.06			0.675	0.034828149534535995	0.034828149534535995
+0.525	0.07500000000000001	0.07499999999999996			0.185	0.028635642126552705	0.028635642126552705
+0.675	0.07500000000000007	0.07499999999999996			0.0214	0.005243090691567332	0.005243090691567332
+0.825	0.07499999999999996	0.07500000000000007			9.6E-4	4.712748667179271E-4	4.712748667179271E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d08-x01-y03
+Path=/REF/OPAL_2004_I648738/d08-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.02	0.01	0.009999999999999998			200.0	23.194827009486403	23.194827009486403
+0.055	0.025	0.025			76.0	6.216912416947821	6.216912416947821
+0.11499999999999999	0.03499999999999999	0.035			22.4	1.392838827718412	1.392838827718412
+0.19	0.04000000000000001	0.04000000000000001			6.23	0.5333854141237835	0.5333854141237835
+0.28	0.05000000000000002	0.04999999999999999			2.22	0.2745906043549196	0.2745906043549196
+0.39	0.06	0.06			0.652	0.10920164833920777	0.10920164833920777
+0.525	0.07500000000000001	0.07499999999999996			0.12	0.0425205832509386	0.0425205832509386
+0.675	0.07500000000000007	0.07499999999999996			0.021	0.012529964086141668	0.012529964086141668
+0.825	0.07499999999999996	0.07500000000000007			0.0017	0.002745906043549196	0.002745906043549196
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d09-x01-y01
+Path=/REF/OPAL_2004_I648738/d09-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.05	0.020000000000000004	0.020000000000000004			54.9	5.186520991955976	5.186520991955976
+0.095	0.024999999999999994	0.024999999999999994			23.4	1.979898987322333	1.979898987322333
+0.16999999999999998	0.04999999999999999	0.05000000000000002			8.98	0.7779460135510691	0.7779460135510691
+0.35	0.12999999999999998	0.13			1.9	0.2193171219946131	0.2193171219946131
+0.69	0.20999999999999996	0.21000000000000008			0.128	0.03453983207834109	0.03453983207834109
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d09-x01-y02
+Path=/REF/OPAL_2004_I648738/d09-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.05	0.020000000000000004	0.020000000000000004			75.4	6.952697318307479	6.952697318307479
+0.095	0.024999999999999994	0.024999999999999994			27.4	4.104875150354758	4.104875150354758
+0.16999999999999998	0.04999999999999999	0.05000000000000002			8.8	1.4422205101855958	1.4422205101855958
+0.35	0.12999999999999998	0.13			1.22	0.2640075756488817	0.2640075756488817
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d09-x01-y03
+Path=/REF/OPAL_2004_I648738/d09-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.05	0.020000000000000004	0.020000000000000004			118.0	21.470910553583888	21.470910553583888
+0.095	0.024999999999999994	0.024999999999999994			27.5	9.457801012920498	9.457801012920498
+0.16999999999999998	0.04999999999999999	0.05000000000000002			9.7	4.606517122512408	4.606517122512408
+0.35	0.12999999999999998	0.13			1.21	0.8318653737234168	0.8318653737234168
+0.69	0.20999999999999996	0.21000000000000008			0.028	0.052810983706043584	0.052810983706043584
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d10-x01-y01
+Path=/REF/OPAL_2004_I648738/d10-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.005	0.005	0.005			172.4	3.125699921617557	3.125699921617557
+0.015	0.004999999999999999	0.005000000000000001			201.3	3.125699921617557	3.125699921617557
+0.025	0.005000000000000001	0.0049999999999999975			131.6	2.1213203435596424	2.1213203435596424
+0.035	0.0050000000000000044	0.0049999999999999975			90.6	1.414213562373095	1.414213562373095
+0.045	0.0049999999999999975	0.0050000000000000044			66.16	0.8561541917201597	0.8561541917201597
+0.055	0.0049999999999999975	0.0049999999999999975			50.72	0.7446475676452586	0.7446475676452586
+0.065	0.0050000000000000044	0.0050000000000000044			39.89	0.5375872022286244	0.5375872022286244
+0.07500000000000001	0.0050000000000000044	0.0049999999999999906			32.45	0.291547594742265	0.291547594742265
+0.08499999999999999	0.0049999999999999906	0.0050000000000000044			26.78	0.295296461204668	0.295296461204668
+0.095	0.0050000000000000044	0.0050000000000000044			22.69	0.2469817807045694	0.2469817807045694
+0.11	0.009999999999999995	0.009999999999999995			17.99	0.20615528128088303	0.20615528128088303
+0.13	0.010000000000000009	0.010000000000000009			13.64	0.18384776310850237	0.18384776310850237
+0.15000000000000002	0.010000000000000009	0.009999999999999981			10.66	0.17088007490635063	0.17088007490635063
+0.16999999999999998	0.009999999999999981	0.010000000000000009			8.36	0.1676305461424021	0.1676305461424021
+0.19	0.010000000000000009	0.010000000000000009			6.75	0.15524174696260024	0.15524174696260024
+0.225	0.024999999999999994	0.024999999999999994			4.791	0.07955501241279521	0.07955501241279521
+0.275	0.025000000000000022	0.024999999999999967			3.002	0.06356099432828281	0.06356099432828281
+0.35	0.04999999999999999	0.050000000000000044			1.57	0.027892651361962704	0.027892651361962704
+0.45	0.04999999999999999	0.04999999999999999			0.675	0.014560219778561038	0.014560219778561038
+0.55	0.050000000000000044	0.04999999999999993			0.296	0.01216552506059644	0.01216552506059644
+0.7	0.09999999999999998	0.10000000000000009			0.0926	0.0046529560496527365	0.0046529560496527365
+0.9	0.09999999999999998	0.09999999999999998			0.0119	0.006103277807866852	0.006103277807866852
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d10-x01-y02
+Path=/REF/OPAL_2004_I648738/d10-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.005	0.005	0.005			185.9	7.891767862779543	7.891767862779543
+0.015	0.004999999999999999	0.005000000000000001			224.0	11.045361017187261	11.045361017187261
+0.025	0.005000000000000001	0.0049999999999999975			154.3	6.5620118866091675	6.5620118866091675
+0.035	0.0050000000000000044	0.0049999999999999975			110.2	3.471310991541956	3.471310991541956
+0.045	0.0049999999999999975	0.0050000000000000044			82.3	1.9924858845171274	1.9924858845171274
+0.055	0.0049999999999999975	0.0049999999999999975			63.7	1.6763054614240211	1.6763054614240211
+0.065	0.0050000000000000044	0.0050000000000000044			51.9	0.7521303078589507	0.7521303078589507
+0.07500000000000001	0.0050000000000000044	0.0049999999999999906			42.05	0.587281874401041	0.587281874401041
+0.08499999999999999	0.0049999999999999906	0.0050000000000000044			35.17	0.6463745044476925	0.6463745044476925
+0.095	0.0050000000000000044	0.0050000000000000044			28.99	0.55	0.55
+0.11	0.009999999999999995	0.009999999999999995			22.33	0.447213595499958	0.447213595499958
+0.13	0.010000000000000009	0.010000000000000009			15.86	0.39812058474788764	0.39812058474788764
+0.15000000000000002	0.010000000000000009	0.009999999999999981			11.32	0.30886890422961005	0.30886890422961005
+0.16999999999999998	0.009999999999999981	0.010000000000000009			8.63	0.35468295701936403	0.35468295701936403
+0.19	0.010000000000000009	0.010000000000000009			6.43	0.4438468204234429	0.4438468204234429
+0.225	0.024999999999999994	0.024999999999999994			3.97	0.16155494421403513	0.16155494421403513
+0.275	0.025000000000000022	0.024999999999999967			2.05	0.11704699910719625	0.11704699910719625
+0.35	0.04999999999999999	0.050000000000000044			0.921	0.04382921400162225	0.04382921400162225
+0.45	0.04999999999999999	0.04999999999999999			0.314	0.01697056274847714	0.01697056274847714
+0.55	0.050000000000000044	0.04999999999999993			0.102	0.0147648230602334	0.0147648230602334
+0.7	0.09999999999999998	0.10000000000000009			0.0127	0.0017691806012954132	0.0017691806012954132
+0.9	0.09999999999999998	0.09999999999999998			1.4E-4	1.140175425099138E-4	1.140175425099138E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d11-x01-y01
+Path=/REF/OPAL_2004_I648738/d11-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.02	0.01	0.009999999999999998			207.3	8.06225774829855	8.06225774829855
+0.055	0.025	0.025			58.4	2.0615528128088303	2.0615528128088303
+0.11499999999999999	0.03499999999999999	0.035			17.57	0.6103277807866851	0.6103277807866851
+0.19	0.04000000000000001	0.04000000000000001			6.69	0.1562049935181331	0.1562049935181331
+0.28	0.05000000000000002	0.04999999999999999			2.597	0.08213403679352428	0.08213403679352428
+0.39	0.06	0.06			1.002	0.04101219330881976	0.04101219330881976
+0.525	0.07500000000000001	0.07499999999999996			0.326	0.021213203435596427	0.021213203435596427
+0.75	0.15000000000000002	0.15000000000000002			0.055	0.004891829923454004	0.004891829923454004
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/OPAL_2004_I648738/d11-x01-y02
+Path=/REF/OPAL_2004_I648738/d11-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.02	0.01	0.009999999999999998			234.5	6.802940540677979	6.802940540677979
+0.055	0.025	0.025			70.3	2.0518284528683193	2.0518284528683193
+0.11499999999999999	0.03499999999999999	0.035			20.7	1.16619037896906	1.16619037896906
+0.19	0.04000000000000001	0.04000000000000001			6.18	0.35510561809129404	0.35510561809129404
+0.28	0.05000000000000002	0.04999999999999999			2.01	0.24758836806279896	0.24758836806279896
+0.39	0.06	0.06			0.442	0.0824621125123532	0.0824621125123532
+0.525	0.07500000000000001	0.07499999999999996			0.178	0.04802082881417188	0.04802082881417188
+0.75	0.15000000000000002	0.15000000000000002			0.0079	0.004464302857109943	0.004464302857109943
+# END YODA_SCATTER2D 
+
+
diff --git a/src/Analyses/OPAL_2004_S6132243.cc b/analyses/pluginLEP/OPAL_2004_S6132243.cc
rename from src/Analyses/OPAL_2004_S6132243.cc
rename to analyses/pluginLEP/OPAL_2004_S6132243.cc
diff --git a/data/anainfo/OPAL_2004_S6132243.info b/analyses/pluginLEP/OPAL_2004_S6132243.info
rename from data/anainfo/OPAL_2004_S6132243.info
rename to analyses/pluginLEP/OPAL_2004_S6132243.info
diff --git a/data/plotinfo/OPAL_2004_S6132243.plot b/analyses/pluginLEP/OPAL_2004_S6132243.plot
rename from data/plotinfo/OPAL_2004_S6132243.plot
rename to analyses/pluginLEP/OPAL_2004_S6132243.plot
diff --git a/data/refdata/OPAL_2004_S6132243.yoda b/analyses/pluginLEP/OPAL_2004_S6132243.yoda
rename from data/refdata/OPAL_2004_S6132243.yoda
rename to analyses/pluginLEP/OPAL_2004_S6132243.yoda
diff --git a/src/Analyses/SLD_1996_S3398250.cc b/analyses/pluginLEP/SLD_1996_S3398250.cc
rename from src/Analyses/SLD_1996_S3398250.cc
rename to analyses/pluginLEP/SLD_1996_S3398250.cc
diff --git a/data/anainfo/SLD_1996_S3398250.info b/analyses/pluginLEP/SLD_1996_S3398250.info
rename from data/anainfo/SLD_1996_S3398250.info
rename to analyses/pluginLEP/SLD_1996_S3398250.info
diff --git a/data/plotinfo/SLD_1996_S3398250.plot b/analyses/pluginLEP/SLD_1996_S3398250.plot
rename from data/plotinfo/SLD_1996_S3398250.plot
rename to analyses/pluginLEP/SLD_1996_S3398250.plot
diff --git a/data/refdata/SLD_1996_S3398250.yoda b/analyses/pluginLEP/SLD_1996_S3398250.yoda
rename from data/refdata/SLD_1996_S3398250.yoda
rename to analyses/pluginLEP/SLD_1996_S3398250.yoda
diff --git a/src/Analyses/SLD_1999_S3743934.cc b/analyses/pluginLEP/SLD_1999_S3743934.cc
rename from src/Analyses/SLD_1999_S3743934.cc
rename to analyses/pluginLEP/SLD_1999_S3743934.cc
diff --git a/data/anainfo/SLD_1999_S3743934.info b/analyses/pluginLEP/SLD_1999_S3743934.info
rename from data/anainfo/SLD_1999_S3743934.info
rename to analyses/pluginLEP/SLD_1999_S3743934.info
diff --git a/data/plotinfo/SLD_1999_S3743934.plot b/analyses/pluginLEP/SLD_1999_S3743934.plot
rename from data/plotinfo/SLD_1999_S3743934.plot
rename to analyses/pluginLEP/SLD_1999_S3743934.plot
diff --git a/data/refdata/SLD_1999_S3743934.yoda b/analyses/pluginLEP/SLD_1999_S3743934.yoda
rename from data/refdata/SLD_1999_S3743934.yoda
rename to analyses/pluginLEP/SLD_1999_S3743934.yoda
diff --git a/src/Analyses/SLD_2002_S4869273.cc b/analyses/pluginLEP/SLD_2002_S4869273.cc
rename from src/Analyses/SLD_2002_S4869273.cc
rename to analyses/pluginLEP/SLD_2002_S4869273.cc
--- a/src/Analyses/SLD_2002_S4869273.cc
+++ b/analyses/pluginLEP/SLD_2002_S4869273.cc
@@ -1,107 +1,103 @@
 // -*- C++ -*-
 #include "Rivet/Analysis.hh"
 #include "Rivet/Projections/Beam.hh"
 #include "Rivet/Projections/FinalState.hh"
 #include "Rivet/Projections/ChargedFinalState.hh"
 
 
-/// @todo Use inline PID functions instead
-#define IS_PARTON_PDGID(id) ( abs(id) <= 100 && abs(id) != 22 && (abs(id) < 11 || abs(id) > 18) )
-#define IS_BHADRON_PDGID(id) ( ((abs(id)/100)%10 == 5) || (abs(id) >= 5000 && abs(id) <= 5999) )
-
 namespace Rivet {
 
 
   /// @brief SLD b-fragmentation measurement
   /// @author Peter Richardson
   class SLD_2002_S4869273 : public Analysis {
   public:
 
     /// Constructor
     SLD_2002_S4869273()
       : Analysis("SLD_2002_S4869273")
     {
     }
 
 
     /// @name Analysis methods
     //@{
 
     /// Book projections and histograms
     void init() {
       declare(Beam(), "Beams");
       declare(ChargedFinalState(), "FS");
 
       _histXbweak     = bookHisto1D(1, 1, 1);
     }
 
 
     void analyze(const Event& e) {
       const FinalState& fs = apply<FinalState>(e, "FS");
       const size_t numParticles = fs.particles().size();
 
       // Even if we only generate hadronic events, we still need a cut on numCharged >= 2.
       if (numParticles < 2) {
         MSG_DEBUG("Failed ncharged cut");
         vetoEvent;
       }
       MSG_DEBUG("Passed ncharged cut");
 
       // Get event weight for histo filling
       const double weight = e.weight();
 
       // Get beams and average beam momentum
       const ParticlePair& beams = apply<Beam>(e, "Beams").beams();
       const double meanBeamMom = ( beams.first.p3().mod() +
                                    beams.second.p3().mod() ) / 2.0;
       MSG_DEBUG("Avg beam momentum = " << meanBeamMom);
 
 
       foreach (const GenParticle* p, particles(e.genEvent())) {
         const GenVertex* dv = p->end_vertex();
-        if (IS_BHADRON_PDGID(p->pdg_id())) {
+        if (PID::isBottomHadron(p->pdg_id())) {
           const double xp = p->momentum().e()/meanBeamMom;
 
           // If the B-hadron has no B-hadron as a child, it decayed weakly:
           if (dv) {
             bool is_weak = true;
             for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin() ;
                  pp != dv->particles_out_const_end() ; ++pp) {
-              if (IS_BHADRON_PDGID((*pp)->pdg_id())) {
+              if (PID::isBottomHadron((*pp)->pdg_id())) {
                 is_weak = false;
               }
             }
             if (is_weak) {
               _histXbweak->fill(xp, weight);
             }
           }
 
         }
       }
     }
 
 
     // Finalize
     void finalize() {
       normalize(_histXbweak);
     }
 
 
   private:
 
     /// Store the weighted sums of numbers of charged / charged+neutral
     /// particles - used to calculate average number of particles for the
     /// inclusive single particle distributions' normalisations.
 
     Histo1DPtr _histXbweak;
 
     //@}
 
   };
 
 
 
   // The hook for the plugin system
   DECLARE_RIVET_PLUGIN(SLD_2002_S4869273);
 
 }
diff --git a/data/anainfo/SLD_2002_S4869273.info b/analyses/pluginLEP/SLD_2002_S4869273.info
rename from data/anainfo/SLD_2002_S4869273.info
rename to analyses/pluginLEP/SLD_2002_S4869273.info
diff --git a/data/plotinfo/SLD_2002_S4869273.plot b/analyses/pluginLEP/SLD_2002_S4869273.plot
rename from data/plotinfo/SLD_2002_S4869273.plot
rename to analyses/pluginLEP/SLD_2002_S4869273.plot
diff --git a/data/refdata/SLD_2002_S4869273.yoda b/analyses/pluginLEP/SLD_2002_S4869273.yoda
rename from data/refdata/SLD_2002_S4869273.yoda
rename to analyses/pluginLEP/SLD_2002_S4869273.yoda
diff --git a/src/Analyses/SLD_2004_S5693039.cc b/analyses/pluginLEP/SLD_2004_S5693039.cc
rename from src/Analyses/SLD_2004_S5693039.cc
rename to analyses/pluginLEP/SLD_2004_S5693039.cc
diff --git a/data/anainfo/SLD_2004_S5693039.info b/analyses/pluginLEP/SLD_2004_S5693039.info
rename from data/anainfo/SLD_2004_S5693039.info
rename to analyses/pluginLEP/SLD_2004_S5693039.info
diff --git a/data/plotinfo/SLD_2004_S5693039.plot b/analyses/pluginLEP/SLD_2004_S5693039.plot
rename from data/plotinfo/SLD_2004_S5693039.plot
rename to analyses/pluginLEP/SLD_2004_S5693039.plot
diff --git a/data/refdata/SLD_2004_S5693039.yoda b/analyses/pluginLEP/SLD_2004_S5693039.yoda
rename from data/refdata/SLD_2004_S5693039.yoda
rename to analyses/pluginLEP/SLD_2004_S5693039.yoda
diff --git a/src/Analyses/LHCB_2010_I867355.cc b/analyses/pluginLHCb/LHCB_2010_I867355.cc
rename from src/Analyses/LHCB_2010_I867355.cc
rename to analyses/pluginLHCb/LHCB_2010_I867355.cc
diff --git a/data/anainfo/LHCB_2010_I867355.info b/analyses/pluginLHCb/LHCB_2010_I867355.info
rename from data/anainfo/LHCB_2010_I867355.info
rename to analyses/pluginLHCb/LHCB_2010_I867355.info
diff --git a/data/plotinfo/LHCB_2010_I867355.plot b/analyses/pluginLHCb/LHCB_2010_I867355.plot
rename from data/plotinfo/LHCB_2010_I867355.plot
rename to analyses/pluginLHCb/LHCB_2010_I867355.plot
diff --git a/data/refdata/LHCB_2010_I867355.yoda b/analyses/pluginLHCb/LHCB_2010_I867355.yoda
rename from data/refdata/LHCB_2010_I867355.yoda
rename to analyses/pluginLHCb/LHCB_2010_I867355.yoda
diff --git a/src/Analyses/LHCB_2010_S8758301.cc b/analyses/pluginLHCb/LHCB_2010_S8758301.cc
rename from src/Analyses/LHCB_2010_S8758301.cc
rename to analyses/pluginLHCb/LHCB_2010_S8758301.cc
diff --git a/data/anainfo/LHCB_2010_S8758301.info b/analyses/pluginLHCb/LHCB_2010_S8758301.info
rename from data/anainfo/LHCB_2010_S8758301.info
rename to analyses/pluginLHCb/LHCB_2010_S8758301.info
diff --git a/data/plotinfo/LHCB_2010_S8758301.plot b/analyses/pluginLHCb/LHCB_2010_S8758301.plot
rename from data/plotinfo/LHCB_2010_S8758301.plot
rename to analyses/pluginLHCb/LHCB_2010_S8758301.plot
diff --git a/data/refdata/LHCB_2010_S8758301.yoda b/analyses/pluginLHCb/LHCB_2010_S8758301.yoda
rename from data/refdata/LHCB_2010_S8758301.yoda
rename to analyses/pluginLHCb/LHCB_2010_S8758301.yoda
diff --git a/src/Analyses/LHCB_2011_I917009.cc b/analyses/pluginLHCb/LHCB_2011_I917009.cc
rename from src/Analyses/LHCB_2011_I917009.cc
rename to analyses/pluginLHCb/LHCB_2011_I917009.cc
diff --git a/data/anainfo/LHCB_2011_I917009.info b/analyses/pluginLHCb/LHCB_2011_I917009.info
rename from data/anainfo/LHCB_2011_I917009.info
rename to analyses/pluginLHCb/LHCB_2011_I917009.info
diff --git a/data/plotinfo/LHCB_2011_I917009.plot b/analyses/pluginLHCb/LHCB_2011_I917009.plot
rename from data/plotinfo/LHCB_2011_I917009.plot
rename to analyses/pluginLHCb/LHCB_2011_I917009.plot
diff --git a/data/refdata/LHCB_2011_I917009.yoda b/analyses/pluginLHCb/LHCB_2011_I917009.yoda
rename from data/refdata/LHCB_2011_I917009.yoda
rename to analyses/pluginLHCb/LHCB_2011_I917009.yoda
diff --git a/src/Analyses/LHCB_2011_I919315.cc b/analyses/pluginLHCb/LHCB_2011_I919315.cc
rename from src/Analyses/LHCB_2011_I919315.cc
rename to analyses/pluginLHCb/LHCB_2011_I919315.cc
diff --git a/data/anainfo/LHCB_2011_I919315.info b/analyses/pluginLHCb/LHCB_2011_I919315.info
rename from data/anainfo/LHCB_2011_I919315.info
rename to analyses/pluginLHCb/LHCB_2011_I919315.info
diff --git a/data/plotinfo/LHCB_2011_I919315.plot b/analyses/pluginLHCb/LHCB_2011_I919315.plot
rename from data/plotinfo/LHCB_2011_I919315.plot
rename to analyses/pluginLHCb/LHCB_2011_I919315.plot
diff --git a/data/refdata/LHCB_2011_I919315.yoda b/analyses/pluginLHCb/LHCB_2011_I919315.yoda
rename from data/refdata/LHCB_2011_I919315.yoda
rename to analyses/pluginLHCb/LHCB_2011_I919315.yoda
diff --git a/src/Analyses/LHCB_2012_I1119400.cc b/analyses/pluginLHCb/LHCB_2012_I1119400.cc
rename from src/Analyses/LHCB_2012_I1119400.cc
rename to analyses/pluginLHCb/LHCB_2012_I1119400.cc
diff --git a/data/anainfo/LHCB_2012_I1119400.info b/analyses/pluginLHCb/LHCB_2012_I1119400.info
rename from data/anainfo/LHCB_2012_I1119400.info
rename to analyses/pluginLHCb/LHCB_2012_I1119400.info
diff --git a/data/plotinfo/LHCB_2012_I1119400.plot b/analyses/pluginLHCb/LHCB_2012_I1119400.plot
rename from data/plotinfo/LHCB_2012_I1119400.plot
rename to analyses/pluginLHCb/LHCB_2012_I1119400.plot
diff --git a/data/refdata/LHCB_2012_I1119400.yoda b/analyses/pluginLHCb/LHCB_2012_I1119400.yoda
rename from data/refdata/LHCB_2012_I1119400.yoda
rename to analyses/pluginLHCb/LHCB_2012_I1119400.yoda
diff --git a/src/Analyses/LHCB_2012_I1208102.cc b/analyses/pluginLHCb/LHCB_2012_I1208102.cc
rename from src/Analyses/LHCB_2012_I1208102.cc
rename to analyses/pluginLHCb/LHCB_2012_I1208102.cc
diff --git a/data/anainfo/LHCB_2012_I1208102.info b/analyses/pluginLHCb/LHCB_2012_I1208102.info
rename from data/anainfo/LHCB_2012_I1208102.info
rename to analyses/pluginLHCb/LHCB_2012_I1208102.info
diff --git a/data/plotinfo/LHCB_2012_I1208102.plot b/analyses/pluginLHCb/LHCB_2012_I1208102.plot
rename from data/plotinfo/LHCB_2012_I1208102.plot
rename to analyses/pluginLHCb/LHCB_2012_I1208102.plot
diff --git a/data/refdata/LHCB_2012_I1208102.yoda b/analyses/pluginLHCb/LHCB_2012_I1208102.yoda
rename from data/refdata/LHCB_2012_I1208102.yoda
rename to analyses/pluginLHCb/LHCB_2012_I1208102.yoda
diff --git a/src/Analyses/LHCB_2013_I1208105.cc b/analyses/pluginLHCb/LHCB_2013_I1208105.cc
rename from src/Analyses/LHCB_2013_I1208105.cc
rename to analyses/pluginLHCb/LHCB_2013_I1208105.cc
diff --git a/data/anainfo/LHCB_2013_I1208105.info b/analyses/pluginLHCb/LHCB_2013_I1208105.info
rename from data/anainfo/LHCB_2013_I1208105.info
rename to analyses/pluginLHCb/LHCB_2013_I1208105.info
diff --git a/data/plotinfo/LHCB_2013_I1208105.plot b/analyses/pluginLHCb/LHCB_2013_I1208105.plot
rename from data/plotinfo/LHCB_2013_I1208105.plot
rename to analyses/pluginLHCb/LHCB_2013_I1208105.plot
diff --git a/data/refdata/LHCB_2013_I1208105.yoda b/analyses/pluginLHCb/LHCB_2013_I1208105.yoda
rename from data/refdata/LHCB_2013_I1208105.yoda
rename to analyses/pluginLHCb/LHCB_2013_I1208105.yoda
diff --git a/src/Analyses/LHCB_2013_I1218996.cc b/analyses/pluginLHCb/LHCB_2013_I1218996.cc
rename from src/Analyses/LHCB_2013_I1218996.cc
rename to analyses/pluginLHCb/LHCB_2013_I1218996.cc
diff --git a/data/anainfo/LHCB_2013_I1218996.info b/analyses/pluginLHCb/LHCB_2013_I1218996.info
rename from data/anainfo/LHCB_2013_I1218996.info
rename to analyses/pluginLHCb/LHCB_2013_I1218996.info
diff --git a/data/plotinfo/LHCB_2013_I1218996.plot b/analyses/pluginLHCb/LHCB_2013_I1218996.plot
rename from data/plotinfo/LHCB_2013_I1218996.plot
rename to analyses/pluginLHCb/LHCB_2013_I1218996.plot
diff --git a/data/refdata/LHCB_2013_I1218996.yoda b/analyses/pluginLHCb/LHCB_2013_I1218996.yoda
rename from data/refdata/LHCB_2013_I1218996.yoda
rename to analyses/pluginLHCb/LHCB_2013_I1218996.yoda
diff --git a/src/Analyses/LHCB_2014_I1262703.cc b/analyses/pluginLHCb/LHCB_2014_I1262703.cc
rename from src/Analyses/LHCB_2014_I1262703.cc
rename to analyses/pluginLHCb/LHCB_2014_I1262703.cc
diff --git a/data/anainfo/LHCB_2014_I1262703.info b/analyses/pluginLHCb/LHCB_2014_I1262703.info
rename from data/anainfo/LHCB_2014_I1262703.info
rename to analyses/pluginLHCb/LHCB_2014_I1262703.info
diff --git a/data/plotinfo/LHCB_2014_I1262703.plot b/analyses/pluginLHCb/LHCB_2014_I1262703.plot
rename from data/plotinfo/LHCB_2014_I1262703.plot
rename to analyses/pluginLHCb/LHCB_2014_I1262703.plot
diff --git a/data/refdata/LHCB_2014_I1262703.yoda b/analyses/pluginLHCb/LHCB_2014_I1262703.yoda
rename from data/refdata/LHCB_2014_I1262703.yoda
rename to analyses/pluginLHCb/LHCB_2014_I1262703.yoda
diff --git a/src/Analyses/LHCB_2014_I1281685.cc b/analyses/pluginLHCb/LHCB_2014_I1281685.cc
rename from src/Analyses/LHCB_2014_I1281685.cc
rename to analyses/pluginLHCb/LHCB_2014_I1281685.cc
diff --git a/data/anainfo/LHCB_2014_I1281685.info b/analyses/pluginLHCb/LHCB_2014_I1281685.info
rename from data/anainfo/LHCB_2014_I1281685.info
rename to analyses/pluginLHCb/LHCB_2014_I1281685.info
diff --git a/data/plotinfo/LHCB_2014_I1281685.plot b/analyses/pluginLHCb/LHCB_2014_I1281685.plot
rename from data/plotinfo/LHCB_2014_I1281685.plot
rename to analyses/pluginLHCb/LHCB_2014_I1281685.plot
diff --git a/data/refdata/LHCB_2014_I1281685.yoda b/analyses/pluginLHCb/LHCB_2014_I1281685.yoda
rename from data/refdata/LHCB_2014_I1281685.yoda
rename to analyses/pluginLHCb/LHCB_2014_I1281685.yoda
diff --git a/src/Analyses/LHCB_2015_I1333223.cc b/analyses/pluginLHCb/LHCB_2015_I1333223.cc
rename from src/Analyses/LHCB_2015_I1333223.cc
rename to analyses/pluginLHCb/LHCB_2015_I1333223.cc
diff --git a/data/anainfo/LHCB_2015_I1333223.info b/analyses/pluginLHCb/LHCB_2015_I1333223.info
rename from data/anainfo/LHCB_2015_I1333223.info
rename to analyses/pluginLHCb/LHCB_2015_I1333223.info
diff --git a/data/plotinfo/LHCB_2015_I1333223.plot b/analyses/pluginLHCb/LHCB_2015_I1333223.plot
rename from data/plotinfo/LHCB_2015_I1333223.plot
rename to analyses/pluginLHCb/LHCB_2015_I1333223.plot
diff --git a/data/refdata/LHCB_2015_I1333223.yoda b/analyses/pluginLHCb/LHCB_2015_I1333223.yoda
rename from data/refdata/LHCB_2015_I1333223.yoda
rename to analyses/pluginLHCb/LHCB_2015_I1333223.yoda
diff --git a/src/Analyses/LHCF_2012_I1115479.cc b/analyses/pluginLHCf/LHCF_2012_I1115479.cc
rename from src/Analyses/LHCF_2012_I1115479.cc
rename to analyses/pluginLHCf/LHCF_2012_I1115479.cc
diff --git a/data/anainfo/LHCF_2012_I1115479.info b/analyses/pluginLHCf/LHCF_2012_I1115479.info
rename from data/anainfo/LHCF_2012_I1115479.info
rename to analyses/pluginLHCf/LHCF_2012_I1115479.info
diff --git a/data/plotinfo/LHCF_2012_I1115479.plot b/analyses/pluginLHCf/LHCF_2012_I1115479.plot
rename from data/plotinfo/LHCF_2012_I1115479.plot
rename to analyses/pluginLHCf/LHCF_2012_I1115479.plot
diff --git a/data/refdata/LHCF_2012_I1115479.yoda b/analyses/pluginLHCf/LHCF_2012_I1115479.yoda
rename from data/refdata/LHCF_2012_I1115479.yoda
rename to analyses/pluginLHCf/LHCF_2012_I1115479.yoda
diff --git a/src/Analyses/EXAMPLE.cc b/analyses/pluginMC/EXAMPLE.cc
rename from src/Analyses/EXAMPLE.cc
rename to analyses/pluginMC/EXAMPLE.cc
diff --git a/data/anainfo/EXAMPLE.info b/analyses/pluginMC/EXAMPLE.info
rename from data/anainfo/EXAMPLE.info
rename to analyses/pluginMC/EXAMPLE.info
diff --git a/data/plotinfo/EXAMPLE.plot b/analyses/pluginMC/EXAMPLE.plot
rename from data/plotinfo/EXAMPLE.plot
rename to analyses/pluginMC/EXAMPLE.plot
diff --git a/src/Analyses/EXAMPLE_CUTS.cc b/analyses/pluginMC/EXAMPLE_CUTS.cc
rename from src/Analyses/EXAMPLE_CUTS.cc
rename to analyses/pluginMC/EXAMPLE_CUTS.cc
diff --git a/data/anainfo/EXAMPLE_CUTS.info b/analyses/pluginMC/EXAMPLE_CUTS.info
rename from data/anainfo/EXAMPLE_CUTS.info
rename to analyses/pluginMC/EXAMPLE_CUTS.info
diff --git a/src/Analyses/EXAMPLE_SMEAR.cc b/analyses/pluginMC/EXAMPLE_SMEAR.cc
rename from src/Analyses/EXAMPLE_SMEAR.cc
rename to analyses/pluginMC/EXAMPLE_SMEAR.cc
--- a/src/Analyses/EXAMPLE_SMEAR.cc
+++ b/analyses/pluginMC/EXAMPLE_SMEAR.cc
@@ -1,238 +1,238 @@
 // -*- C++ -*-
 #include "Rivet/Analysis.hh"
 #include "Rivet/Projections/FastJets.hh"
 #include "Rivet/Projections/IdentifiedFinalState.hh"
 #include "Rivet/Projections/DressedLeptons.hh"
 #include "Rivet/Projections/TauFinder.hh"
 #include "Rivet/Projections/SmearedJets.hh"
 #include "Rivet/Projections/SmearedParticles.hh"
 #include "Rivet/Projections/SmearedMET.hh"
 
 namespace Rivet {
 
 
   class EXAMPLE_SMEAR : public Analysis {
   public:
 
     /// Constructor
     DEFAULT_RIVET_ANALYSIS_CTOR(EXAMPLE_SMEAR);
 
 
     /// @name Analysis methods
     //@{
 
     /// Book histograms and initialise projections before the run
     void init() {
 
       MissingMomentum mm(Cuts::abseta < 5);
       declare(mm, "MET0");
 
       SmearedMET smm1(mm, MET_SMEAR_IDENTITY);
       declare(smm1, "MET1");
 
       SmearedMET smm2(mm, [](const Vector3& met, double){ return P3_SMEAR_LEN_GAUSS(met, 0.1*met.mod()); });
       declare(smm2, "MET2");
 
 
       FastJets fj(FinalState(Cuts::abseta < 5), FastJets::ANTIKT, 0.4);
       declare(fj, "Jets0");
 
       SmearedJets sj1(fj, JET_SMEAR_IDENTITY);
       declare(sj1, "Jets1");
 
       SmearedJets sj2(fj, JET_SMEAR_ATLAS_RUN1,
                       [](const Jet& j){ return j.bTagged() ? 0.7*(1 - exp(-j.pT()/(10*GeV))) : 0.01; } );
       declare(sj2, "Jets2");
 
       SmearedJets sj3(fj,
                       [](const Jet& j){ return j; },
-                      [](const Jet& j){ return j.bTagged() ? 0.7*(1 - exp(-j.pT()/(10*GeV))) : 0.01; },
+                      JET_BTAG_EFFS(0.7, 0.1, 0.01),
                       JET_CTAG_PERFECT,
                       [](const Jet& j){ return 0.8; });
       declare(sj3, "Jets3");
 
 
       IdentifiedFinalState photons(Cuts::abseta < 5, PID::PHOTON);
 
 
       IdentifiedFinalState truthelectrons(Cuts::abseta < 5 && Cuts::pT > 10*GeV, {{PID::ELECTRON, PID::POSITRON}});
       declare(truthelectrons, "Electrons0");
       DressedLeptons dressedelectrons(photons, truthelectrons, 0.2);
       declare(dressedelectrons, "Electrons1");
       SmearedParticles recoelectrons(truthelectrons, ELECTRON_EFF_ATLAS_RUN1, ELECTRON_SMEAR_ATLAS_RUN1); //< @note Can't use dressedelectrons yet...
       declare(recoelectrons, "Electrons2");
 
       IdentifiedFinalState truthmuons(Cuts::abseta < 5 && Cuts::pT > 10*GeV, {{PID::MUON, PID::ANTIMUON}});
       declare(truthmuons, "Muons0");
       DressedLeptons dressedmuons(photons, truthmuons, 0.2);
       declare(dressedmuons, "Muons1");
       SmearedParticles recomuons(truthmuons, MUON_EFF_ATLAS_RUN1, MUON_SMEAR_ATLAS_RUN1); //< @note Can't use dressedmuons yet...
       declare(recomuons, "Muons2");
 
       TauFinder truthtaus(TauFinder::ANY, Cuts::abseta < 5 && Cuts::pT > 10*GeV);
       declare(truthtaus, "Taus0");
       DressedLeptons dressedtaus(photons, truthtaus, 0.2);
       declare(dressedtaus, "Taus1");
       SmearedParticles recotaus(truthtaus, TAU_EFF_ATLAS_RUN1, TAU_SMEAR_ATLAS_RUN1); //< @note Can't use dressedtaus yet...
       declare(recotaus, "Taus2");
 
 
       _h_met_true = bookHisto1D("met_true", 30, 0.0, 120);
       _h_met_reco = bookHisto1D("met_reco", 30, 0.0, 120);
 
       _h_nj_true = bookHisto1D("jet_N_true", 10, -0.5, 9.5);
       _h_nj_reco = bookHisto1D("jet_N_reco", 10, -0.5, 9.5);
       _h_j1pt_true = bookHisto1D("jet_pt1_true", 30, 0.0, 120);
       _h_j1pt_reco = bookHisto1D("jet_pt1_reco", 30, 0.0, 120);
       _h_j1eta_true = bookHisto1D("jet_eta1_true", 20, -5.0, 5.0);
       _h_j1eta_reco = bookHisto1D("jet_eta1_reco", 20, -5.0, 5.0);
 
       _h_ne_true = bookHisto1D("elec_N_true", 5, -0.5, 4.5);
       _h_ne_reco = bookHisto1D("elec_N_reco", 5, -0.5, 4.5);
       _h_e1pt_true = bookHisto1D("elec_pt1_true", 30, 0, 120);
       _h_e1pt_reco = bookHisto1D("elec_pt1_reco", 30, 0, 120);
       _h_e1eta_true = bookHisto1D("elec_eta1_true", 20, -5.0, 5.0);
       _h_e1eta_reco = bookHisto1D("elec_eta1_reco", 20, -5.0, 5.0);
 
       _h_nm_true = bookHisto1D("muon_N_true", 5, -0.5, 4.5);
       _h_nm_reco = bookHisto1D("muon_N_reco", 5, -0.5, 4.5);
       _h_m1pt_true = bookHisto1D("muon_pt1_true", 30, 0, 120);
       _h_m1pt_reco = bookHisto1D("muon_pt1_reco", 30, 0, 120);
       _h_m1eta_true = bookHisto1D("muon_eta1_true", 20, -5.0, 5.0);
       _h_m1eta_reco = bookHisto1D("muon_eta1_reco", 20, -5.0, 5.0);
 
       _h_nt_true = bookHisto1D("tau_N_true", 5, -0.5, 4.5);
       _h_nt_reco = bookHisto1D("tau_N_reco", 5, -0.5, 4.5);
       _h_t1pt_true = bookHisto1D("tau_pt1_true", 30, 0, 120);
       _h_t1pt_reco = bookHisto1D("tau_pt1_reco", 30, 0, 120);
       _h_t1eta_true = bookHisto1D("tau_eta1_true", 20, -5.0, 5.0);
       _h_t1eta_reco = bookHisto1D("tau_eta1_reco", 20, -5.0, 5.0);
     }
 
 
     /// Perform the per-event analysis
     void analyze(const Event& event) {
       const double weight = event.weight();
 
       const Vector3 met0 = apply<MissingMomentum>(event, "MET0").vectorEt();
       const Vector3 met1 = apply<SmearedMET>(event, "MET1").vectorEt();
       const Vector3 met2 = apply<SmearedMET>(event, "MET2").vectorEt();
       MSG_DEBUG("MET = " << met0.mod()/GeV << ", " << met1.mod()/GeV << ", " << met2.mod()/GeV << " GeV");
       _h_met_true->fill(met0.mod()/GeV, weight);
       _h_met_reco->fill(met2.mod()/GeV, weight);
 
       const Jets jets0 = apply<JetAlg>(event, "Jets0").jetsByPt(Cuts::pT > 10*GeV);
       const Jets jets1 = apply<JetAlg>(event, "Jets1").jetsByPt(Cuts::pT > 10*GeV);
       const Jets jets2 = apply<JetAlg>(event, "Jets2").jetsByPt(Cuts::pT > 10*GeV);
       const Jets jets3 = apply<JetAlg>(event, "Jets3").jetsByPt(Cuts::pT > 10*GeV);
       MSG_DEBUG("Numbers of jets = " << jets0.size() << " true; "
                << jets1.size() << ", " << jets2.size() << ", " << jets3.size());
       _h_nj_true->fill(jets0.size(), weight);
       _h_nj_reco->fill(jets2.size(), weight);
       if (!jets0.empty()) {
         _h_j1pt_true->fill(jets0.front().pT()/GeV, weight);
         _h_j1eta_true->fill(jets0.front().eta(), weight);
       }
       if (!jets2.empty()) {
         _h_j1pt_reco->fill(jets2.front().pT()/GeV, weight);
         _h_j1eta_reco->fill(jets2.front().eta(), weight);
       }
 
       const Particles& elecs1 = apply<ParticleFinder>(event, "Electrons1").particlesByPt();
       const Particles& elecs2 = apply<ParticleFinder>(event, "Electrons2").particlesByPt();
       MSG_DEBUG("Numbers of electrons = " << elecs1.size() << " true; " << elecs2.size() << " reco");
       _h_ne_true->fill(elecs1.size(), weight);
       _h_ne_reco->fill(elecs2.size(), weight);
       if (!elecs1.empty()) {
         _h_e1pt_true->fill(elecs1.front().pT()/GeV, weight);
         _h_e1eta_true->fill(elecs1.front().eta(), weight);
       }
       if (!elecs2.empty()) {
         _h_e1pt_reco->fill(elecs2.front().pT()/GeV, weight);
         _h_e1eta_reco->fill(elecs2.front().eta(), weight);
       }
 
       const Particles& muons1 = apply<ParticleFinder>(event, "Muons1").particlesByPt();
       const Particles& muons2 = apply<ParticleFinder>(event, "Muons2").particlesByPt();
       MSG_DEBUG("Numbers of muons = " << muons1.size() << " true; " << muons2.size() << " reco");
       _h_nm_true->fill(muons1.size(), weight);
       _h_nm_reco->fill(muons2.size(), weight);
       if (!muons1.empty()) {
         _h_m1pt_true->fill(muons1.front().pT()/GeV, weight);
         _h_m1eta_true->fill(muons1.front().eta(), weight);
       }
       if (!muons2.empty()) {
         _h_m1pt_reco->fill(muons2.front().pT()/GeV, weight);
         _h_m1eta_reco->fill(muons2.front().eta(), weight);
       }
 
       const Particles& taus1 = apply<ParticleFinder>(event, "Taus1").particlesByPt();
       const Particles& taus2 = apply<ParticleFinder>(event, "Taus2").particlesByPt();
       MSG_DEBUG("Numbers of taus = " << taus1.size() << " true; " << taus2.size() << " reco");
       _h_nt_true->fill(taus1.size(), weight);
       _h_nt_reco->fill(taus2.size(), weight);
       if (!taus1.empty()) {
         _h_t1pt_true->fill(taus1.front().pT()/GeV, weight);
         _h_t1eta_true->fill(taus1.front().eta(), weight);
       }
       if (!taus2.empty()) {
         _h_t1pt_reco->fill(taus2.front().pT()/GeV, weight);
         _h_t1eta_reco->fill(taus2.front().eta(), weight);
       }
 
     }
 
 
     /// Normalise histograms etc., after the run
     void finalize() {
       normalize(_h_nj_true);
       normalize(_h_nj_reco);
       normalize(_h_j1pt_true, 1-_h_nj_true->bin(0).area());
       normalize(_h_j1pt_reco, 1-_h_nj_reco->bin(0).area());
       normalize(_h_j1eta_true, 1-_h_nj_true->bin(0).area());
       normalize(_h_j1eta_reco, 1-_h_nj_reco->bin(0).area());
 
       normalize(_h_ne_true);
       normalize(_h_ne_reco);
       normalize(_h_e1pt_true, 1-_h_ne_true->bin(0).area());
       normalize(_h_e1pt_reco, 1-_h_ne_reco->bin(0).area());
       normalize(_h_e1eta_true, 1-_h_ne_true->bin(0).area());
       normalize(_h_e1eta_reco, 1-_h_ne_reco->bin(0).area());
 
       normalize(_h_nm_true);
       normalize(_h_nm_reco);
       normalize(_h_m1pt_true, 1-_h_nm_true->bin(0).area());
       normalize(_h_m1pt_reco, 1-_h_nm_reco->bin(0).area());
       normalize(_h_m1eta_true, 1-_h_nm_true->bin(0).area());
       normalize(_h_m1eta_reco, 1-_h_nm_reco->bin(0).area());
 
       normalize(_h_nt_true);
       normalize(_h_nt_reco);
       normalize(_h_t1pt_true, 1-_h_nt_true->bin(0).area());
       normalize(_h_t1pt_reco, 1-_h_nt_reco->bin(0).area());
       normalize(_h_t1eta_true, 1-_h_nt_true->bin(0).area());
       normalize(_h_t1eta_reco, 1-_h_nt_reco->bin(0).area());
     }
 
     //@}
 
 
   private:
 
     /// @name Histograms
     //@{
     Histo1DPtr _h_met_true, _h_met_reco;
     Histo1DPtr _h_nj_true, _h_nj_reco, _h_ne_true, _h_ne_reco,  _h_nm_true, _h_nm_reco,  _h_nt_true, _h_nt_reco;
     Histo1DPtr _h_j1pt_true, _h_j1pt_reco, _h_e1pt_true, _h_e1pt_reco,  _h_m1pt_true, _h_m1pt_reco,  _h_t1pt_true, _h_t1pt_reco;
     Histo1DPtr _h_j1eta_true, _h_j1eta_reco, _h_e1eta_true, _h_e1eta_reco,  _h_m1eta_true, _h_m1eta_reco,  _h_t1eta_true, _h_t1eta_reco;
     //@}
 
   };
 
 
 
   // The hook for the plugin system
   DECLARE_RIVET_PLUGIN(EXAMPLE_SMEAR);
 
 
 }
diff --git a/data/anainfo/EXAMPLE_SMEAR.info b/analyses/pluginMC/EXAMPLE_SMEAR.info
rename from data/anainfo/EXAMPLE_SMEAR.info
rename to analyses/pluginMC/EXAMPLE_SMEAR.info
diff --git a/src/Analyses/MC_Centrality.cc b/analyses/pluginMC/MC_Centrality.cc
rename from src/Analyses/MC_Centrality.cc
rename to analyses/pluginMC/MC_Centrality.cc
diff --git a/data/anainfo/MC_Centrality.info b/analyses/pluginMC/MC_Centrality.info
rename from data/anainfo/MC_Centrality.info
rename to analyses/pluginMC/MC_Centrality.info
diff --git a/data/plotinfo/MC_Centrality.plot b/analyses/pluginMC/MC_Centrality.plot
rename from data/plotinfo/MC_Centrality.plot
rename to analyses/pluginMC/MC_Centrality.plot
diff --git a/data/refdata/MC_Centrality.yoda b/analyses/pluginMC/MC_Centrality.yoda
rename from data/refdata/MC_Centrality.yoda
rename to analyses/pluginMC/MC_Centrality.yoda
diff --git a/src/Analyses/MC_DIPHOTON.cc b/analyses/pluginMC/MC_DIPHOTON.cc
rename from src/Analyses/MC_DIPHOTON.cc
rename to analyses/pluginMC/MC_DIPHOTON.cc
diff --git a/data/anainfo/MC_DIPHOTON.info b/analyses/pluginMC/MC_DIPHOTON.info
rename from data/anainfo/MC_DIPHOTON.info
rename to analyses/pluginMC/MC_DIPHOTON.info
diff --git a/data/plotinfo/MC_DIPHOTON.plot b/analyses/pluginMC/MC_DIPHOTON.plot
rename from data/plotinfo/MC_DIPHOTON.plot
rename to analyses/pluginMC/MC_DIPHOTON.plot
diff --git a/src/Analyses/MC_ELECTRONS.cc b/analyses/pluginMC/MC_ELECTRONS.cc
rename from src/Analyses/MC_ELECTRONS.cc
rename to analyses/pluginMC/MC_ELECTRONS.cc
diff --git a/data/anainfo/MC_ELECTRONS.info b/analyses/pluginMC/MC_ELECTRONS.info
rename from data/anainfo/MC_ELECTRONS.info
rename to analyses/pluginMC/MC_ELECTRONS.info
diff --git a/data/plotinfo/MC_ELECTRONS.plot b/analyses/pluginMC/MC_ELECTRONS.plot
rename from data/plotinfo/MC_ELECTRONS.plot
rename to analyses/pluginMC/MC_ELECTRONS.plot
diff --git a/src/Analyses/MC_GENERIC.cc b/analyses/pluginMC/MC_GENERIC.cc
rename from src/Analyses/MC_GENERIC.cc
rename to analyses/pluginMC/MC_GENERIC.cc
diff --git a/data/anainfo/MC_GENERIC.info b/analyses/pluginMC/MC_GENERIC.info
rename from data/anainfo/MC_GENERIC.info
rename to analyses/pluginMC/MC_GENERIC.info
diff --git a/data/plotinfo/MC_GENERIC.plot b/analyses/pluginMC/MC_GENERIC.plot
rename from data/plotinfo/MC_GENERIC.plot
rename to analyses/pluginMC/MC_GENERIC.plot
diff --git a/src/Analyses/MC_HFJETS.cc b/analyses/pluginMC/MC_HFJETS.cc
rename from src/Analyses/MC_HFJETS.cc
rename to analyses/pluginMC/MC_HFJETS.cc
diff --git a/data/anainfo/MC_HFJETS.info b/analyses/pluginMC/MC_HFJETS.info
rename from data/anainfo/MC_HFJETS.info
rename to analyses/pluginMC/MC_HFJETS.info
diff --git a/data/plotinfo/MC_HFJETS.plot b/analyses/pluginMC/MC_HFJETS.plot
rename from data/plotinfo/MC_HFJETS.plot
rename to analyses/pluginMC/MC_HFJETS.plot
diff --git a/src/Analyses/MC_HHJETS.cc b/analyses/pluginMC/MC_HHJETS.cc
rename from src/Analyses/MC_HHJETS.cc
rename to analyses/pluginMC/MC_HHJETS.cc
diff --git a/data/anainfo/MC_HHJETS.info b/analyses/pluginMC/MC_HHJETS.info
rename from data/anainfo/MC_HHJETS.info
rename to analyses/pluginMC/MC_HHJETS.info
diff --git a/data/plotinfo/MC_HHJETS.plot b/analyses/pluginMC/MC_HHJETS.plot
rename from data/plotinfo/MC_HHJETS.plot
rename to analyses/pluginMC/MC_HHJETS.plot
diff --git a/src/Analyses/MC_HINC.cc b/analyses/pluginMC/MC_HINC.cc
rename from src/Analyses/MC_HINC.cc
rename to analyses/pluginMC/MC_HINC.cc
diff --git a/data/anainfo/MC_HINC.info b/analyses/pluginMC/MC_HINC.info
rename from data/anainfo/MC_HINC.info
rename to analyses/pluginMC/MC_HINC.info
diff --git a/data/plotinfo/MC_HINC.plot b/analyses/pluginMC/MC_HINC.plot
rename from data/plotinfo/MC_HINC.plot
rename to analyses/pluginMC/MC_HINC.plot
diff --git a/src/Analyses/MC_HJETS.cc b/analyses/pluginMC/MC_HJETS.cc
rename from src/Analyses/MC_HJETS.cc
rename to analyses/pluginMC/MC_HJETS.cc
diff --git a/data/anainfo/MC_HJETS.info b/analyses/pluginMC/MC_HJETS.info
rename from data/anainfo/MC_HJETS.info
rename to analyses/pluginMC/MC_HJETS.info
diff --git a/data/plotinfo/MC_HJETS.plot b/analyses/pluginMC/MC_HJETS.plot
rename from data/plotinfo/MC_HJETS.plot
rename to analyses/pluginMC/MC_HJETS.plot
diff --git a/src/Analyses/MC_HKTSPLITTINGS.cc b/analyses/pluginMC/MC_HKTSPLITTINGS.cc
rename from src/Analyses/MC_HKTSPLITTINGS.cc
rename to analyses/pluginMC/MC_HKTSPLITTINGS.cc
diff --git a/data/anainfo/MC_HKTSPLITTINGS.info b/analyses/pluginMC/MC_HKTSPLITTINGS.info
rename from data/anainfo/MC_HKTSPLITTINGS.info
rename to analyses/pluginMC/MC_HKTSPLITTINGS.info
diff --git a/data/plotinfo/MC_HKTSPLITTINGS.plot b/analyses/pluginMC/MC_HKTSPLITTINGS.plot
rename from data/plotinfo/MC_HKTSPLITTINGS.plot
rename to analyses/pluginMC/MC_HKTSPLITTINGS.plot
diff --git a/src/Analyses/MC_IDENTIFIED.cc b/analyses/pluginMC/MC_IDENTIFIED.cc
rename from src/Analyses/MC_IDENTIFIED.cc
rename to analyses/pluginMC/MC_IDENTIFIED.cc
diff --git a/data/anainfo/MC_IDENTIFIED.info b/analyses/pluginMC/MC_IDENTIFIED.info
rename from data/anainfo/MC_IDENTIFIED.info
rename to analyses/pluginMC/MC_IDENTIFIED.info
diff --git a/data/plotinfo/MC_IDENTIFIED.plot b/analyses/pluginMC/MC_IDENTIFIED.plot
rename from data/plotinfo/MC_IDENTIFIED.plot
rename to analyses/pluginMC/MC_IDENTIFIED.plot
diff --git a/src/Analyses/MC_JETS.cc b/analyses/pluginMC/MC_JETS.cc
rename from src/Analyses/MC_JETS.cc
rename to analyses/pluginMC/MC_JETS.cc
diff --git a/data/anainfo/MC_JETS.info b/analyses/pluginMC/MC_JETS.info
rename from data/anainfo/MC_JETS.info
rename to analyses/pluginMC/MC_JETS.info
diff --git a/data/plotinfo/MC_JETS.plot b/analyses/pluginMC/MC_JETS.plot
rename from data/plotinfo/MC_JETS.plot
rename to analyses/pluginMC/MC_JETS.plot
diff --git a/src/Analyses/MC_JETTAGS.cc b/analyses/pluginMC/MC_JETTAGS.cc
rename from src/Analyses/MC_JETTAGS.cc
rename to analyses/pluginMC/MC_JETTAGS.cc
diff --git a/data/anainfo/MC_JETTAGS.info b/analyses/pluginMC/MC_JETTAGS.info
rename from data/anainfo/MC_JETTAGS.info
rename to analyses/pluginMC/MC_JETTAGS.info
diff --git a/data/plotinfo/MC_JETTAGS.plot b/analyses/pluginMC/MC_JETTAGS.plot
rename from data/plotinfo/MC_JETTAGS.plot
rename to analyses/pluginMC/MC_JETTAGS.plot
diff --git a/src/Analyses/MC_KTSPLITTINGS.cc b/analyses/pluginMC/MC_KTSPLITTINGS.cc
rename from src/Analyses/MC_KTSPLITTINGS.cc
rename to analyses/pluginMC/MC_KTSPLITTINGS.cc
diff --git a/data/anainfo/MC_KTSPLITTINGS.info b/analyses/pluginMC/MC_KTSPLITTINGS.info
rename from data/anainfo/MC_KTSPLITTINGS.info
rename to analyses/pluginMC/MC_KTSPLITTINGS.info
diff --git a/data/plotinfo/MC_KTSPLITTINGS.plot b/analyses/pluginMC/MC_KTSPLITTINGS.plot
rename from data/plotinfo/MC_KTSPLITTINGS.plot
rename to analyses/pluginMC/MC_KTSPLITTINGS.plot
diff --git a/src/Analyses/MC_LEADJETUE.cc b/analyses/pluginMC/MC_LEADJETUE.cc
rename from src/Analyses/MC_LEADJETUE.cc
rename to analyses/pluginMC/MC_LEADJETUE.cc
diff --git a/data/anainfo/MC_LEADJETUE.info b/analyses/pluginMC/MC_LEADJETUE.info
rename from data/anainfo/MC_LEADJETUE.info
rename to analyses/pluginMC/MC_LEADJETUE.info
diff --git a/data/plotinfo/MC_LEADJETUE.plot b/analyses/pluginMC/MC_LEADJETUE.plot
rename from data/plotinfo/MC_LEADJETUE.plot
rename to analyses/pluginMC/MC_LEADJETUE.plot
diff --git a/src/Analyses/MC_MET.cc b/analyses/pluginMC/MC_MET.cc
rename from src/Analyses/MC_MET.cc
rename to analyses/pluginMC/MC_MET.cc
diff --git a/data/anainfo/MC_MET.info b/analyses/pluginMC/MC_MET.info
rename from data/anainfo/MC_MET.info
rename to analyses/pluginMC/MC_MET.info
diff --git a/data/plotinfo/MC_MET.plot b/analyses/pluginMC/MC_MET.plot
rename from data/plotinfo/MC_MET.plot
rename to analyses/pluginMC/MC_MET.plot
diff --git a/src/Analyses/MC_MUONS.cc b/analyses/pluginMC/MC_MUONS.cc
rename from src/Analyses/MC_MUONS.cc
rename to analyses/pluginMC/MC_MUONS.cc
diff --git a/data/anainfo/MC_MUONS.info b/analyses/pluginMC/MC_MUONS.info
rename from data/anainfo/MC_MUONS.info
rename to analyses/pluginMC/MC_MUONS.info
diff --git a/data/plotinfo/MC_MUONS.plot b/analyses/pluginMC/MC_MUONS.plot
rename from data/plotinfo/MC_MUONS.plot
rename to analyses/pluginMC/MC_MUONS.plot
diff --git a/src/Analyses/MC_PDFS.cc b/analyses/pluginMC/MC_PDFS.cc
rename from src/Analyses/MC_PDFS.cc
rename to analyses/pluginMC/MC_PDFS.cc
diff --git a/data/anainfo/MC_PDFS.info b/analyses/pluginMC/MC_PDFS.info
rename from data/anainfo/MC_PDFS.info
rename to analyses/pluginMC/MC_PDFS.info
diff --git a/data/plotinfo/MC_PDFS.plot b/analyses/pluginMC/MC_PDFS.plot
rename from data/plotinfo/MC_PDFS.plot
rename to analyses/pluginMC/MC_PDFS.plot
diff --git a/src/Analyses/MC_PHOTONINC.cc b/analyses/pluginMC/MC_PHOTONINC.cc
rename from src/Analyses/MC_PHOTONINC.cc
rename to analyses/pluginMC/MC_PHOTONINC.cc
diff --git a/data/anainfo/MC_PHOTONINC.info b/analyses/pluginMC/MC_PHOTONINC.info
rename from data/anainfo/MC_PHOTONINC.info
rename to analyses/pluginMC/MC_PHOTONINC.info
diff --git a/data/plotinfo/MC_PHOTONINC.plot b/analyses/pluginMC/MC_PHOTONINC.plot
rename from data/plotinfo/MC_PHOTONINC.plot
rename to analyses/pluginMC/MC_PHOTONINC.plot
diff --git a/src/Analyses/MC_PHOTONJETS.cc b/analyses/pluginMC/MC_PHOTONJETS.cc
rename from src/Analyses/MC_PHOTONJETS.cc
rename to analyses/pluginMC/MC_PHOTONJETS.cc
diff --git a/data/anainfo/MC_PHOTONJETS.info b/analyses/pluginMC/MC_PHOTONJETS.info
rename from data/anainfo/MC_PHOTONJETS.info
rename to analyses/pluginMC/MC_PHOTONJETS.info
diff --git a/data/plotinfo/MC_PHOTONJETS.plot b/analyses/pluginMC/MC_PHOTONJETS.plot
rename from data/plotinfo/MC_PHOTONJETS.plot
rename to analyses/pluginMC/MC_PHOTONJETS.plot
diff --git a/src/Analyses/MC_PHOTONKTSPLITTINGS.cc b/analyses/pluginMC/MC_PHOTONKTSPLITTINGS.cc
rename from src/Analyses/MC_PHOTONKTSPLITTINGS.cc
rename to analyses/pluginMC/MC_PHOTONKTSPLITTINGS.cc
diff --git a/data/anainfo/MC_PHOTONKTSPLITTINGS.info b/analyses/pluginMC/MC_PHOTONKTSPLITTINGS.info
rename from data/anainfo/MC_PHOTONKTSPLITTINGS.info
rename to analyses/pluginMC/MC_PHOTONKTSPLITTINGS.info
diff --git a/data/plotinfo/MC_PHOTONKTSPLITTINGS.plot b/analyses/pluginMC/MC_PHOTONKTSPLITTINGS.plot
rename from data/plotinfo/MC_PHOTONKTSPLITTINGS.plot
rename to analyses/pluginMC/MC_PHOTONKTSPLITTINGS.plot
diff --git a/src/Analyses/MC_PHOTONS.cc b/analyses/pluginMC/MC_PHOTONS.cc
rename from src/Analyses/MC_PHOTONS.cc
rename to analyses/pluginMC/MC_PHOTONS.cc
diff --git a/data/anainfo/MC_PHOTONS.info b/analyses/pluginMC/MC_PHOTONS.info
rename from data/anainfo/MC_PHOTONS.info
rename to analyses/pluginMC/MC_PHOTONS.info
diff --git a/data/plotinfo/MC_PHOTONS.plot b/analyses/pluginMC/MC_PHOTONS.plot
rename from data/plotinfo/MC_PHOTONS.plot
rename to analyses/pluginMC/MC_PHOTONS.plot
diff --git a/src/Analyses/MC_PRINTEVENT.cc b/analyses/pluginMC/MC_PRINTEVENT.cc
rename from src/Analyses/MC_PRINTEVENT.cc
rename to analyses/pluginMC/MC_PRINTEVENT.cc
diff --git a/data/anainfo/MC_PRINTEVENT.info b/analyses/pluginMC/MC_PRINTEVENT.info
rename from data/anainfo/MC_PRINTEVENT.info
rename to analyses/pluginMC/MC_PRINTEVENT.info
diff --git a/src/Analyses/MC_QCD_PARTONS.cc b/analyses/pluginMC/MC_QCD_PARTONS.cc
rename from src/Analyses/MC_QCD_PARTONS.cc
rename to analyses/pluginMC/MC_QCD_PARTONS.cc
diff --git a/data/anainfo/MC_QCD_PARTONS.info b/analyses/pluginMC/MC_QCD_PARTONS.info
rename from data/anainfo/MC_QCD_PARTONS.info
rename to analyses/pluginMC/MC_QCD_PARTONS.info
diff --git a/data/plotinfo/MC_QCD_PARTONS.plot b/analyses/pluginMC/MC_QCD_PARTONS.plot
rename from data/plotinfo/MC_QCD_PARTONS.plot
rename to analyses/pluginMC/MC_QCD_PARTONS.plot
diff --git a/src/Analyses/MC_SUSY.cc b/analyses/pluginMC/MC_SUSY.cc
rename from src/Analyses/MC_SUSY.cc
rename to analyses/pluginMC/MC_SUSY.cc
diff --git a/data/anainfo/MC_SUSY.info b/analyses/pluginMC/MC_SUSY.info
rename from data/anainfo/MC_SUSY.info
rename to analyses/pluginMC/MC_SUSY.info
diff --git a/data/plotinfo/MC_SUSY.plot b/analyses/pluginMC/MC_SUSY.plot
rename from data/plotinfo/MC_SUSY.plot
rename to analyses/pluginMC/MC_SUSY.plot
diff --git a/src/Analyses/MC_TAUS.cc b/analyses/pluginMC/MC_TAUS.cc
rename from src/Analyses/MC_TAUS.cc
rename to analyses/pluginMC/MC_TAUS.cc
--- a/src/Analyses/MC_TAUS.cc
+++ b/analyses/pluginMC/MC_TAUS.cc
@@ -1,44 +1,45 @@
 // -*- C++ -*-
 #include "Rivet/Analyses/MC_ParticleAnalysis.hh"
 #include "Rivet/Projections/TauFinder.hh"
 
 namespace Rivet {
 
 
   /// @brief MC validation analysis for taus
   class MC_TAUS : public MC_ParticleAnalysis {
   public:
 
+    /// Constructor
     MC_TAUS()
       : MC_ParticleAnalysis("MC_TAUS", 2, "tau")
     {    }
 
 
-  public:
-
+    /// Book projections and histograms
     void init() {
-      IdentifiedFinalState taus;
-      taus.acceptIdPair(PID::TAU);
+      TauFinder taus(TauFinder::ANY);
       declare(taus, "Taus");
 
       MC_ParticleAnalysis::init();
     }
 
 
+    /// Per-event analysis
     void analyze(const Event& event) {
       const Particles taus = apply<TauFinder>(event, "Taus").particlesByPt(0.5*GeV);
       MC_ParticleAnalysis::_analyze(event, taus);
     }
 
 
+    /// Normalisations etc.
     void finalize() {
       MC_ParticleAnalysis::finalize();
     }
 
   };
 
 
   // The hook for the plugin system
   DECLARE_RIVET_PLUGIN(MC_TAUS);
 
 }
diff --git a/data/anainfo/MC_TAUS.info b/analyses/pluginMC/MC_TAUS.info
rename from data/anainfo/MC_TAUS.info
rename to analyses/pluginMC/MC_TAUS.info
diff --git a/data/plotinfo/MC_TAUS.plot b/analyses/pluginMC/MC_TAUS.plot
rename from data/plotinfo/MC_TAUS.plot
rename to analyses/pluginMC/MC_TAUS.plot
diff --git a/src/Analyses/MC_TTBAR.cc b/analyses/pluginMC/MC_TTBAR.cc
rename from src/Analyses/MC_TTBAR.cc
rename to analyses/pluginMC/MC_TTBAR.cc
diff --git a/data/anainfo/MC_TTBAR.info b/analyses/pluginMC/MC_TTBAR.info
rename from data/anainfo/MC_TTBAR.info
rename to analyses/pluginMC/MC_TTBAR.info
diff --git a/data/plotinfo/MC_TTBAR.plot b/analyses/pluginMC/MC_TTBAR.plot
rename from data/plotinfo/MC_TTBAR.plot
rename to analyses/pluginMC/MC_TTBAR.plot
diff --git a/src/Analyses/MC_VH2BB.cc b/analyses/pluginMC/MC_VH2BB.cc
rename from src/Analyses/MC_VH2BB.cc
rename to analyses/pluginMC/MC_VH2BB.cc
diff --git a/data/anainfo/MC_VH2BB.info b/analyses/pluginMC/MC_VH2BB.info
rename from data/anainfo/MC_VH2BB.info
rename to analyses/pluginMC/MC_VH2BB.info
diff --git a/data/plotinfo/MC_VH2BB.plot b/analyses/pluginMC/MC_VH2BB.plot
rename from data/plotinfo/MC_VH2BB.plot
rename to analyses/pluginMC/MC_VH2BB.plot
diff --git a/src/Analyses/MC_WINC.cc b/analyses/pluginMC/MC_WINC.cc
rename from src/Analyses/MC_WINC.cc
rename to analyses/pluginMC/MC_WINC.cc
diff --git a/data/anainfo/MC_WINC.info b/analyses/pluginMC/MC_WINC.info
rename from data/anainfo/MC_WINC.info
rename to analyses/pluginMC/MC_WINC.info
diff --git a/data/plotinfo/MC_WINC.plot b/analyses/pluginMC/MC_WINC.plot
rename from data/plotinfo/MC_WINC.plot
rename to analyses/pluginMC/MC_WINC.plot
diff --git a/data/anainfo/MC_WINC_EL.info b/analyses/pluginMC/MC_WINC_EL.info
rename from data/anainfo/MC_WINC_EL.info
rename to analyses/pluginMC/MC_WINC_EL.info
diff --git a/data/plotinfo/MC_WINC_EL.plot b/analyses/pluginMC/MC_WINC_EL.plot
rename from data/plotinfo/MC_WINC_EL.plot
rename to analyses/pluginMC/MC_WINC_EL.plot
diff --git a/data/anainfo/MC_WINC_EL_BARE.info b/analyses/pluginMC/MC_WINC_EL_BARE.info
rename from data/anainfo/MC_WINC_EL_BARE.info
rename to analyses/pluginMC/MC_WINC_EL_BARE.info
diff --git a/data/plotinfo/MC_WINC_EL_BARE.plot b/analyses/pluginMC/MC_WINC_EL_BARE.plot
rename from data/plotinfo/MC_WINC_EL_BARE.plot
rename to analyses/pluginMC/MC_WINC_EL_BARE.plot
diff --git a/data/anainfo/MC_WINC_MU.info b/analyses/pluginMC/MC_WINC_MU.info
rename from data/anainfo/MC_WINC_MU.info
rename to analyses/pluginMC/MC_WINC_MU.info
diff --git a/data/plotinfo/MC_WINC_MU.plot b/analyses/pluginMC/MC_WINC_MU.plot
rename from data/plotinfo/MC_WINC_MU.plot
rename to analyses/pluginMC/MC_WINC_MU.plot
diff --git a/data/anainfo/MC_WINC_MU_BARE.info b/analyses/pluginMC/MC_WINC_MU_BARE.info
rename from data/anainfo/MC_WINC_MU_BARE.info
rename to analyses/pluginMC/MC_WINC_MU_BARE.info
diff --git a/data/plotinfo/MC_WINC_MU_BARE.plot b/analyses/pluginMC/MC_WINC_MU_BARE.plot
rename from data/plotinfo/MC_WINC_MU_BARE.plot
rename to analyses/pluginMC/MC_WINC_MU_BARE.plot
diff --git a/src/Analyses/MC_WJETS.cc b/analyses/pluginMC/MC_WJETS.cc
rename from src/Analyses/MC_WJETS.cc
rename to analyses/pluginMC/MC_WJETS.cc
diff --git a/data/anainfo/MC_WJETS.info b/analyses/pluginMC/MC_WJETS.info
rename from data/anainfo/MC_WJETS.info
rename to analyses/pluginMC/MC_WJETS.info
diff --git a/data/plotinfo/MC_WJETS.plot b/analyses/pluginMC/MC_WJETS.plot
rename from data/plotinfo/MC_WJETS.plot
rename to analyses/pluginMC/MC_WJETS.plot
diff --git a/data/anainfo/MC_WJETS_EL.info b/analyses/pluginMC/MC_WJETS_EL.info
rename from data/anainfo/MC_WJETS_EL.info
rename to analyses/pluginMC/MC_WJETS_EL.info
diff --git a/data/plotinfo/MC_WJETS_EL.plot b/analyses/pluginMC/MC_WJETS_EL.plot
rename from data/plotinfo/MC_WJETS_EL.plot
rename to analyses/pluginMC/MC_WJETS_EL.plot
diff --git a/data/anainfo/MC_WJETS_EL_BARE.info b/analyses/pluginMC/MC_WJETS_EL_BARE.info
rename from data/anainfo/MC_WJETS_EL_BARE.info
rename to analyses/pluginMC/MC_WJETS_EL_BARE.info
diff --git a/data/plotinfo/MC_WJETS_EL_BARE.plot b/analyses/pluginMC/MC_WJETS_EL_BARE.plot
rename from data/plotinfo/MC_WJETS_EL_BARE.plot
rename to analyses/pluginMC/MC_WJETS_EL_BARE.plot
diff --git a/data/anainfo/MC_WJETS_MU.info b/analyses/pluginMC/MC_WJETS_MU.info
rename from data/anainfo/MC_WJETS_MU.info
rename to analyses/pluginMC/MC_WJETS_MU.info
diff --git a/data/plotinfo/MC_WJETS_MU.plot b/analyses/pluginMC/MC_WJETS_MU.plot
rename from data/plotinfo/MC_WJETS_MU.plot
rename to analyses/pluginMC/MC_WJETS_MU.plot
diff --git a/data/anainfo/MC_WJETS_MU_BARE.info b/analyses/pluginMC/MC_WJETS_MU_BARE.info
rename from data/anainfo/MC_WJETS_MU_BARE.info
rename to analyses/pluginMC/MC_WJETS_MU_BARE.info
diff --git a/data/plotinfo/MC_WJETS_MU_BARE.plot b/analyses/pluginMC/MC_WJETS_MU_BARE.plot
rename from data/plotinfo/MC_WJETS_MU_BARE.plot
rename to analyses/pluginMC/MC_WJETS_MU_BARE.plot
diff --git a/src/Analyses/MC_WKTSPLITTINGS.cc b/analyses/pluginMC/MC_WKTSPLITTINGS.cc
rename from src/Analyses/MC_WKTSPLITTINGS.cc
rename to analyses/pluginMC/MC_WKTSPLITTINGS.cc
diff --git a/data/anainfo/MC_WKTSPLITTINGS.info b/analyses/pluginMC/MC_WKTSPLITTINGS.info
rename from data/anainfo/MC_WKTSPLITTINGS.info
rename to analyses/pluginMC/MC_WKTSPLITTINGS.info
diff --git a/data/plotinfo/MC_WKTSPLITTINGS.plot b/analyses/pluginMC/MC_WKTSPLITTINGS.plot
rename from data/plotinfo/MC_WKTSPLITTINGS.plot
rename to analyses/pluginMC/MC_WKTSPLITTINGS.plot
diff --git a/src/Analyses/MC_WPOL.cc b/analyses/pluginMC/MC_WPOL.cc
rename from src/Analyses/MC_WPOL.cc
rename to analyses/pluginMC/MC_WPOL.cc
diff --git a/data/anainfo/MC_WPOL.info b/analyses/pluginMC/MC_WPOL.info
rename from data/anainfo/MC_WPOL.info
rename to analyses/pluginMC/MC_WPOL.info
diff --git a/data/plotinfo/MC_WPOL.plot b/analyses/pluginMC/MC_WPOL.plot
rename from data/plotinfo/MC_WPOL.plot
rename to analyses/pluginMC/MC_WPOL.plot
diff --git a/src/Analyses/MC_WWINC.cc b/analyses/pluginMC/MC_WWINC.cc
rename from src/Analyses/MC_WWINC.cc
rename to analyses/pluginMC/MC_WWINC.cc
diff --git a/data/anainfo/MC_WWINC.info b/analyses/pluginMC/MC_WWINC.info
rename from data/anainfo/MC_WWINC.info
rename to analyses/pluginMC/MC_WWINC.info
diff --git a/data/plotinfo/MC_WWINC.plot b/analyses/pluginMC/MC_WWINC.plot
rename from data/plotinfo/MC_WWINC.plot
rename to analyses/pluginMC/MC_WWINC.plot
diff --git a/src/Analyses/MC_WWJETS.cc b/analyses/pluginMC/MC_WWJETS.cc
rename from src/Analyses/MC_WWJETS.cc
rename to analyses/pluginMC/MC_WWJETS.cc
diff --git a/data/anainfo/MC_WWJETS.info b/analyses/pluginMC/MC_WWJETS.info
rename from data/anainfo/MC_WWJETS.info
rename to analyses/pluginMC/MC_WWJETS.info
diff --git a/data/plotinfo/MC_WWJETS.plot b/analyses/pluginMC/MC_WWJETS.plot
rename from data/plotinfo/MC_WWJETS.plot
rename to analyses/pluginMC/MC_WWJETS.plot
diff --git a/src/Analyses/MC_WWKTSPLITTINGS.cc b/analyses/pluginMC/MC_WWKTSPLITTINGS.cc
rename from src/Analyses/MC_WWKTSPLITTINGS.cc
rename to analyses/pluginMC/MC_WWKTSPLITTINGS.cc
diff --git a/data/anainfo/MC_WWKTSPLITTINGS.info b/analyses/pluginMC/MC_WWKTSPLITTINGS.info
rename from data/anainfo/MC_WWKTSPLITTINGS.info
rename to analyses/pluginMC/MC_WWKTSPLITTINGS.info
diff --git a/data/plotinfo/MC_WWKTSPLITTINGS.plot b/analyses/pluginMC/MC_WWKTSPLITTINGS.plot
rename from data/plotinfo/MC_WWKTSPLITTINGS.plot
rename to analyses/pluginMC/MC_WWKTSPLITTINGS.plot
diff --git a/src/Analyses/MC_XS.cc b/analyses/pluginMC/MC_XS.cc
rename from src/Analyses/MC_XS.cc
rename to analyses/pluginMC/MC_XS.cc
diff --git a/data/anainfo/MC_XS.info b/analyses/pluginMC/MC_XS.info
rename from data/anainfo/MC_XS.info
rename to analyses/pluginMC/MC_XS.info
diff --git a/data/plotinfo/MC_XS.plot b/analyses/pluginMC/MC_XS.plot
rename from data/plotinfo/MC_XS.plot
rename to analyses/pluginMC/MC_XS.plot
diff --git a/src/Analyses/MC_ZINC.cc b/analyses/pluginMC/MC_ZINC.cc
rename from src/Analyses/MC_ZINC.cc
rename to analyses/pluginMC/MC_ZINC.cc
diff --git a/data/anainfo/MC_ZINC.info b/analyses/pluginMC/MC_ZINC.info
rename from data/anainfo/MC_ZINC.info
rename to analyses/pluginMC/MC_ZINC.info
diff --git a/data/plotinfo/MC_ZINC.plot b/analyses/pluginMC/MC_ZINC.plot
rename from data/plotinfo/MC_ZINC.plot
rename to analyses/pluginMC/MC_ZINC.plot
diff --git a/data/anainfo/MC_ZINC_EL.info b/analyses/pluginMC/MC_ZINC_EL.info
rename from data/anainfo/MC_ZINC_EL.info
rename to analyses/pluginMC/MC_ZINC_EL.info
diff --git a/data/plotinfo/MC_ZINC_EL.plot b/analyses/pluginMC/MC_ZINC_EL.plot
rename from data/plotinfo/MC_ZINC_EL.plot
rename to analyses/pluginMC/MC_ZINC_EL.plot
diff --git a/data/anainfo/MC_ZINC_EL_BARE.info b/analyses/pluginMC/MC_ZINC_EL_BARE.info
rename from data/anainfo/MC_ZINC_EL_BARE.info
rename to analyses/pluginMC/MC_ZINC_EL_BARE.info
diff --git a/data/plotinfo/MC_ZINC_EL_BARE.plot b/analyses/pluginMC/MC_ZINC_EL_BARE.plot
rename from data/plotinfo/MC_ZINC_EL_BARE.plot
rename to analyses/pluginMC/MC_ZINC_EL_BARE.plot
diff --git a/data/anainfo/MC_ZINC_MU.info b/analyses/pluginMC/MC_ZINC_MU.info
rename from data/anainfo/MC_ZINC_MU.info
rename to analyses/pluginMC/MC_ZINC_MU.info
diff --git a/data/plotinfo/MC_ZINC_MU.plot b/analyses/pluginMC/MC_ZINC_MU.plot
rename from data/plotinfo/MC_ZINC_MU.plot
rename to analyses/pluginMC/MC_ZINC_MU.plot
diff --git a/data/anainfo/MC_ZINC_MU_BARE.info b/analyses/pluginMC/MC_ZINC_MU_BARE.info
rename from data/anainfo/MC_ZINC_MU_BARE.info
rename to analyses/pluginMC/MC_ZINC_MU_BARE.info
diff --git a/data/plotinfo/MC_ZINC_MU_BARE.plot b/analyses/pluginMC/MC_ZINC_MU_BARE.plot
rename from data/plotinfo/MC_ZINC_MU_BARE.plot
rename to analyses/pluginMC/MC_ZINC_MU_BARE.plot
diff --git a/src/Analyses/MC_ZJETS.cc b/analyses/pluginMC/MC_ZJETS.cc
rename from src/Analyses/MC_ZJETS.cc
rename to analyses/pluginMC/MC_ZJETS.cc
diff --git a/data/anainfo/MC_ZJETS.info b/analyses/pluginMC/MC_ZJETS.info
rename from data/anainfo/MC_ZJETS.info
rename to analyses/pluginMC/MC_ZJETS.info
diff --git a/data/plotinfo/MC_ZJETS.plot b/analyses/pluginMC/MC_ZJETS.plot
rename from data/plotinfo/MC_ZJETS.plot
rename to analyses/pluginMC/MC_ZJETS.plot
diff --git a/data/anainfo/MC_ZJETS_EL.info b/analyses/pluginMC/MC_ZJETS_EL.info
rename from data/anainfo/MC_ZJETS_EL.info
rename to analyses/pluginMC/MC_ZJETS_EL.info
diff --git a/data/plotinfo/MC_ZJETS_EL.plot b/analyses/pluginMC/MC_ZJETS_EL.plot
rename from data/plotinfo/MC_ZJETS_EL.plot
rename to analyses/pluginMC/MC_ZJETS_EL.plot
diff --git a/data/anainfo/MC_ZJETS_EL_BARE.info b/analyses/pluginMC/MC_ZJETS_EL_BARE.info
rename from data/anainfo/MC_ZJETS_EL_BARE.info
rename to analyses/pluginMC/MC_ZJETS_EL_BARE.info
diff --git a/data/plotinfo/MC_ZJETS_EL_BARE.plot b/analyses/pluginMC/MC_ZJETS_EL_BARE.plot
rename from data/plotinfo/MC_ZJETS_EL_BARE.plot
rename to analyses/pluginMC/MC_ZJETS_EL_BARE.plot
diff --git a/data/anainfo/MC_ZJETS_MU.info b/analyses/pluginMC/MC_ZJETS_MU.info
rename from data/anainfo/MC_ZJETS_MU.info
rename to analyses/pluginMC/MC_ZJETS_MU.info
diff --git a/data/plotinfo/MC_ZJETS_MU.plot b/analyses/pluginMC/MC_ZJETS_MU.plot
rename from data/plotinfo/MC_ZJETS_MU.plot
rename to analyses/pluginMC/MC_ZJETS_MU.plot
diff --git a/data/anainfo/MC_ZJETS_MU_BARE.info b/analyses/pluginMC/MC_ZJETS_MU_BARE.info
rename from data/anainfo/MC_ZJETS_MU_BARE.info
rename to analyses/pluginMC/MC_ZJETS_MU_BARE.info
diff --git a/data/plotinfo/MC_ZJETS_MU_BARE.plot b/analyses/pluginMC/MC_ZJETS_MU_BARE.plot
rename from data/plotinfo/MC_ZJETS_MU_BARE.plot
rename to analyses/pluginMC/MC_ZJETS_MU_BARE.plot
diff --git a/src/Analyses/MC_ZKTSPLITTINGS.cc b/analyses/pluginMC/MC_ZKTSPLITTINGS.cc
rename from src/Analyses/MC_ZKTSPLITTINGS.cc
rename to analyses/pluginMC/MC_ZKTSPLITTINGS.cc
diff --git a/data/anainfo/MC_ZKTSPLITTINGS.info b/analyses/pluginMC/MC_ZKTSPLITTINGS.info
rename from data/anainfo/MC_ZKTSPLITTINGS.info
rename to analyses/pluginMC/MC_ZKTSPLITTINGS.info
diff --git a/data/plotinfo/MC_ZKTSPLITTINGS.plot b/analyses/pluginMC/MC_ZKTSPLITTINGS.plot
rename from data/plotinfo/MC_ZKTSPLITTINGS.plot
rename to analyses/pluginMC/MC_ZKTSPLITTINGS.plot
diff --git a/src/Analyses/MC_ZZINC.cc b/analyses/pluginMC/MC_ZZINC.cc
rename from src/Analyses/MC_ZZINC.cc
rename to analyses/pluginMC/MC_ZZINC.cc
diff --git a/data/anainfo/MC_ZZINC.info b/analyses/pluginMC/MC_ZZINC.info
rename from data/anainfo/MC_ZZINC.info
rename to analyses/pluginMC/MC_ZZINC.info
diff --git a/data/plotinfo/MC_ZZINC.plot b/analyses/pluginMC/MC_ZZINC.plot
rename from data/plotinfo/MC_ZZINC.plot
rename to analyses/pluginMC/MC_ZZINC.plot
diff --git a/src/Analyses/MC_ZZJETS.cc b/analyses/pluginMC/MC_ZZJETS.cc
rename from src/Analyses/MC_ZZJETS.cc
rename to analyses/pluginMC/MC_ZZJETS.cc
diff --git a/data/anainfo/MC_ZZJETS.info b/analyses/pluginMC/MC_ZZJETS.info
rename from data/anainfo/MC_ZZJETS.info
rename to analyses/pluginMC/MC_ZZJETS.info
diff --git a/data/plotinfo/MC_ZZJETS.plot b/analyses/pluginMC/MC_ZZJETS.plot
rename from data/plotinfo/MC_ZZJETS.plot
rename to analyses/pluginMC/MC_ZZJETS.plot
diff --git a/src/Analyses/MC_ZZKTSPLITTINGS.cc b/analyses/pluginMC/MC_ZZKTSPLITTINGS.cc
rename from src/Analyses/MC_ZZKTSPLITTINGS.cc
rename to analyses/pluginMC/MC_ZZKTSPLITTINGS.cc
diff --git a/data/anainfo/MC_ZZKTSPLITTINGS.info b/analyses/pluginMC/MC_ZZKTSPLITTINGS.info
rename from data/anainfo/MC_ZZKTSPLITTINGS.info
rename to analyses/pluginMC/MC_ZZKTSPLITTINGS.info
diff --git a/data/plotinfo/MC_ZZKTSPLITTINGS.plot b/analyses/pluginMC/MC_ZZKTSPLITTINGS.plot
rename from data/plotinfo/MC_ZZKTSPLITTINGS.plot
rename to analyses/pluginMC/MC_ZZKTSPLITTINGS.plot
diff --git a/analyses/pluginMisc/AMY_1990_I295160.cc b/analyses/pluginMisc/AMY_1990_I295160.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/AMY_1990_I295160.cc
@@ -0,0 +1,103 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+
+namespace Rivet {
+
+
+  /// @brief Charged multiplicity below Z pole based on ALEPH Z pole analysis
+  // @author Peter Richardson
+  class AMY_1990_I295160 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(AMY_1990_I295160);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+      const ChargedFinalState cfs;
+      declare(cfs, "CFS");
+      int offset = 0;
+      if(fuzzyEquals(sqrtS()/GeV,50.0)) {
+	offset = 1;
+      }
+      else if(fuzzyEquals(sqrtS()/GeV,52.0)) {
+	offset = 2;
+      }
+      else if(fuzzyEquals(sqrtS()/GeV,55.0)) {
+	offset = 3;
+      }
+      else if(fuzzyEquals(sqrtS()/GeV,56.0)) {
+	offset = 4;
+      }
+      else if(fuzzyEquals(sqrtS()/GeV,57.0)) {
+	offset = 5;
+      }
+      else if(fuzzyEquals(sqrtS()/GeV,60.0)) {
+	offset = 6;
+      }
+      else if(fuzzyEquals(sqrtS()/GeV,60.8)) {
+	offset = 7;
+      }
+      else if(fuzzyEquals(sqrtS()/GeV,61.4)) {
+	offset = 8;
+      }
+      else {
+        MSG_WARNING("CoM energy of events sqrt(s) = " << sqrtS()/GeV
+                    << " doesn't match any available analysis energy .");
+      }
+      _histChTotal = bookHisto1D(1, 1, offset);
+      _histTotal = bookProfile1D(2, 1, 1);
+      if(offset==5) {
+	_histChAver  = bookHisto1D(1, 1, 9);
+	_histAver    = bookProfile1D(2, 2, 1);
+      }
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+      const FinalState& cfs = apply<FinalState>(event, "CFS");
+      MSG_DEBUG("Total charged multiplicity = " << cfs.size());
+      _histChTotal->fill(cfs.size(), event.weight());
+      _histTotal->fill(sqrtS()/GeV,cfs.size(), event.weight());
+      if(_histAver) {
+	_histChAver->fill(cfs.size(), event.weight());
+	_histAver->fill(sqrtS()/GeV,cfs.size(), event.weight());
+      }
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+      
+      scale(_histChTotal, 200.0/sumOfWeights()); // bin width (2) and %age (100)
+      if(_histAver) 
+	scale(_histChAver, 200.0/sumOfWeights());
+    }
+
+    //@}
+
+
+  private:
+
+    /// @name Histograms
+    //@{
+    Histo1DPtr _histChTotal;
+    Histo1DPtr _histChAver;
+    Profile1DPtr _histTotal;
+    Profile1DPtr _histAver;
+    //@}
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(AMY_1990_I295160);
+
+
+}
diff --git a/analyses/pluginMisc/AMY_1990_I295160.info b/analyses/pluginMisc/AMY_1990_I295160.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/AMY_1990_I295160.info
@@ -0,0 +1,35 @@
+Name: AMY_1990_I295160
+Year: 1990
+Summary: Hadronic charged multiplicity measurement between 50 and 61.4 GeV
+Experiment: AMY
+Collider: TRISTAN
+InspireID: 295160
+Status: VALIDATED
+Authors:
+ - Peter Richardson <peter.richardson@durham.ac.uk>
+References:
+- Phys.Rev. D42 (1990) 737-747
+RunInfo: 
+  Hadronic e+ e- events generated below the Z pole
+NumEvents: 1000000
+Beams: [e+, e-]
+Energies: [50.0,52.0,55.0,56.0,57.0,60.0,60.8,61.4,57.0]
+PtCuts: [0]
+Description:
+  The charged particle multiplicity distribution of hadronic $e^+e^-$ events
+  as measured between 50 and 61.4 GeV using the AMY detector at
+  TRISTAN.
+BibKey: Zheng:1990iq
+BibTeX: '@article{Zheng:1990iq,
+      author         = "Zheng, H. W. and others",
+      title          = "{Charged hadron multiplicities in $e^+e^-$ annihilations
+                        at $\sqrt{s} = 50$ GeV - 61.4 GeV}",
+      collaboration  = "AMY",
+      journal        = "Phys. Rev.",
+      volume         = "D42",
+      year           = "1990",
+      pages          = "737-747",
+      doi            = "10.1103/PhysRevD.42.737",
+      reportNumber   = "KEK-Preprint-90-5, AMY-90-2, UR-1155, ER-13065-616",
+      SLACcitation   = "%%CITATION = PHRVA,D42,737;%%"
+}'
diff --git a/analyses/pluginMisc/AMY_1990_I295160.plot b/analyses/pluginMisc/AMY_1990_I295160.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/AMY_1990_I295160.plot
@@ -0,0 +1,79 @@
+# BEGIN PLOT /AMY_1990_I295160/d01-x01-y01
+Title=Total charged multiplicity $\sqrt{s}=50$ GeV
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ (\%)
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+# BEGIN PLOT /AMY_1990_I295160/d01-x01-y02
+Title=Total charged multiplicity $\sqrt{s}=52$ GeV
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ (\%)
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+# BEGIN PLOT /AMY_1990_I295160/d01-x01-y03
+Title=Total charged multiplicity $\sqrt{s}=55$ GeV
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ (\%)
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+# BEGIN PLOT /AMY_1990_I295160/d01-x01-y04
+Title=Total charged multiplicity $\sqrt{s}=56$ GeV
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ (\%)
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+# BEGIN PLOT /AMY_1990_I295160/d01-x01-y05
+Title=Total charged multiplicity $\sqrt{s}=57$ GeV
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ (\%)
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+# BEGIN PLOT /AMY_1990_I295160/d01-x01-y06
+Title=Total charged multiplicity $\sqrt{s}=60$ GeV
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ (\%)
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+# BEGIN PLOT /AMY_1990_I295160/d01-x01-y07
+Title=Total charged multiplicity $\sqrt{s}=60.8$ GeV
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ (\%)
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+# BEGIN PLOT /AMY_1990_I295160/d01-x01-y08
+Title=Total charged multiplicity $\sqrt{s}=61.4$ GeV
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ (\%)
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+# BEGIN PLOT /AMY_1990_I295160/d01-x01-y09
+Title=Total charged multiplicity average for $\sqrt{s}$ between 50 and 61.4 GeV
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ (\%)
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+
+# BEGIN PLOT /AMY_1990_I295160/d02-x02-y01
+Title=Mean charged multiplicity average for $\sqrt{s}$ between 50 and 61.4 GeV
+LogY=0
+LegendXPos=0.25
+LegendYPos=0.25
+# END PLOT
+
+# BEGIN PLOT /AMY_1990_I295160/d02-x01-y01
+Title=Mean charged multiplicity
+XLabel=$\sqrt{s}$
+YLabel=$\bar{n}_\text{ch}$
+LogY=0
+LegendXPos=0.25
+LegendYPos=0.25
+# END PLOT
diff --git a/analyses/pluginMisc/AMY_1990_I295160.yoda b/analyses/pluginMisc/AMY_1990_I295160.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/AMY_1990_I295160.yoda
@@ -0,0 +1,313 @@
+# BEGIN YODA_SCATTER2D /REF/AMY_1990_I295160/d01-x01-y01
+Path=/REF/AMY_1990_I295160/d01-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			0.0127	0.0097	0.0097
+4.0	1.0	1.0			0.076	0.039	0.039
+6.0	1.0	1.0			0.68	0.3190611226708764	0.3190611226708764
+8.0	1.0	1.0			3.35	1.270157470552372	1.270157470552372
+10.0	1.0	1.0			7.67	2.358495283014151	2.358495283014151
+12.0	1.0	1.0			13.9	4.00169963890345	4.00169963890345
+14.0	1.0	1.0			18.13	5.0091915515380325	5.0091915515380325
+16.0	1.0	1.0			16.92	4.731521953874885	4.731521953874885
+18.0	1.0	1.0			13.95	4.253810056878422	4.253810056878422
+20.0	1.0	1.0			9.98	3.614747570716384	3.614747570716384
+22.0	1.0	1.0			6.05	2.441352084399135	2.441352084399135
+24.0	1.0	1.0			4.34	2.0109947787102778	2.0109947787102778
+26.0	1.0	1.0			2.41	1.2649110640673518	1.2649110640673518
+28.0	1.0	1.0			1.37	0.6957010852370434	0.6957010852370434
+30.0	1.0	1.0			0.84	0.5131276644266999	0.5131276644266999
+32.0	1.0	1.0			0.18	0.14422205101855956	0.14422205101855956
+34.0	1.0	1.0			0.09	0.050990195135927854	0.050990195135927854
+36.0	1.0	1.0			0.04	0.07615773105863909	0.07615773105863909
+38.0	1.0	1.0			0.02	0.03605551275463989	0.03605551275463989
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/AMY_1990_I295160/d01-x01-y02
+Path=/REF/AMY_1990_I295160/d01-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			0.0125	0.0094	0.0094
+4.0	1.0	1.0			0.074	0.037	0.037
+6.0	1.0	1.0			0.638	0.273408119850161	0.273408119850161
+8.0	1.0	1.0			3.0	0.8421995013059553	0.8421995013059553
+10.0	1.0	1.0			7.39	1.1681181447096864	1.1681181447096864
+12.0	1.0	1.0			12.96	1.8106904760339353	1.8106904760339353
+14.0	1.0	1.0			16.12	2.1249235280357737	2.1249235280357737
+16.0	1.0	1.0			15.56	2.022992832414391	2.022992832414391
+18.0	1.0	1.0			14.15	1.9682479518597242	1.9682479518597242
+20.0	1.0	1.0			11.24	1.8850994668717087	1.8850994668717087
+22.0	1.0	1.0			7.14	1.3884163640637488	1.3884163640637488
+24.0	1.0	1.0			5.37	1.3151805959639156	1.3151805959639156
+26.0	1.0	1.0			3.03	0.986154146165801	0.986154146165801
+28.0	1.0	1.0			1.69	0.5470831746635972	0.5470831746635972
+30.0	1.0	1.0			1.19	0.6030754513325841	0.6030754513325841
+32.0	1.0	1.0			0.27	0.16278820596099705	0.16278820596099705
+34.0	1.0	1.0			0.11	0.06324555320336758	0.06324555320336758
+36.0	1.0	1.0			0.04	0.06324555320336758	0.06324555320336758
+38.0	1.0	1.0			0.03	0.06324555320336758	0.06324555320336758
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/AMY_1990_I295160/d01-x01-y03
+Path=/REF/AMY_1990_I295160/d01-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			0.0036	0.0038	0.0038
+4.0	1.0	1.0			0.076	0.035	0.035
+6.0	1.0	1.0			0.72	0.3178049716414141	0.3178049716414141
+8.0	1.0	1.0			2.68	0.8080222769206304	0.8080222769206304
+10.0	1.0	1.0			6.91	1.2879829191413992	1.2879829191413992
+12.0	1.0	1.0			12.4	1.9416487838947598	1.9416487838947598
+14.0	1.0	1.0			16.38	2.4201239637671454	2.4201239637671454
+16.0	1.0	1.0			15.8	2.35306183514161	2.35306183514161
+18.0	1.0	1.0			14.04	2.2272853431924706	2.2272853431924706
+20.0	1.0	1.0			12.03	2.1936499264923746	2.1936499264923746
+22.0	1.0	1.0			7.92	1.66337007307454	1.66337007307454
+24.0	1.0	1.0			5.03	1.1986659251017358	1.1986659251017358
+26.0	1.0	1.0			3.06	0.9433981132056605	0.9433981132056605
+28.0	1.0	1.0			1.41	0.45276925690687087	0.45276925690687087
+30.0	1.0	1.0			0.86	0.4103656905736638	0.4103656905736638
+32.0	1.0	1.0			0.29	0.19104973174542803	0.19104973174542803
+34.0	1.0	1.0			0.33	0.2745906043549196	0.2745906043549196
+36.0	1.0	1.0			0.04	0.07615773105863909	0.07615773105863909
+38.0	1.0	1.0			0.02	0.044721359549995794	0.044721359549995794
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/AMY_1990_I295160/d01-x01-y04
+Path=/REF/AMY_1990_I295160/d01-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			0.0058	0.0061	0.0061
+4.0	1.0	1.0			0.069	0.033	0.033
+6.0	1.0	1.0			0.66	0.2720294101747089	0.2720294101747089
+8.0	1.0	1.0			2.61	0.6985699678629192	0.6985699678629192
+10.0	1.0	1.0			6.67	0.9280086206496144	0.9280086206496144
+12.0	1.0	1.0			11.04	1.3018832512940628	1.3018832512940628
+14.0	1.0	1.0			15.17	1.5852129194527782	1.5852129194527782
+16.0	1.0	1.0			15.54	1.583824485225557	1.583824485225557
+18.0	1.0	1.0			14.08	1.5902201105507376	1.5902201105507376
+20.0	1.0	1.0			11.66	1.5709869509324383	1.5709869509324383
+22.0	1.0	1.0			8.55	1.3242356285797479	1.3242356285797479
+24.0	1.0	1.0			5.71	1.1013627921806692	1.1013627921806692
+26.0	1.0	1.0			3.76	0.9808159868191383	0.9808159868191383
+28.0	1.0	1.0			2.06	0.5720139858430037	0.5720139858430037
+30.0	1.0	1.0			1.38	0.570087712549569	0.570087712549569
+32.0	1.0	1.0			0.76	0.4049691346263318	0.4049691346263318
+34.0	1.0	1.0			0.14	0.06324555320336758	0.06324555320336758
+36.0	1.0	1.0			0.1	0.194164878389476	0.194164878389476
+38.0	1.0	1.0			0.01	0.022360679774997897	0.022360679774997897
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/AMY_1990_I295160/d01-x01-y05
+Path=/REF/AMY_1990_I295160/d01-x01-y05
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			0.0025	0.0026	0.0026
+4.0	1.0	1.0			0.065	0.031	0.031
+6.0	1.0	1.0			0.72	0.3101612483854164	0.3101612483854164
+8.0	1.0	1.0			2.58	0.7306161783043132	0.7306161783043132
+10.0	1.0	1.0			6.11	0.957183368012629	0.957183368012629
+12.0	1.0	1.0			10.15	1.4524806367039804	1.4524806367039804
+14.0	1.0	1.0			14.33	1.8580904176062047	1.8580904176062047
+16.0	1.0	1.0			15.04	1.933132173442882	1.933132173442882
+18.0	1.0	1.0			14.82	1.9691876497682996	1.9691876497682996
+20.0	1.0	1.0			12.75	1.9859506539690255	1.9859506539690255
+22.0	1.0	1.0			9.09	1.649151296879701	1.649151296879701
+24.0	1.0	1.0			5.95	1.3595955280891445	1.3595955280891445
+26.0	1.0	1.0			4.09	1.209297316626478	1.209297316626478
+28.0	1.0	1.0			1.88	0.6140032573203501	0.6140032573203501
+30.0	1.0	1.0			1.33	0.6670832032063166	0.6670832032063166
+32.0	1.0	1.0			0.72	0.4263801121065569	0.4263801121065569
+34.0	1.0	1.0			0.25	0.13601470508735444	0.13601470508735444
+36.0	1.0	1.0			0.05	0.1044030650891055	0.1044030650891055
+38.0	1.0	1.0			0.08	0.14560219778561037	0.14560219778561037
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/AMY_1990_I295160/d01-x01-y06
+Path=/REF/AMY_1990_I295160/d01-x01-y06
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			0.0082	0.0085	0.0085
+4.0	1.0	1.0			0.071	0.036	0.036
+6.0	1.0	1.0			0.49	0.2193171219946131	0.2193171219946131
+8.0	1.0	1.0			2.0	0.5964059020499378	0.5964059020499378
+10.0	1.0	1.0			5.77	1.0023971268913334	1.0023971268913334
+12.0	1.0	1.0			11.01	1.6824387061643584	1.6824387061643584
+14.0	1.0	1.0			13.24	1.9298186443290468	1.9298186443290468
+16.0	1.0	1.0			15.27	2.2127358631341427	2.2127358631341427
+18.0	1.0	1.0			13.89	2.1168372634664196	2.1168372634664196
+20.0	1.0	1.0			11.33	1.974082065163452	1.974082065163452
+22.0	1.0	1.0			10.0	1.979747458642137	1.979747458642137
+24.0	1.0	1.0			6.48	1.552063143045411	1.552063143045411
+26.0	1.0	1.0			4.91	1.4644111444536332	1.4644111444536332
+28.0	1.0	1.0			2.53	0.9347192091746055	0.9347192091746055
+30.0	1.0	1.0			1.2	0.5658621740318043	0.5658621740318043
+32.0	1.0	1.0			0.93	0.6378087487640789	0.6378087487640789
+34.0	1.0	1.0			0.46	0.24041630560342617	0.24041630560342617
+36.0	1.0	1.0			0.26	0.5366563145999496	0.5366563145999496
+38.0	1.0	1.0			0.13	0.25079872407968906	0.25079872407968906
+40.0	1.0	1.0			0.01	0.022360679774997897	0.022360679774997897
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/AMY_1990_I295160/d01-x01-y07
+Path=/REF/AMY_1990_I295160/d01-x01-y07
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			0.0024	0.0025	0.0025
+4.0	1.0	1.0			0.041	0.018	0.018
+6.0	1.0	1.0			0.51	0.22847319317591724	0.22847319317591724
+8.0	1.0	1.0			2.06	0.604648658313239	0.604648658313239
+10.0	1.0	1.0			5.76	1.0465658125507444	1.0465658125507444
+12.0	1.0	1.0			10.36	1.6728717822953438	1.6728717822953438
+14.0	1.0	1.0			14.77	2.155388596054085	2.155388596054085
+16.0	1.0	1.0			16.3	2.3830232898568156	2.3830232898568156
+18.0	1.0	1.0			13.88	2.1467417171145673	2.1467417171145673
+20.0	1.0	1.0			11.81	1.9894974239742056	1.9894974239742056
+22.0	1.0	1.0			8.5	1.729768770674277	1.729768770674277
+24.0	1.0	1.0			6.68	1.623884232326923	1.623884232326923
+26.0	1.0	1.0			4.21	1.3634148304899723	1.3634148304899723
+28.0	1.0	1.0			2.37	0.8013114251026251	0.8013114251026251
+30.0	1.0	1.0			1.24	0.5728001396647875	0.5728001396647875
+32.0	1.0	1.0			0.76	0.4482186966202994	0.4482186966202994
+34.0	1.0	1.0			0.46	0.21189620100417092	0.21189620100417092
+36.0	1.0	1.0			0.24	0.4617358552246078	0.4617358552246078
+38.0	1.0	1.0			0.01	0.01414213562373095	0.01414213562373095
+40.0	1.0	1.0			0.05	0.09219544457292887	0.09219544457292887
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/AMY_1990_I295160/d01-x01-y08
+Path=/REF/AMY_1990_I295160/d01-x01-y08
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			0.0023	0.0025	0.0025
+4.0	1.0	1.0			0.04	0.018	0.018
+6.0	1.0	1.0			0.49	0.2154065922853802	0.2154065922853802
+8.0	1.0	1.0			1.94	0.552268050859363	0.552268050859363
+10.0	1.0	1.0			5.84	0.9811218069128828	0.9811218069128828
+12.0	1.0	1.0			10.98	1.6070469812671937	1.6070469812671937
+14.0	1.0	1.0			15.42	2.042473990042468	2.042473990042468
+16.0	1.0	1.0			16.29	2.1733154395991394	2.1733154395991394
+18.0	1.0	1.0			13.39	1.9175505208468433	1.9175505208468433
+20.0	1.0	1.0			11.3	1.7835358140502813	1.7835358140502813
+22.0	1.0	1.0			8.11	1.5438264151127872	1.5438264151127872
+24.0	1.0	1.0			6.42	1.484755872189095	1.484755872189095
+26.0	1.0	1.0			4.26	1.3008458786497346	1.3008458786497346
+28.0	1.0	1.0			2.53	0.8372574275573791	0.8372574275573791
+30.0	1.0	1.0			1.43	0.6646803743153546	0.6646803743153546
+32.0	1.0	1.0			0.81	0.4640043103248072	0.4640043103248072
+34.0	1.0	1.0			0.42	0.17088007490635063	0.17088007490635063
+36.0	1.0	1.0			0.2	0.3736308338453881	0.3736308338453881
+38.0	1.0	1.0			0.02	0.03162277660168379	0.03162277660168379
+40.0	1.0	1.0			0.1	0.18681541692269404	0.18681541692269404
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/AMY_1990_I295160/d01-x01-y09
+Path=/REF/AMY_1990_I295160/d01-x01-y09
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			0.0032	0.0014	0.0014
+4.0	1.0	1.0			0.05	0.02	0.02
+6.0	1.0	1.0			0.59	0.24186773244895649	0.24186773244895649
+8.0	1.0	1.0			2.35	0.5943904440685432	0.5943904440685432
+10.0	1.0	1.0			6.33	0.6243396511515187	0.6243396511515187
+12.0	1.0	1.0			11.19	0.7919595949289333	0.7919595949289333
+14.0	1.0	1.0			15.03	0.8490583018850943	0.8490583018850943
+16.0	1.0	1.0			15.66	0.7679192665899196	0.7679192665899196
+18.0	1.0	1.0			14.04	0.7518643494673756	0.7518643494673756
+20.0	1.0	1.0			11.64	0.8786353054595518	0.8786353054595518
+22.0	1.0	1.0			8.23	0.7636753236814714	0.7636753236814714
+24.0	1.0	1.0			5.75	0.744043009509531	0.744043009509531
+26.0	1.0	1.0			3.61	0.6896375859826667	0.6896375859826667
+28.0	1.0	1.0			1.84	0.35510561809129404	0.35510561809129404
+30.0	1.0	1.0			1.15	0.4049691346263318	0.4049691346263318
+32.0	1.0	1.0			0.37	0.18027756377319948	0.18027756377319948
+34.0	1.0	1.0			0.14	0.03605551275463989	0.03605551275463989
+36.0	1.0	1.0			0.05	0.09055385138137416	0.09055385138137416
+38.0	1.0	1.0			0.01	0.09055385138137416	0.09055385138137416
+40.0	1.0	1.0			0.01	0.09055385138137416	0.09055385138137416
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/AMY_1990_I295160/d02-x01-y01
+Path=/REF/AMY_1990_I295160/d02-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+50.0	1.0	1.0			16.24	0.41	0.41
+52.0	1.0	1.5			16.74	0.19	0.19
+55.0	1.5	0.5			16.82	0.22	0.22
+56.0	0.5	0.5			17.27	0.16	0.16
+57.0	0.5	1.5			17.49	0.19	0.19
+60.0	1.5	0.4			17.85	0.23	0.23
+60.8	0.4	0.3			17.66	0.23	0.23
+61.4	0.3	0.3			17.61	0.21	0.21
+# END YODA_SCATTER2D 
+
+# BEGIN YODA_SCATTER2D /REF/AMY_1990_I295160/d02-x02-y01
+Path=/REF/AMY_1990_I295160/d02-x02-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+57.0	7.0	4.4			17.19	0.4850773134253961	0.4850773134253961
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/AMY_1990_I295160/d02-x01-y02
+Path=/REF/AMY_1990_I295160/d02-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+50.0	1.0	1.0			4.78	0.28	0.28
+52.0	1.0	1.5			5.0	0.17	0.17
+55.0	1.5	0.5			4.95	0.17	0.17
+56.0	0.5	0.5			5.2	0.13	0.13
+57.0	0.5	1.5			5.19	0.17	0.17
+60.0	1.5	0.4			5.43	0.21	0.21
+60.8	0.4	0.3			5.29	0.18	0.18
+61.4	0.3	0.3			5.35	0.17	0.17
+57.0	7.0	4.4			5.03	0.2570992026436488	0.2570992026436488
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/AMY_1990_I295160/d02-x01-y03
+Path=/REF/AMY_1990_I295160/d02-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+50.0	1.0	1.0			6.66	2.71	2.71
+52.0	1.0	1.5			8.32	1.66	1.66
+55.0	1.5	0.5			7.66	1.73	1.73
+56.0	0.5	0.5			9.8	1.37	1.37
+57.0	0.5	1.5			9.54	1.73	1.73
+60.0	1.5	0.4			11.63	2.26	2.26
+60.8	0.4	0.3			10.41	1.93	1.93
+61.4	0.3	0.3			11.09	1.87	1.87
+57.0	7.0	4.4			8.11	0.59	0.59
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/AMY_1990_I295160/d02-x01-y04
+Path=/REF/AMY_1990_I295160/d02-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+50.0	1.0	1.0			3.4	0.22	0.22
+52.0	1.0	1.5			3.35	0.12	0.12
+55.0	1.5	0.5			3.4	0.13	0.13
+56.0	0.5	0.5			3.32	0.08	0.08
+57.0	0.5	1.5			3.37	0.11	0.11
+60.0	1.5	0.4			3.29	0.13	0.13
+60.8	0.4	0.3			3.34	0.12	0.12
+61.4	0.3	0.3			3.29	0.11	0.11
+57.0	7.0	4.4			3.42	0.04	0.04
+# END YODA_SCATTER2D 
+
+
diff --git a/src/Analyses/ARGUS_1993_S2653028.cc b/analyses/pluginMisc/ARGUS_1993_S2653028.cc
rename from src/Analyses/ARGUS_1993_S2653028.cc
rename to analyses/pluginMisc/ARGUS_1993_S2653028.cc
diff --git a/data/anainfo/ARGUS_1993_S2653028.info b/analyses/pluginMisc/ARGUS_1993_S2653028.info
rename from data/anainfo/ARGUS_1993_S2653028.info
rename to analyses/pluginMisc/ARGUS_1993_S2653028.info
diff --git a/data/plotinfo/ARGUS_1993_S2653028.plot b/analyses/pluginMisc/ARGUS_1993_S2653028.plot
rename from data/plotinfo/ARGUS_1993_S2653028.plot
rename to analyses/pluginMisc/ARGUS_1993_S2653028.plot
diff --git a/data/refdata/ARGUS_1993_S2653028.yoda b/analyses/pluginMisc/ARGUS_1993_S2653028.yoda
rename from data/refdata/ARGUS_1993_S2653028.yoda
rename to analyses/pluginMisc/ARGUS_1993_S2653028.yoda
diff --git a/src/Analyses/ARGUS_1993_S2669951.cc b/analyses/pluginMisc/ARGUS_1993_S2669951.cc
rename from src/Analyses/ARGUS_1993_S2669951.cc
rename to analyses/pluginMisc/ARGUS_1993_S2669951.cc
diff --git a/data/anainfo/ARGUS_1993_S2669951.info b/analyses/pluginMisc/ARGUS_1993_S2669951.info
rename from data/anainfo/ARGUS_1993_S2669951.info
rename to analyses/pluginMisc/ARGUS_1993_S2669951.info
diff --git a/data/plotinfo/ARGUS_1993_S2669951.plot b/analyses/pluginMisc/ARGUS_1993_S2669951.plot
rename from data/plotinfo/ARGUS_1993_S2669951.plot
rename to analyses/pluginMisc/ARGUS_1993_S2669951.plot
diff --git a/data/refdata/ARGUS_1993_S2669951.yoda b/analyses/pluginMisc/ARGUS_1993_S2669951.yoda
rename from data/refdata/ARGUS_1993_S2669951.yoda
rename to analyses/pluginMisc/ARGUS_1993_S2669951.yoda
diff --git a/src/Analyses/ARGUS_1993_S2789213.cc b/analyses/pluginMisc/ARGUS_1993_S2789213.cc
rename from src/Analyses/ARGUS_1993_S2789213.cc
rename to analyses/pluginMisc/ARGUS_1993_S2789213.cc
diff --git a/data/anainfo/ARGUS_1993_S2789213.info b/analyses/pluginMisc/ARGUS_1993_S2789213.info
rename from data/anainfo/ARGUS_1993_S2789213.info
rename to analyses/pluginMisc/ARGUS_1993_S2789213.info
diff --git a/data/plotinfo/ARGUS_1993_S2789213.plot b/analyses/pluginMisc/ARGUS_1993_S2789213.plot
rename from data/plotinfo/ARGUS_1993_S2789213.plot
rename to analyses/pluginMisc/ARGUS_1993_S2789213.plot
diff --git a/data/refdata/ARGUS_1993_S2789213.yoda b/analyses/pluginMisc/ARGUS_1993_S2789213.yoda
rename from data/refdata/ARGUS_1993_S2789213.yoda
rename to analyses/pluginMisc/ARGUS_1993_S2789213.yoda
diff --git a/src/Analyses/BABAR_2003_I593379.cc b/analyses/pluginMisc/BABAR_2003_I593379.cc
rename from src/Analyses/BABAR_2003_I593379.cc
rename to analyses/pluginMisc/BABAR_2003_I593379.cc
diff --git a/data/anainfo/BABAR_2003_I593379.info b/analyses/pluginMisc/BABAR_2003_I593379.info
rename from data/anainfo/BABAR_2003_I593379.info
rename to analyses/pluginMisc/BABAR_2003_I593379.info
diff --git a/data/plotinfo/BABAR_2003_I593379.plot b/analyses/pluginMisc/BABAR_2003_I593379.plot
rename from data/plotinfo/BABAR_2003_I593379.plot
rename to analyses/pluginMisc/BABAR_2003_I593379.plot
diff --git a/data/refdata/BABAR_2003_I593379.yoda b/analyses/pluginMisc/BABAR_2003_I593379.yoda
rename from data/refdata/BABAR_2003_I593379.yoda
rename to analyses/pluginMisc/BABAR_2003_I593379.yoda
diff --git a/src/Analyses/BABAR_2005_S6181155.cc b/analyses/pluginMisc/BABAR_2005_S6181155.cc
rename from src/Analyses/BABAR_2005_S6181155.cc
rename to analyses/pluginMisc/BABAR_2005_S6181155.cc
diff --git a/data/anainfo/BABAR_2005_S6181155.info b/analyses/pluginMisc/BABAR_2005_S6181155.info
rename from data/anainfo/BABAR_2005_S6181155.info
rename to analyses/pluginMisc/BABAR_2005_S6181155.info
diff --git a/data/plotinfo/BABAR_2005_S6181155.plot b/analyses/pluginMisc/BABAR_2005_S6181155.plot
rename from data/plotinfo/BABAR_2005_S6181155.plot
rename to analyses/pluginMisc/BABAR_2005_S6181155.plot
diff --git a/data/refdata/BABAR_2005_S6181155.yoda b/analyses/pluginMisc/BABAR_2005_S6181155.yoda
rename from data/refdata/BABAR_2005_S6181155.yoda
rename to analyses/pluginMisc/BABAR_2005_S6181155.yoda
diff --git a/src/Analyses/BABAR_2007_S6895344.cc b/analyses/pluginMisc/BABAR_2007_S6895344.cc
rename from src/Analyses/BABAR_2007_S6895344.cc
rename to analyses/pluginMisc/BABAR_2007_S6895344.cc
diff --git a/data/anainfo/BABAR_2007_S6895344.info b/analyses/pluginMisc/BABAR_2007_S6895344.info
rename from data/anainfo/BABAR_2007_S6895344.info
rename to analyses/pluginMisc/BABAR_2007_S6895344.info
diff --git a/data/plotinfo/BABAR_2007_S6895344.plot b/analyses/pluginMisc/BABAR_2007_S6895344.plot
rename from data/plotinfo/BABAR_2007_S6895344.plot
rename to analyses/pluginMisc/BABAR_2007_S6895344.plot
diff --git a/data/refdata/BABAR_2007_S6895344.yoda b/analyses/pluginMisc/BABAR_2007_S6895344.yoda
rename from data/refdata/BABAR_2007_S6895344.yoda
rename to analyses/pluginMisc/BABAR_2007_S6895344.yoda
diff --git a/src/Analyses/BABAR_2007_S7266081.cc b/analyses/pluginMisc/BABAR_2007_S7266081.cc
rename from src/Analyses/BABAR_2007_S7266081.cc
rename to analyses/pluginMisc/BABAR_2007_S7266081.cc
diff --git a/data/anainfo/BABAR_2007_S7266081.info b/analyses/pluginMisc/BABAR_2007_S7266081.info
rename from data/anainfo/BABAR_2007_S7266081.info
rename to analyses/pluginMisc/BABAR_2007_S7266081.info
diff --git a/data/plotinfo/BABAR_2007_S7266081.plot b/analyses/pluginMisc/BABAR_2007_S7266081.plot
rename from data/plotinfo/BABAR_2007_S7266081.plot
rename to analyses/pluginMisc/BABAR_2007_S7266081.plot
diff --git a/data/refdata/BABAR_2007_S7266081.yoda b/analyses/pluginMisc/BABAR_2007_S7266081.yoda
rename from data/refdata/BABAR_2007_S7266081.yoda
rename to analyses/pluginMisc/BABAR_2007_S7266081.yoda
diff --git a/src/Analyses/BABAR_2013_I1116411.cc b/analyses/pluginMisc/BABAR_2013_I1116411.cc
rename from src/Analyses/BABAR_2013_I1116411.cc
rename to analyses/pluginMisc/BABAR_2013_I1116411.cc
diff --git a/data/anainfo/BABAR_2013_I1116411.info b/analyses/pluginMisc/BABAR_2013_I1116411.info
rename from data/anainfo/BABAR_2013_I1116411.info
rename to analyses/pluginMisc/BABAR_2013_I1116411.info
diff --git a/data/plotinfo/BABAR_2013_I1116411.plot b/analyses/pluginMisc/BABAR_2013_I1116411.plot
rename from data/plotinfo/BABAR_2013_I1116411.plot
rename to analyses/pluginMisc/BABAR_2013_I1116411.plot
diff --git a/data/refdata/BABAR_2013_I1116411.yoda b/analyses/pluginMisc/BABAR_2013_I1116411.yoda
rename from data/refdata/BABAR_2013_I1116411.yoda
rename to analyses/pluginMisc/BABAR_2013_I1116411.yoda
diff --git a/src/Analyses/BABAR_2013_I1238276.cc b/analyses/pluginMisc/BABAR_2013_I1238276.cc
rename from src/Analyses/BABAR_2013_I1238276.cc
rename to analyses/pluginMisc/BABAR_2013_I1238276.cc
diff --git a/data/anainfo/BABAR_2013_I1238276.info b/analyses/pluginMisc/BABAR_2013_I1238276.info
rename from data/anainfo/BABAR_2013_I1238276.info
rename to analyses/pluginMisc/BABAR_2013_I1238276.info
diff --git a/data/plotinfo/BABAR_2013_I1238276.plot b/analyses/pluginMisc/BABAR_2013_I1238276.plot
rename from data/plotinfo/BABAR_2013_I1238276.plot
rename to analyses/pluginMisc/BABAR_2013_I1238276.plot
diff --git a/data/refdata/BABAR_2013_I1238276.yoda b/analyses/pluginMisc/BABAR_2013_I1238276.yoda
rename from data/refdata/BABAR_2013_I1238276.yoda
rename to analyses/pluginMisc/BABAR_2013_I1238276.yoda
diff --git a/src/Analyses/BABAR_2015_I1334693.cc b/analyses/pluginMisc/BABAR_2015_I1334693.cc
rename from src/Analyses/BABAR_2015_I1334693.cc
rename to analyses/pluginMisc/BABAR_2015_I1334693.cc
diff --git a/data/anainfo/BABAR_2015_I1334693.info b/analyses/pluginMisc/BABAR_2015_I1334693.info
rename from data/anainfo/BABAR_2015_I1334693.info
rename to analyses/pluginMisc/BABAR_2015_I1334693.info
diff --git a/data/plotinfo/BABAR_2015_I1334693.plot b/analyses/pluginMisc/BABAR_2015_I1334693.plot
rename from data/plotinfo/BABAR_2015_I1334693.plot
rename to analyses/pluginMisc/BABAR_2015_I1334693.plot
diff --git a/data/refdata/BABAR_2015_I1334693.yoda b/analyses/pluginMisc/BABAR_2015_I1334693.yoda
rename from data/refdata/BABAR_2015_I1334693.yoda
rename to analyses/pluginMisc/BABAR_2015_I1334693.yoda
diff --git a/src/Analyses/BELLE_2001_S4598261.cc b/analyses/pluginMisc/BELLE_2001_S4598261.cc
rename from src/Analyses/BELLE_2001_S4598261.cc
rename to analyses/pluginMisc/BELLE_2001_S4598261.cc
diff --git a/data/anainfo/BELLE_2001_S4598261.info b/analyses/pluginMisc/BELLE_2001_S4598261.info
rename from data/anainfo/BELLE_2001_S4598261.info
rename to analyses/pluginMisc/BELLE_2001_S4598261.info
diff --git a/data/plotinfo/BELLE_2001_S4598261.plot b/analyses/pluginMisc/BELLE_2001_S4598261.plot
rename from data/plotinfo/BELLE_2001_S4598261.plot
rename to analyses/pluginMisc/BELLE_2001_S4598261.plot
diff --git a/data/refdata/BELLE_2001_S4598261.yoda b/analyses/pluginMisc/BELLE_2001_S4598261.yoda
rename from data/refdata/BELLE_2001_S4598261.yoda
rename to analyses/pluginMisc/BELLE_2001_S4598261.yoda
diff --git a/src/Analyses/BELLE_2008_I786560.cc b/analyses/pluginMisc/BELLE_2008_I786560.cc
rename from src/Analyses/BELLE_2008_I786560.cc
rename to analyses/pluginMisc/BELLE_2008_I786560.cc
diff --git a/data/anainfo/BELLE_2008_I786560.info b/analyses/pluginMisc/BELLE_2008_I786560.info
rename from data/anainfo/BELLE_2008_I786560.info
rename to analyses/pluginMisc/BELLE_2008_I786560.info
diff --git a/data/plotinfo/BELLE_2008_I786560.plot b/analyses/pluginMisc/BELLE_2008_I786560.plot
rename from data/plotinfo/BELLE_2008_I786560.plot
rename to analyses/pluginMisc/BELLE_2008_I786560.plot
diff --git a/data/refdata/BELLE_2008_I786560.yoda b/analyses/pluginMisc/BELLE_2008_I786560.yoda
rename from data/refdata/BELLE_2008_I786560.yoda
rename to analyses/pluginMisc/BELLE_2008_I786560.yoda
diff --git a/src/Analyses/BELLE_2011_I878990.cc b/analyses/pluginMisc/BELLE_2011_I878990.cc
rename from src/Analyses/BELLE_2011_I878990.cc
rename to analyses/pluginMisc/BELLE_2011_I878990.cc
diff --git a/data/anainfo/BELLE_2011_I878990.info b/analyses/pluginMisc/BELLE_2011_I878990.info
rename from data/anainfo/BELLE_2011_I878990.info
rename to analyses/pluginMisc/BELLE_2011_I878990.info
diff --git a/data/plotinfo/BELLE_2011_I878990.plot b/analyses/pluginMisc/BELLE_2011_I878990.plot
rename from data/plotinfo/BELLE_2011_I878990.plot
rename to analyses/pluginMisc/BELLE_2011_I878990.plot
diff --git a/data/refdata/BELLE_2011_I878990.yoda b/analyses/pluginMisc/BELLE_2011_I878990.yoda
rename from data/refdata/BELLE_2011_I878990.yoda
rename to analyses/pluginMisc/BELLE_2011_I878990.yoda
diff --git a/src/Analyses/BELLE_2013_I1216515.cc b/analyses/pluginMisc/BELLE_2013_I1216515.cc
rename from src/Analyses/BELLE_2013_I1216515.cc
rename to analyses/pluginMisc/BELLE_2013_I1216515.cc
diff --git a/data/anainfo/BELLE_2013_I1216515.info b/analyses/pluginMisc/BELLE_2013_I1216515.info
rename from data/anainfo/BELLE_2013_I1216515.info
rename to analyses/pluginMisc/BELLE_2013_I1216515.info
diff --git a/data/plotinfo/BELLE_2013_I1216515.plot b/analyses/pluginMisc/BELLE_2013_I1216515.plot
rename from data/plotinfo/BELLE_2013_I1216515.plot
rename to analyses/pluginMisc/BELLE_2013_I1216515.plot
diff --git a/data/refdata/BELLE_2013_I1216515.yoda b/analyses/pluginMisc/BELLE_2013_I1216515.yoda
rename from data/refdata/BELLE_2013_I1216515.yoda
rename to analyses/pluginMisc/BELLE_2013_I1216515.yoda
diff --git a/src/Analyses/BELLE_2013_I1238273.cc b/analyses/pluginMisc/BELLE_2013_I1238273.cc
rename from src/Analyses/BELLE_2013_I1238273.cc
rename to analyses/pluginMisc/BELLE_2013_I1238273.cc
diff --git a/data/anainfo/BELLE_2013_I1238273.info b/analyses/pluginMisc/BELLE_2013_I1238273.info
rename from data/anainfo/BELLE_2013_I1238273.info
rename to analyses/pluginMisc/BELLE_2013_I1238273.info
diff --git a/data/plotinfo/BELLE_2013_I1238273.plot b/analyses/pluginMisc/BELLE_2013_I1238273.plot
rename from data/plotinfo/BELLE_2013_I1238273.plot
rename to analyses/pluginMisc/BELLE_2013_I1238273.plot
diff --git a/data/refdata/BELLE_2013_I1238273.yoda b/analyses/pluginMisc/BELLE_2013_I1238273.yoda
rename from data/refdata/BELLE_2013_I1238273.yoda
rename to analyses/pluginMisc/BELLE_2013_I1238273.yoda
diff --git a/src/Analyses/BELLE_2015_I1397632.cc b/analyses/pluginMisc/BELLE_2015_I1397632.cc
rename from src/Analyses/BELLE_2015_I1397632.cc
rename to analyses/pluginMisc/BELLE_2015_I1397632.cc
diff --git a/data/anainfo/BELLE_2015_I1397632.info b/analyses/pluginMisc/BELLE_2015_I1397632.info
rename from data/anainfo/BELLE_2015_I1397632.info
rename to analyses/pluginMisc/BELLE_2015_I1397632.info
diff --git a/data/plotinfo/BELLE_2015_I1397632.plot b/analyses/pluginMisc/BELLE_2015_I1397632.plot
rename from data/plotinfo/BELLE_2015_I1397632.plot
rename to analyses/pluginMisc/BELLE_2015_I1397632.plot
diff --git a/data/refdata/BELLE_2015_I1397632.yoda b/analyses/pluginMisc/BELLE_2015_I1397632.yoda
rename from data/refdata/BELLE_2015_I1397632.yoda
rename to analyses/pluginMisc/BELLE_2015_I1397632.yoda
diff --git a/analyses/pluginMisc/BELLE_2017_I1512299.cc b/analyses/pluginMisc/BELLE_2017_I1512299.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/BELLE_2017_I1512299.cc
@@ -0,0 +1,166 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/UnstableFinalState.hh"
+
+namespace Rivet {
+
+
+  /// @brief Add a short analysis description here
+  class BELLE_2017_I1512299 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(BELLE_2017_I1512299);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      // Initialise and register projections
+      declare(UnstableFinalState(), "UFS");
+
+      // Book histograms
+      _h_w      = bookHisto1D(1, 1, 1);
+      _h_costhv = bookHisto1D(2, 1, 1);
+      _h_costhl = bookHisto1D(3, 1, 1);
+      _h_chi    = bookHisto1D(4, 1, 1);
+
+    }
+
+
+    /// Perform the per-event analysis
+    bool analyzeDecay(Particle mother, vector<int> ids) {
+      // There is no point in looking for decays with less particles than to be analysed
+      if (mother.children().size() == ids.size()) {
+        bool decayfound = true;
+        for (int id : ids) {
+          if (!contains(mother, id)) decayfound = false;
+        }
+        return decayfound;
+      }
+      return false;
+    }
+
+    bool contains(Particle& mother, int id) {
+      return any(mother.children(), HasPID(id));
+    }
+
+
+    double recoilW(const Particle& mother) {
+      FourMomentum lepton, neutrino, meson, q;
+      foreach(const Particle& c, mother.children()) {
+        if (c.isNeutrino()) neutrino=c.mom();
+        if (c.isLepton() &! c.isNeutrino()) lepton =c.mom();
+        if (c.isHadron()) meson=c.mom();
+      }
+      q = lepton + neutrino; //no hadron before
+      double mb2= mother.mom()*mother.mom();
+      double mD2 = meson*meson;
+      return (mb2 + mD2 - q*q )/ (2. * sqrt(mb2) * sqrt(mD2) );
+    }
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+      FourMomentum pl, pnu, pB, pD, pDs, ppi;
+      // Iterate of B0bar mesons
+      for(const Particle& p : apply<UnstableFinalState>(event, "UFS").particles(Cuts::pid==-511)) {
+        pB = p.momentum();
+        // Find semileptonic decays
+        if (analyzeDecay(p, {PID::DSTARPLUS,-12,11}) || analyzeDecay(p, {PID::DSTARPLUS,-14,13}) ) {
+          _h_w->fill(recoilW(p), event.weight());
+          // Get the necessary momenta for the angles
+          bool foundDdecay=false;
+          for (const Particle c : p.children()) {
+            if ( (c.pid() == PID::DSTARPLUS)  && (analyzeDecay(c, {PID::PIPLUS, PID::D0}) || analyzeDecay(c, {PID::PI0, PID::DPLUS})) ) {
+              foundDdecay=true;
+              pDs = c.momentum();
+              for (const Particle dc : c.children()) {
+                if (dc.hasCharm()) pD = dc.momentum(); 
+                else ppi = dc.momentum(); 
+              }
+            }
+            if (c.pid() ==  11 || c.pid() ==  13) pl  = c.momentum();
+            if (c.pid() == -12 || c.pid() == -14) pnu = c.momentum();
+          }
+          // This is the angle analysis
+          if (foundDdecay) {
+
+            // First boost all relevant momenta into the B-rest frame
+            const LorentzTransform B_boost = LorentzTransform::mkFrameTransformFromBeta(pB.betaVec());
+            // Momenta in B rest frame:
+            FourMomentum lv_brest_Dstar = B_boost.transform(pDs);//lab2brest(gp_Dstar.particle.p());
+            FourMomentum lv_brest_w     = B_boost.transform(pB - pDs); //lab2brest(p_lv_w);
+            FourMomentum lv_brest_D     = B_boost.transform(pD); //lab2brest(gp_D.particle.p());
+            FourMomentum lv_brest_lep   = B_boost.transform(pl); //lab2brest(gp_lep.p());
+            
+            const LorentzTransform Ds_boost = LorentzTransform::mkFrameTransformFromBeta(pDs.betaVec());
+            FourMomentum lv_Dstarrest_D     = Ds_boost.transform(lv_brest_D);
+            const LorentzTransform W_boost  = LorentzTransform::mkFrameTransformFromBeta((pB-pDs).betaVec());
+            FourMomentum lv_wrest_lep       = W_boost.transform(lv_brest_lep);
+
+            double cos_thetaV = cos(lv_brest_Dstar.p3().angle(lv_Dstarrest_D.p3()));
+            _h_costhv->fill(cos_thetaV, event.weight());
+            
+            double cos_thetaL = cos(lv_brest_w.p3().angle(lv_wrest_lep.p3()));
+            _h_costhl->fill(cos_thetaL, event.weight());
+
+            Vector3 LTrans = lv_wrest_lep.p3()   - cos_thetaL*lv_wrest_lep.p3().perp()*lv_brest_w.p3().unit();
+            Vector3 VTrans = lv_Dstarrest_D.p3() - cos_thetaV*lv_Dstarrest_D.p3().perp()*lv_brest_Dstar.p3().unit();
+            float chi = atan2(LTrans.cross(VTrans).dot(lv_brest_w.p3().unit()), LTrans.dot(VTrans));
+            if(chi < 0) chi += TWOPI; 
+
+            _h_chi->fill(chi, event.weight());
+
+            //const LorentzTransform W_boost = LorentzTransform::mkFrameTransformFromBeta((pl+pnu).betaVec());
+            //const LorentzTransform D_boost = LorentzTransform::mkFrameTransformFromBeta((pD+ppi).betaVec());
+
+            //FourMomentum pl_t = FourMomentum(W_boost.transform(pl));
+            //FourMomentum pD_t = FourMomentum(D_boost.transform(pD));
+            //double thetal = (pl+pnu).angle(pl_t);
+            //double thetav = (pD+ppi).angle(pD_t);
+            //_h_costhv->fill(cos(thetav), event.weight());
+            //_h_costhl->fill(cos(thetal), event.weight());
+          }
+        }
+      }
+    }
+        //else if (analyzeDecay(p, {413,-14,13}) ) {
+          //_h_w->fill(recoilW(p), event.weight());
+        //}
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+    
+      double GAMMA_B0 = 4.32e-13; // Total width in GeV, calculated from mean life time of 1.52 pico seconds
+      double BR_B0_DSPLUS_ELL_NU = 0.0495; // Branching fraction from the same paper for B0bar to D*+ ell nu
+      double NORM = GAMMA_B0 * BR_B0_DSPLUS_ELL_NU; // Normalise histos to partial width
+      normalize(_h_w,      NORM); 
+      normalize(_h_costhv, NORM); 
+      normalize(_h_costhl, NORM); 
+      normalize(_h_chi,    NORM);
+    }
+
+    //@}
+
+
+    /// @name Histograms
+    //@{
+    Histo1DPtr _h_w;
+    Histo1DPtr _h_costhv;
+    Histo1DPtr _h_costhl;
+    Histo1DPtr _h_chi;
+    //@}
+
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(BELLE_2017_I1512299);
+
+
+}
diff --git a/analyses/pluginMisc/BELLE_2017_I1512299.info b/analyses/pluginMisc/BELLE_2017_I1512299.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/BELLE_2017_I1512299.info
@@ -0,0 +1,27 @@
+Name: BELLE_2017_I1512299
+Year: 2017
+Summary: Decay kinematics of semileptonc B0bar to D*+ decays.
+Experiment: BELLE
+Collider: KEKB
+InspireID: 1512299
+Status: VALIDATED
+Authors:
+ - Holger Schulz <holger.schulz@durham.ac.uk>
+RunInfo: Semileptonic B0bar (-511) decays.
+NeedCrossSection: no
+Description:
+  'Unfolded measurement of recoil w, helicity and decay plane angles of semileptonc B0bar to D*+ decays. The data was used to determine Vcb. Note that the data in the paper does not account for the bin wodths. The data shipped with rivet is divided by the bin width and all curves are normalised to the partial width of B0bar-> D*+ ell nu'
+BibKey: Abdesselam:2017kjf
+BibTeX: '@article{Abdesselam:2017kjf,
+      author         = "Abdesselam, A. and others",
+      title          = "{Precise determination of the CKM matrix element $\left|
+                        V_{cb}\right|$ with $\bar B^0 \to D^{*\,+} \, \ell^- \,
+                        \bar \nu_\ell$ decays with hadronic tagging at Belle}",
+      collaboration  = "Belle",
+      year           = "2017",
+      eprint         = "1702.01521",
+      archivePrefix  = "arXiv",
+      primaryClass   = "hep-ex",
+      reportNumber   = "BELLE-CONF-1612",
+      SLACcitation   = "%%CITATION = ARXIV:1702.01521;%%"
+}'
diff --git a/analyses/pluginMisc/BELLE_2017_I1512299.plot b/analyses/pluginMisc/BELLE_2017_I1512299.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/BELLE_2017_I1512299.plot
@@ -0,0 +1,47 @@
+# BEGIN PLOT /BELLE_2017_I1512299/d0*
+Title=$\bar{B}_0\to D^{*+} \ell^- \bar{\nu}_\ell$
+# END PLOT
+
+# BEGIN PLOT /BELLE_2017_I1512299/d01-x01-y01
+XLabel=$w$
+YLabel=$\Delta\Gamma/\Delta w$~[GeV]
+YMin=1e-14
+YMax=1e-13
+# END PLOT
+
+# BEGIN PLOT /BELLE_2017_I1512299/d02-x01-y01
+XLabel=$\cos\theta_v$
+YLabel=$\Delta\Gamma/\Delta \cos\theta_v$~[GeV]
+YMin=3e-15
+YMax=2e-14
+# END PLOT
+
+# BEGIN PLOT /BELLE_2017_I1512299/d03-x01-y01
+XLabel=$\cos\theta_l$
+YLabel=$\Delta\Gamma/\Delta \cos\theta_l$~[GeV]
+YMin=3e-15
+YMax=2e-14
+# END PLOT
+
+
+# BEGIN PLOT /BELLE_2017_I1512299/d04-x01-y01
+XLabel=$\chi$
+YLabel=$\Delta\Gamma/\Delta\chi$~[GeV]
+YMin=1e-15
+YMax=1e-14
+# END PLOT
+
+# BEGIN PLOT /BELLE_2017_I1512299/d05-x01-y01
+Title=Correlations
+XLabel=$\text{Bin}~i$
+YLabel=$\text{Bin}~j$
+ZLabel=$\rho_{ij}$
+LogY=0
+LogZ=0
+ZMin=0
+ZMax=1
+XMin=0
+XMax=40
+YMin=0
+YMax=40
+# END PLOT
diff --git a/analyses/pluginMisc/BELLE_2017_I1512299.yoda b/analyses/pluginMisc/BELLE_2017_I1512299.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/BELLE_2017_I1512299.yoda
@@ -0,0 +1,1675 @@
+BEGIN YODA_SCATTER2D /REF/BELLE_2017_I1512299/d01-x01-y01
+Path=/REF/BELLE_2017_I1512299/d01-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+1.025000e+00	2.500000e-02	2.500000e-02	2.640152e-14	2.299946e-15	2.299946e-15
+1.075000e+00	2.500000e-02	2.500000e-02	4.152790e-14	2.999468e-15	2.999468e-15
+1.125000e+00	2.500000e-02	2.500000e-02	4.788014e-14	3.064572e-15	3.064572e-15
+1.175000e+00	2.500000e-02	2.500000e-02	5.131456e-14	3.276845e-15	3.276845e-15
+1.225000e+00	2.500000e-02	2.500000e-02	5.261369e-14	3.153031e-15	3.153031e-15
+1.275000e+00	2.500000e-02	2.500000e-02	4.929548e-14	3.007812e-15	3.007812e-15
+1.325000e+00	2.500000e-02	2.500000e-02	4.499864e-14	2.830234e-15	2.830234e-15
+1.375000e+00	2.500000e-02	2.500000e-02	4.164488e-14	2.757179e-15	2.757179e-15
+1.425000e+00	2.500000e-02	2.500000e-02	3.982659e-14	2.584077e-15	2.584077e-15
+1.476885e+00	2.688500e-02	2.688500e-02	3.407364e-14	2.534612e-15	2.534612e-15
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/BELLE_2017_I1512299/d02-x01-y01
+Path=/REF/BELLE_2017_I1512299/d02-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-9.000000e-01	1.000000e-01	1.000000e-01	1.402027e-14	9.900066e-16	9.900066e-16
+-7.000000e-01	1.000000e-01	1.000000e-01	1.148637e-14	7.079370e-16	7.079370e-16
+-5.000000e-01	1.000000e-01	1.000000e-01	9.738649e-15	6.694346e-16	6.694346e-16
+-3.000000e-01	1.000000e-01	1.000000e-01	8.487530e-15	5.835444e-16	5.835444e-16
+-1.000000e-01	1.000000e-01	1.000000e-01	7.909964e-15	5.751866e-16	5.751866e-16
+1.000000e-01	1.000000e-01	1.000000e-01	8.251215e-15	5.717965e-16	5.717965e-16
+3.000000e-01	1.000000e-01	1.000000e-01	8.857733e-15	6.041834e-16	6.041834e-16
+5.000000e-01	1.000000e-01	1.000000e-01	9.980570e-15	7.047135e-16	7.047135e-16
+7.000000e-01	1.000000e-01	1.000000e-01	1.251523e-14	8.314981e-16	8.314981e-16
+9.000000e-01	1.000000e-01	1.000000e-01	1.593145e-14	1.260281e-15	1.260281e-15
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/BELLE_2017_I1512299/d03-x01-y01
+Path=/REF/BELLE_2017_I1512299/d03-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+-9.000000e-01	1.000000e-01	1.000000e-01	3.637432e-15	3.727780e-16	3.727780e-16
+-7.000000e-01	1.000000e-01	1.000000e-01	5.880539e-15	4.852311e-16	4.852311e-16
+-5.000000e-01	1.000000e-01	1.000000e-01	8.186804e-15	5.629356e-16	5.629356e-16
+-3.000000e-01	1.000000e-01	1.000000e-01	1.018193e-14	6.780134e-16	6.780134e-16
+-1.000000e-01	1.000000e-01	1.000000e-01	1.170485e-14	7.516311e-16	7.516311e-16
+1.000000e-01	1.000000e-01	1.000000e-01	1.250997e-14	7.960332e-16	7.960332e-16
+3.000000e-01	1.000000e-01	1.000000e-01	1.269945e-14	7.883074e-16	7.883074e-16
+5.000000e-01	1.000000e-01	1.000000e-01	1.339019e-14	8.225216e-16	8.225216e-16
+7.000000e-01	1.000000e-01	1.000000e-01	1.414288e-14	1.051591e-15	1.051591e-15
+9.000000e-01	1.000000e-01	1.000000e-01	1.407774e-14	1.235112e-15	1.235112e-15
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER2D /REF/BELLE_2017_I1512299/d04-x01-y01
+Path=/REF/BELLE_2017_I1512299/d04-x01-y01
+Title=
+Type=Scatter2D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+
+3.141600e-01	3.141600e-01	3.141600e-01	2.958486e-15	2.551307e-16	2.551307e-16
+9.424800e-01	3.141600e-01	3.141600e-01	3.677816e-15	2.532057e-16	2.532057e-16
+1.570800e+00	3.141600e-01	3.141600e-01	4.114668e-15	2.620868e-16	2.620868e-16
+2.199120e+00	3.141600e-01	3.141600e-01	3.766122e-15	2.502381e-16	2.502381e-16
+2.827440e+00	3.141600e-01	3.141600e-01	3.096293e-15	2.075766e-16	2.075766e-16
+3.455760e+00	3.141600e-01	3.141600e-01	2.982271e-15	2.427060e-16	2.427060e-16
+4.084080e+00	3.141600e-01	3.141600e-01	3.360881e-15	2.382231e-16	2.382231e-16
+4.712400e+00	3.141600e-01	3.141600e-01	3.700662e-15	2.528585e-16	2.528585e-16
+5.340720e+00	3.141600e-01	3.141600e-01	3.424370e-15	2.404012e-16	2.404012e-16
+5.969040e+00	3.141600e-01	3.141600e-01	3.001879e-15	2.583201e-16	2.583201e-16
+END YODA_SCATTER2D
+
+BEGIN YODA_SCATTER3D /REF/BELLE_2017_I1512299/d05-x01-y01
+Path=/REF/BELLE_2017_I1512299/d05-x01-y01
+Title=
+Type=Scatter3D
+# xval	 xerr-	 xerr+	 yval	 yerr-	 yerr+	 zval	 zerr-	 zerr+
+0.000000e+00	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	9.198639e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	6.031224e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	3.507121e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	2.978477e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	3.353124e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	3.760429e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	4.006477e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	3.718988e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	3.064240e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.169212e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	3.315954e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	3.861418e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	4.173316e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	4.347278e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	4.238388e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	3.995940e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	3.911822e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	3.831234e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	3.461916e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.055047e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	3.538156e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	3.870532e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	3.967877e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	4.134743e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	4.124040e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	3.842066e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	3.779641e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	3.688883e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	3.302719e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	2.762251e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	3.490857e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	4.015483e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	4.097006e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	4.095141e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	3.685686e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	3.967668e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	4.205821e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	4.167636e-01	0.000000e+00	0.000000e+00
+0.000000e+00	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	3.491422e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	9.198639e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	9.999999e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	7.999673e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	4.993052e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	3.916978e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	4.002674e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	4.389338e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	4.512786e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	4.290042e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	3.573262e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.490724e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	3.790887e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	4.223386e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	4.568611e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	4.597854e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	4.629895e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	4.627465e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	4.454900e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	4.380167e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	3.798670e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.430120e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.077064e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	4.559584e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	4.607846e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	4.734842e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	4.647465e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	4.387167e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	4.258567e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	3.913566e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	3.447934e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	3.166861e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	3.948301e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	4.636876e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	4.648443e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	4.593887e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	3.828682e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	4.371622e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	4.612569e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	4.541091e-01	0.000000e+00	0.000000e+00
+1.000000e+00	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	3.820845e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	6.031224e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	7.999673e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	8.321059e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.983163e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.178280e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.228921e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.532238e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.242777e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.646957e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.810100e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.346851e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.289612e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.421318e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	5.450482e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.284737e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.246881e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.455422e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.201531e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	4.621850e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.962243e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.733237e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.439389e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.714353e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.780035e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.596979e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.001701e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.036988e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.188267e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	4.677506e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.021851e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.745842e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.478322e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.621234e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.522274e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	5.208586e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.496891e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.570953e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.315233e-01	0.000000e+00	0.000000e+00
+2.000000e+00	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	4.740207e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.507121e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.993052e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	8.321060e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	8.305211e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	6.507897e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.524676e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.724568e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.447906e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	5.002587e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.663720e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.389144e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.861510e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.884024e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	5.910810e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.515450e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.255122e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.696145e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.461472e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	5.017912e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.989950e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.756563e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.548372e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.929123e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.994828e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.863075e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.232138e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.369422e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.700876e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	5.156088e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.283284e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.825355e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.586637e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.944344e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.902525e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	5.927449e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.833085e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.775528e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.577346e-01	0.000000e+00	0.000000e+00
+3.000000e+00	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	5.157226e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	2.978477e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	3.916978e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.983163e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	8.305212e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	8.472310e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.922797e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	4.947789e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	4.958819e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.508318e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.598642e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.474343e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.337185e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.555662e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	5.267338e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.259919e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.186687e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.010405e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.206274e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	4.669574e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.677206e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.476211e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.236871e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.486076e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.633473e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.459371e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.418639e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.653888e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	4.680985e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	3.874238e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	3.717686e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.340242e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.277958e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.373428e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.462201e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	4.635966e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.162223e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.238772e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.366688e-01	0.000000e+00	0.000000e+00
+4.000000e+00	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	4.839697e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.353124e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.002674e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.178280e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	6.507897e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	8.472310e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	8.118079e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	6.020515e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	4.913688e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.223858e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.677512e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.501626e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.659949e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.772220e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	5.590023e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.464232e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.203364e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.193035e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.236610e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	4.672796e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.919587e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.666339e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.425271e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.656095e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.781909e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.681592e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.588677e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.742147e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.013442e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	4.255378e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.103058e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.697887e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.386609e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.464337e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.648368e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	5.120445e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.382045e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.470396e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.482565e-01	0.000000e+00	0.000000e+00
+5.000000e+00	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	4.847325e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.760429e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.389338e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.228921e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.524676e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.922797e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	8.118079e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	8.512704e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	6.096553e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.578392e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.725603e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.452238e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.778059e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.882692e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	5.877809e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.621049e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.286225e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.482084e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.405946e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	4.888916e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	4.078023e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.759530e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.452793e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.583428e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.663166e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.726013e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.618103e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.539852e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.269035e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	4.647549e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.385153e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.940926e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.570905e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.842683e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	6.134816e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	5.791049e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.696839e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.590646e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.263739e-01	0.000000e+00	0.000000e+00
+6.000000e+00	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	4.580812e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	4.006477e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.512786e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.532237e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.724568e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	4.947789e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	6.020515e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	8.512704e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	9.999999e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	8.254023e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	6.261041e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.941318e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.067369e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.652996e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.821678e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	6.286399e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.895662e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.370888e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.824826e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.563993e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	5.195253e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.951283e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.598547e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.335550e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.664868e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.655695e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.775054e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.517889e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.526494e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.810549e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	5.369405e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.545259e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	5.054945e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.522632e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	6.018273e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	6.117017e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	6.303621e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.830181e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.911290e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.693963e-01	0.000000e+00	0.000000e+00
+7.000000e+00	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	5.098516e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.718988e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.290042e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.242777e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.447906e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	4.958819e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	4.913688e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	6.096553e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	8.254024e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	9.065986e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.774298e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.102749e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.051314e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.336971e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	5.761675e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.687646e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.362359e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.449924e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.271298e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	5.016546e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.555543e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.233712e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.053012e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.486565e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.527663e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.507773e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.396766e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.353675e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.171695e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	4.723012e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.197755e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.970112e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.339669e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.397439e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.472274e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	5.338901e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.298672e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.425881e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.396249e-01	0.000000e+00	0.000000e+00
+8.000000e+00	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	4.909849e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.064240e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	3.573262e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	4.646957e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.002587e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	4.508317e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	4.223858e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	4.578393e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	6.261041e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	9.065986e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.263157e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	3.555878e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	4.561600e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	4.772956e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	5.266804e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.140792e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	4.761577e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	4.956195e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	4.751918e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	4.666305e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.204636e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	3.803371e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	4.580238e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	4.992045e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	4.951063e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	4.939886e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	4.817699e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	4.934392e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	4.992527e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	4.567957e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	3.883310e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.692846e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	4.841476e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	4.736509e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	4.748105e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	4.925701e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	4.740383e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	4.789501e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	4.831319e-01	0.000000e+00	0.000000e+00
+9.000000e+00	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	4.583547e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.169212e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	3.490724e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	3.810100e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	3.663720e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	3.598642e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	3.677512e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	3.725603e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	3.941318e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	3.774298e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	3.263156e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	6.612038e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	3.559476e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	2.941343e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	3.294497e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	3.347794e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	3.189403e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	3.436466e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	3.353155e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	3.124705e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.142416e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	3.508489e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	3.889019e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	3.947378e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	4.039269e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	3.946544e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	3.755169e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	3.737119e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	3.858202e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	3.348025e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	2.779332e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	3.697495e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	4.212874e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	4.124209e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	4.078306e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	3.890524e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	4.070840e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	3.914492e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	3.847999e-01	0.000000e+00	0.000000e+00
+1.000000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	3.493619e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.315954e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	3.790887e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	4.346851e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	4.389144e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	4.474343e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	4.501626e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	4.452238e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	4.067370e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	4.102749e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	3.555878e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	6.612037e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	7.493617e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.291846e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	3.870321e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	3.617816e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	3.562778e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	3.680100e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	3.941151e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	3.674833e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.693158e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.206027e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	4.679057e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	4.532866e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	4.603782e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	4.542675e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	4.305595e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	4.332941e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	3.872357e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	3.302433e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	3.271410e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	3.977923e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	4.665866e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	4.723306e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	4.866991e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	3.980435e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	4.396378e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	4.362064e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	4.218351e-01	0.000000e+00	0.000000e+00
+1.100000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	3.818299e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.861418e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.223386e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.289611e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.861510e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.337185e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.659949e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.778059e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.652996e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.051315e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.561600e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.559476e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	7.493618e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	8.675869e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	6.876299e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.386035e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	4.522239e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.189107e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.093999e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	4.847413e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	4.300192e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.963526e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.635991e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.881406e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.931021e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.838640e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.228369e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.570607e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	6.001555e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	5.397189e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.407575e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.973524e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.618490e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	6.178795e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	6.279593e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	6.304131e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.801471e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.785226e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.614840e-01	0.000000e+00	0.000000e+00
+1.200000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	5.250121e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	4.173316e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.568611e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.421318e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.884024e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.555662e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.772220e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.882692e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.821678e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.336971e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.772956e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	2.941343e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	5.291846e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	8.675868e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	8.867846e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	7.139812e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.503827e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.139188e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	4.809273e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	4.469745e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	4.201996e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.988460e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.771369e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	6.033672e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	6.102862e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.920104e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.402818e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.613447e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.654491e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	5.111578e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.266066e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.838765e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.660537e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	6.196359e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	6.347500e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	6.042646e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.742399e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.742076e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.736302e-01	0.000000e+00	0.000000e+00
+1.300000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	5.256287e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	4.347278e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.597854e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.450482e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.910810e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.267338e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.590022e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.877809e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	6.286399e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.761675e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	5.266804e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.294497e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	3.870321e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	6.876299e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	8.867845e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	9.999999e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	9.041975e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	6.858584e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.850355e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	4.747399e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	4.431033e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.867853e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.613464e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.606052e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	6.201776e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	6.274429e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	6.146054e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.473815e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.776805e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	6.269868e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	5.839519e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.507834e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	5.167991e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.795819e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	6.361788e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	6.365596e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	6.602257e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	6.046078e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	6.043881e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.993031e-01	0.000000e+00	0.000000e+00
+1.400000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	5.563946e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	4.238388e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.629895e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.284737e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.515450e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.259919e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.464232e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.621049e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.895662e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.687646e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	5.140792e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.347794e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	3.617816e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.386035e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	7.139812e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	9.041975e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	8.747980e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	6.646616e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	4.735855e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	3.828151e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.900099e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.585435e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.471002e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.953627e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	6.098347e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	6.008059e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.603556e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.868527e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.596693e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	5.007867e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.141378e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.911527e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.598769e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.954884e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.985310e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	5.785385e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.833084e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.999623e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.955763e-01	0.000000e+00	0.000000e+00
+1.500000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	5.335708e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.995940e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.627465e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.246881e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.255121e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.186686e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.203364e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.286225e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.370888e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.362359e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.761577e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.189403e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	3.562778e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	4.522239e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.503826e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	6.858584e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	8.747981e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	9.999999e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	8.503855e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.894997e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	3.691803e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.977390e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.607570e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.243719e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.478329e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.785809e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.768912e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.493948e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.675738e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	4.929703e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	4.257940e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	3.791833e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.573005e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.280042e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.379244e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.465757e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	4.963853e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.492527e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.813083e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.783583e-01	0.000000e+00	0.000000e+00
+1.600000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	5.015352e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.911822e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.454900e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.455421e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.696145e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.010405e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.193035e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.482084e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.824826e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.449924e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.956195e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.436466e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	3.680100e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.189107e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.139188e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	5.850355e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	6.646616e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	8.503855e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	8.322224e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	5.656678e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	4.183966e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.767235e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.333830e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.662469e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.942985e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	6.037756e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.402792e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.648411e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.941650e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	5.413501e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.390939e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	5.008727e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.462788e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.874393e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.914048e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	6.211942e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	6.076893e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	6.103566e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.982845e-01	0.000000e+00	0.000000e+00
+1.700000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	5.456824e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.831233e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.380167e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.201531e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.461472e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.206274e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.236610e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.405946e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.563993e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.271299e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.751917e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.353155e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	3.941150e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.093999e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	4.809273e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	4.747399e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	4.735854e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.894996e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	8.322224e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	8.526627e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.882903e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.519932e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.060688e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.343134e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.594705e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.696365e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.222987e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.226490e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.237962e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	4.723776e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.413506e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.891346e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.204438e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.589473e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.665445e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	5.524761e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.705925e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.706759e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.638503e-01	0.000000e+00	0.000000e+00
+1.800000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	5.011693e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.461916e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	3.798670e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	4.621850e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.017913e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	4.669574e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	4.672796e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	4.888915e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.195253e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.016546e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.666305e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.124705e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	3.674833e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	4.847413e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	4.469745e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	4.431033e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	3.828151e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	3.691803e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.656677e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	8.526627e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.192773e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	3.753234e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	4.473194e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.037894e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.198082e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.177358e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	4.531388e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	4.523339e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.135452e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	4.840072e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.073142e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.655105e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	4.701914e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.029043e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.040080e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	5.355144e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.326779e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.320668e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.205823e-01	0.000000e+00	0.000000e+00
+1.900000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	4.655786e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.055047e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	3.430120e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	3.962243e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	3.989950e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	3.677205e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	3.919587e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	4.078023e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	3.951283e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	3.555543e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	3.204636e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.142416e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	3.693158e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	4.300192e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	4.201996e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	3.867853e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	3.900099e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	3.977390e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	4.183967e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	3.882903e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	3.192773e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	9.999999e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	9.341593e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	6.692832e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	3.633687e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	2.795612e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	3.052537e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	3.328368e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	3.652369e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	3.442725e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	2.919834e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	2.879250e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	3.295419e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	3.646840e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	3.915796e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	4.292277e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	4.139487e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	4.277495e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	3.980491e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	3.788583e-01	0.000000e+00	0.000000e+00
+2.000000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	3.315495e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.538156e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.077064e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	4.733237e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	4.756564e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	4.476211e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	4.666339e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	4.759530e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	4.598548e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	4.233712e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	3.803371e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.508489e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.206027e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	4.963526e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	4.988459e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	4.613464e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	4.585434e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	4.607570e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	4.767235e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	4.519932e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	3.753234e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	9.341593e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	9.999999e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	8.472858e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.267336e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	3.821648e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	3.697641e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	3.961959e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	4.287420e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	3.945717e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	3.311924e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	3.354506e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	3.889115e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	4.395747e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	4.618291e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.005998e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	4.637537e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	4.826257e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	4.545754e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	4.387223e-01	0.000000e+00	0.000000e+00
+2.100000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	3.902832e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.870532e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.559584e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.439389e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.548372e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.236871e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.425270e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.452793e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.335550e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.053012e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.580238e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.889019e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.679057e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.635991e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.771369e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	5.606051e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.471002e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.243719e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.333830e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.060688e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	4.473195e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	6.692832e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	8.472858e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	8.306836e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.970316e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	4.725405e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	4.568587e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	4.890488e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	4.714912e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	4.128359e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	3.828144e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.429572e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.070743e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.357438e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.708125e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	5.339023e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.474989e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.293105e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.121174e-01	0.000000e+00	0.000000e+00
+2.200000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	4.717786e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.967877e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.607846e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.714353e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.929123e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.486076e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.656095e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.583428e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.664868e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.486565e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.992045e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.947378e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.532866e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.881407e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	6.033672e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	6.201776e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.953628e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.478329e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.662469e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.343134e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	5.037893e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.633687e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	5.267337e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	8.306836e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	8.613638e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	6.322520e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	4.943755e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.028211e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.411550e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	4.993515e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.130652e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.778479e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.403696e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.813455e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.977463e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	5.898960e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.855842e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.815328e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.517556e-01	0.000000e+00	0.000000e+00
+2.300000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	5.041961e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	4.134742e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.734842e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.780035e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.994828e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.633473e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.781909e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.663166e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.655695e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.527663e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.951063e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	4.039269e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.603782e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.931021e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	6.102862e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	6.274429e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	6.098347e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.785809e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.942985e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.594706e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	5.198082e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	2.795612e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	3.821648e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.970316e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	8.613638e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	8.567884e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	6.098678e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.087815e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.220264e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	4.982412e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.126756e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.843712e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.454515e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.862091e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	6.012638e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	5.846082e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.903722e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.934750e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.666704e-01	0.000000e+00	0.000000e+00
+2.400000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	4.990786e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	4.124040e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.647465e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.596979e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.863075e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.459371e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.681592e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.726013e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.775053e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.507773e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.939886e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.946544e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.542675e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.838640e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.920105e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	6.146053e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	6.008059e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.768912e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	6.037756e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.696365e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	5.177358e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.052537e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	3.697641e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	4.725405e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	6.322519e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	8.567884e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	8.207091e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.958993e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.271346e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	4.947617e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.258792e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.979812e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.415233e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.852984e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	6.016054e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	5.836042e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.794524e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.857524e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.723218e-01	0.000000e+00	0.000000e+00
+2.500000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	5.042883e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.842065e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.387167e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.001701e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.232138e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.418639e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.588677e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.618103e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.517889e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.396765e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.817699e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.755169e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.305595e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.228369e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.402817e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	5.473815e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.603556e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.493948e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.402792e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.222986e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	4.531388e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.328368e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	3.961959e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	4.568587e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	4.943755e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	6.098678e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	8.207091e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	8.306154e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.348155e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	3.811606e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	3.856742e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.673632e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.316476e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.395380e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.628124e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	5.078570e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.343922e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.259920e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.281118e-01	0.000000e+00	0.000000e+00
+2.600000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	4.628513e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.779641e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.258567e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.036988e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.369422e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.653888e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.742147e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.539852e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.526494e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.353675e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.934393e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.737119e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.332941e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.570607e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.613447e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	5.776805e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.868527e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.675738e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.648411e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.226490e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	4.523339e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.652369e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.287420e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	4.890488e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.028211e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.087815e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.958993e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	8.306155e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	9.999999e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	7.361072e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	4.588076e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	3.963798e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.889209e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.537978e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.498530e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.630984e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	5.531643e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.664569e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.545269e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.483515e-01	0.000000e+00	0.000000e+00
+2.700000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	4.902617e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.688883e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	3.913566e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.188267e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.700876e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	4.680985e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.013443e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.269036e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.810549e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.171695e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.992527e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.858202e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	3.872357e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	6.001555e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.654491e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	6.269868e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.596693e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	4.929703e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.941650e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.237962e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	5.135452e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.442725e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	3.945717e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	4.714912e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.411550e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.220264e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.271347e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.348155e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	7.361072e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	9.999999e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	8.667954e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.362362e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	5.106664e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.356430e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.881829e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.815799e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	7.047297e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	6.113205e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.889513e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.582339e-01	0.000000e+00	0.000000e+00
+2.800000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	5.396415e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.302719e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	3.447934e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	4.677506e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.156088e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	3.874238e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	4.255378e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	4.647549e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.369405e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	4.723012e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.567957e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.348025e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	3.302433e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.397189e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.111578e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	5.839519e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.007867e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	4.257941e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.413500e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	4.723776e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	4.840072e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	2.919834e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	3.311924e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	4.128359e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	4.993515e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	4.982412e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	4.947617e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	3.811606e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	4.588076e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	8.667954e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	3.993573e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.568887e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	4.666959e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.457208e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.317384e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	6.637205e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.549452e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.497598e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.229432e-01	0.000000e+00	0.000000e+00
+2.900000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	5.198532e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	2.762251e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	3.166861e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	4.021851e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	4.283284e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	3.717686e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	4.103058e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	4.385153e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	4.545259e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	4.197755e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	3.883310e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	2.779332e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	3.271410e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	4.407575e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	4.266066e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	4.507834e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	4.141378e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	3.791833e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	4.390939e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	4.413506e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	4.073142e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	2.879250e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	3.354506e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	3.828144e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	4.130652e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	4.126756e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	4.258792e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	3.856742e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	3.963798e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	4.362362e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	3.993572e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	9.999999e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	8.649951e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	4.765345e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	3.662961e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	3.869486e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	4.514275e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	4.354388e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	3.813463e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	2.905850e-01	0.000000e+00	0.000000e+00
+3.000000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	2.616032e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.490857e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	3.948302e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	4.745842e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	4.825355e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	4.340242e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	4.697887e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	4.940926e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.054945e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	4.970112e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.692846e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.697495e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	3.977923e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	4.973524e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	4.838764e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	5.167991e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	4.911527e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	4.573005e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.008727e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	4.891346e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	4.655105e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.295419e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	3.889115e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	4.429572e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	4.778479e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	4.843712e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	4.979812e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	4.673632e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	4.889208e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.106664e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	4.568887e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	8.649952e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	7.696602e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.501278e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	4.690312e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	4.896641e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	4.855286e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	4.460978e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	3.730030e-01	0.000000e+00	0.000000e+00
+3.100000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	3.247823e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	4.015483e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.636876e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.478322e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.586637e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.277958e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.386609e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.570905e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.522632e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.339669e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.841476e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	4.212874e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.665866e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.618491e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.660537e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	5.795819e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.598769e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.280043e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.462788e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.204438e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	4.701914e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.646840e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.395747e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.070742e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.403697e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.454515e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.415233e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.316477e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.537978e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.356430e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	4.666959e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.765345e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	7.696602e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	8.504587e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	6.496646e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	5.212811e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.070499e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	4.920191e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	4.763865e-01	0.000000e+00	0.000000e+00
+3.200000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	4.294471e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	4.097006e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.648443e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.621234e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.944344e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.373428e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.464337e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.842683e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	6.018273e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.397439e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.736509e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	4.124209e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.723306e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	6.178795e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	6.196359e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	6.361788e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.954884e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.379244e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.874392e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.589473e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	5.029043e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.915796e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.618290e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.357438e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.813455e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.862091e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.852984e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.395380e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.498529e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.881829e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	5.457208e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	3.662961e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	5.501278e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	8.504587e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	9.999999e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	8.733808e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	6.653978e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.496380e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.195854e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.254974e-01	0.000000e+00	0.000000e+00
+3.300000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	4.972980e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	4.095141e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.593886e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.522274e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.902525e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.462201e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.648368e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	6.134816e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	6.117017e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.472274e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.748105e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	4.078306e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.866991e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	6.279593e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	6.347500e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	6.365596e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.985310e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.465757e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.914047e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.665445e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	5.040080e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	4.292277e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	5.005998e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.708125e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.977463e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	6.012638e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	6.016054e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.628124e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.630984e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.815799e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	5.317384e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	3.869486e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.690312e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	6.496646e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	8.733808e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	8.289874e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	6.654938e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.380112e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	4.960644e-01	0.000000e+00	0.000000e+00
+3.400000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	4.681868e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.685686e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	3.828682e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.208586e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.927450e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	4.635966e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.120445e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.791049e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	6.303622e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.338901e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.925701e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.890525e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	3.980435e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	6.304131e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	6.042646e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	6.602257e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.785384e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	4.963853e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	6.211942e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.524761e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	5.355144e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	4.139487e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.637537e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.339023e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.898960e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.846082e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.836042e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.078570e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.531643e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	7.047297e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	6.637205e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.514275e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.896641e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.212811e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	6.653978e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	8.289874e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	8.492720e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	6.574922e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.068032e-01	0.000000e+00	0.000000e+00
+3.500000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	4.706579e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.967668e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.371622e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.496891e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.833086e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.162223e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.382044e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.696839e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.830181e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.298672e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.740383e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	4.070841e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.396378e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.801471e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.742399e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	6.046078e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.833084e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.492528e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	6.076892e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.705925e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	5.326778e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	4.277495e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.826257e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.474989e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.855843e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.903722e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.794524e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.343922e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.664569e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	6.113206e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	5.549452e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	4.354388e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.855286e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	5.070499e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.496380e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	6.654938e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	8.492720e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	8.509224e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	5.735616e-01	0.000000e+00	0.000000e+00
+3.600000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	4.199527e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	4.205821e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.612570e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.570953e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.775528e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.238772e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.470396e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.590646e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.911290e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.425881e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.789502e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.914492e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.362064e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.785226e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.742075e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	6.043881e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.999623e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.813083e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	6.103566e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.706759e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	5.320668e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.980491e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.545754e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.293105e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.815328e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.934750e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.857524e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.259920e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.545268e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.889512e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	5.497598e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	3.813463e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	4.460977e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	4.920191e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.195854e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	5.380112e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	6.574921e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	8.509225e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	9.999999e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	8.100898e-01	0.000000e+00	0.000000e+00
+3.700000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	5.654116e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	4.167636e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	4.541091e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	5.315233e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.577346e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	5.366688e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	5.482565e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	5.263739e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.693963e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	5.396249e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.831319e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.847999e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	4.218351e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.614840e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.736302e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	5.993031e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.955763e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.783583e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.982845e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.638504e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	5.205823e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.788583e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	4.387223e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	5.121174e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.517555e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	5.666704e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.723218e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	5.281118e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	5.483515e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.582339e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	5.229431e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	2.905850e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	3.730031e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	4.763865e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	5.254973e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	4.960644e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	5.068032e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	5.735616e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	8.100898e-01	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+3.800000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	8.782399e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	0.000000e+00	5.000000e-01	5.000000e-01	3.491422e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	1.000000e+00	5.000000e-01	5.000000e-01	3.820845e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	2.000000e+00	5.000000e-01	5.000000e-01	4.740207e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	3.000000e+00	5.000000e-01	5.000000e-01	5.157226e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	4.000000e+00	5.000000e-01	5.000000e-01	4.839697e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	5.000000e+00	5.000000e-01	5.000000e-01	4.847325e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	6.000000e+00	5.000000e-01	5.000000e-01	4.580812e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	7.000000e+00	5.000000e-01	5.000000e-01	5.098516e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	8.000000e+00	5.000000e-01	5.000000e-01	4.909849e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	9.000000e+00	5.000000e-01	5.000000e-01	4.583547e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	1.000000e+01	5.000000e-01	5.000000e-01	3.493619e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	1.100000e+01	5.000000e-01	5.000000e-01	3.818299e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	1.200000e+01	5.000000e-01	5.000000e-01	5.250120e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	1.300000e+01	5.000000e-01	5.000000e-01	5.256286e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	1.400000e+01	5.000000e-01	5.000000e-01	5.563946e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	1.500000e+01	5.000000e-01	5.000000e-01	5.335708e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	1.600000e+01	5.000000e-01	5.000000e-01	5.015351e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	1.700000e+01	5.000000e-01	5.000000e-01	5.456825e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	1.800000e+01	5.000000e-01	5.000000e-01	5.011693e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	1.900000e+01	5.000000e-01	5.000000e-01	4.655787e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	2.000000e+01	5.000000e-01	5.000000e-01	3.315494e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	2.100000e+01	5.000000e-01	5.000000e-01	3.902831e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	2.200000e+01	5.000000e-01	5.000000e-01	4.717787e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	2.300000e+01	5.000000e-01	5.000000e-01	5.041961e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	2.400000e+01	5.000000e-01	5.000000e-01	4.990786e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	2.500000e+01	5.000000e-01	5.000000e-01	5.042883e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	2.600000e+01	5.000000e-01	5.000000e-01	4.628512e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	2.700000e+01	5.000000e-01	5.000000e-01	4.902617e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	2.800000e+01	5.000000e-01	5.000000e-01	5.396415e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	2.900000e+01	5.000000e-01	5.000000e-01	5.198532e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	3.000000e+01	5.000000e-01	5.000000e-01	2.616032e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	3.100000e+01	5.000000e-01	5.000000e-01	3.247823e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	3.200000e+01	5.000000e-01	5.000000e-01	4.294471e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	3.300000e+01	5.000000e-01	5.000000e-01	4.972980e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	3.400000e+01	5.000000e-01	5.000000e-01	4.681868e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	3.500000e+01	5.000000e-01	5.000000e-01	4.706579e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	3.600000e+01	5.000000e-01	5.000000e-01	4.199528e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	3.700000e+01	5.000000e-01	5.000000e-01	5.654115e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	3.800000e+01	5.000000e-01	5.000000e-01	8.782399e-01	0.000000e+00	0.000000e+00
+3.900000e+01	5.000000e-01	5.000000e-01	3.900000e+01	5.000000e-01	5.000000e-01	1.000000e+00	0.000000e+00	0.000000e+00
+END YODA_SCATTER3D
+
diff --git a/src/Analyses/CLEO_2004_S5809304.cc b/analyses/pluginMisc/CLEO_2004_S5809304.cc
rename from src/Analyses/CLEO_2004_S5809304.cc
rename to analyses/pluginMisc/CLEO_2004_S5809304.cc
diff --git a/data/anainfo/CLEO_2004_S5809304.info b/analyses/pluginMisc/CLEO_2004_S5809304.info
rename from data/anainfo/CLEO_2004_S5809304.info
rename to analyses/pluginMisc/CLEO_2004_S5809304.info
diff --git a/data/plotinfo/CLEO_2004_S5809304.plot b/analyses/pluginMisc/CLEO_2004_S5809304.plot
rename from data/plotinfo/CLEO_2004_S5809304.plot
rename to analyses/pluginMisc/CLEO_2004_S5809304.plot
diff --git a/data/refdata/CLEO_2004_S5809304.yoda b/analyses/pluginMisc/CLEO_2004_S5809304.yoda
rename from data/refdata/CLEO_2004_S5809304.yoda
rename to analyses/pluginMisc/CLEO_2004_S5809304.yoda
diff --git a/src/Analyses/E735_1998_S3905616.cc b/analyses/pluginMisc/E735_1998_S3905616.cc
rename from src/Analyses/E735_1998_S3905616.cc
rename to analyses/pluginMisc/E735_1998_S3905616.cc
diff --git a/data/anainfo/E735_1998_S3905616.info b/analyses/pluginMisc/E735_1998_S3905616.info
rename from data/anainfo/E735_1998_S3905616.info
rename to analyses/pluginMisc/E735_1998_S3905616.info
diff --git a/data/plotinfo/E735_1998_S3905616.plot b/analyses/pluginMisc/E735_1998_S3905616.plot
rename from data/plotinfo/E735_1998_S3905616.plot
rename to analyses/pluginMisc/E735_1998_S3905616.plot
diff --git a/data/refdata/E735_1998_S3905616.yoda b/analyses/pluginMisc/E735_1998_S3905616.yoda
rename from data/refdata/E735_1998_S3905616.yoda
rename to analyses/pluginMisc/E735_1998_S3905616.yoda
diff --git a/analyses/pluginMisc/EHS_1988_I265504.cc b/analyses/pluginMisc/EHS_1988_I265504.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/EHS_1988_I265504.cc
@@ -0,0 +1,118 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/Beam.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+#include "Rivet/Event.hh"
+
+namespace Rivet {
+
+
+  class EHS_1988_I265504 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(EHS_1988_I265504);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      declare(ChargedFinalState(), "CFS");
+      declare(Beam(),"Beam");
+
+      switch ( beamIds().first ) {
+      case PID::PIPLUS:
+        _h_cpos_xF = bookHisto1D(1, 1, 1);
+        _h_cpos_eta = bookHisto1D(3, 1, 1);
+        _h_cpos_pT2 = bookHisto1D(5, 1, 1);
+        _h_cneg_xF = bookHisto1D(2, 1, 1);
+        _h_cneg_eta = bookHisto1D(4, 1, 1);
+        _h_cneg_pT2 = bookHisto1D(6, 1, 1);
+        break;
+
+      case PID::KPLUS:
+        _h_cpos_xF = bookHisto1D(1, 1, 2);
+        _h_cpos_eta = bookHisto1D(3, 1, 2);
+        _h_cpos_pT2 = bookHisto1D(5, 1, 2);
+        _h_cneg_xF = bookHisto1D(2, 1, 2);
+        _h_cneg_eta = bookHisto1D(4, 1, 2);
+        _h_cneg_pT2 = bookHisto1D(6, 1, 2);
+        break;
+
+      case PID::PROTON:
+        _h_cpos_xF = bookHisto1D(1, 1, 3);
+        _h_cpos_eta = bookHisto1D(3, 1, 3);
+        _h_cpos_pT2 = bookHisto1D(5, 1, 3);
+        _h_cneg_xF = bookHisto1D(2, 1, 3);
+        _h_cneg_eta = bookHisto1D(4, 1, 3);
+        _h_cneg_pT2 = bookHisto1D(6, 1, 3);
+        break;
+      }
+
+      // Calculate boost from lab to CM frame
+      _beamboost = cmsTransform( beams() );
+      MSG_DEBUG("Boost vector: " << _beamboost );
+
+      // Transform beam into CMS frame
+      Particle _beam_cm = beams().first;
+      _beam_cm.transformBy(_beamboost);
+      // Beam momentum in CM frame defines Feynman-x
+      _pz_max = _beam_cm.pz();
+
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+      const double weight = event.weight();
+
+      const FinalState& fs = apply<FinalState>(event, "CFS");
+      for (const Particle& p: fs.particles()) {
+        // Only interested in pi- or positively charged
+        if (p.charge() < 0 && p.pid() != PID::PIMINUS) continue;
+        // Slow proton cut: reject lab momenta < 1.2GeV
+        if (p.pid() == PID::PROTON && p.p() < 1.2*GeV) continue;
+        // Transform to cm frame
+        const FourMomentum pcm = _beamboost.transform(p);
+        const double xF = pcm.pz()/_pz_max;
+
+        if (p.charge() > 0) {
+          _h_cpos_xF->fill( xF, weight);
+          _h_cpos_pT2->fill( p.pT2(), weight);
+          _h_cpos_eta->fill( p.eta(), weight);
+        } else if (p.pid() == PID::PIMINUS) {
+          _h_cneg_xF->fill( xF, weight);
+          _h_cneg_pT2->fill( p.pT2(), weight);
+          _h_cneg_eta->fill( p.eta(), weight);
+        }
+      }
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+      scale( {_h_cpos_xF, _h_cpos_pT2,_h_cpos_eta, _h_cneg_xF, _h_cneg_eta, _h_cneg_pT2},
+             crossSection()/millibarn/sumOfWeights() );
+    }
+
+    //@}
+
+
+    /// @name Histograms
+    //@{
+    LorentzTransform _beamboost;
+    double _pz_max;
+    Histo1DPtr _h_cpos_xF, _h_cpos_eta, _h_cpos_pT2;
+    Histo1DPtr _h_cneg_xF, _h_cneg_eta, _h_cneg_pT2;
+    //@}
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(EHS_1988_I265504);
+
+}
diff --git a/analyses/pluginMisc/EHS_1988_I265504.info b/analyses/pluginMisc/EHS_1988_I265504.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/EHS_1988_I265504.info
@@ -0,0 +1,37 @@
+Name: EHS_1988_I265504
+Year: 1988
+Summary: Charged-particle production in $K^+ p$, $\pi^+ p$ and $pp$ interactions at $250 \GeV/c$
+Experiment: EHS
+Collider: SPS
+InspireID: 265504
+Status: VALIDATED
+Authors:
+ - Felix Riehn <felix.riehn@kit.edu>
+References:
+ - Z.Phys.C39 (1988), 311
+RunInfo:
+   Inelastic interactions in CM frame, excluding slow protons in the lab. frame with p < 1.2~GeV/$c$
+NumEvents: 100000
+Beams: [[p+, p+], [pi+, p+], [k+, p+]]
+Energies: [[250., 0.], [250., 0.], [250., 0.]]
+NeedCrossSection: True
+Description:
+  'Measurement of charged particle production spectra in longitudinal and transverse momentum
+  as well as rapidity by the EHS/NA22 collaboration at the SPS. Experiment was done with a
+  fixed hydrogen target and beams of $p$, $\pi^+$ and $K^+$ with $250\,\GeV/c$. Measured spectra
+  are for positively charged hadrons $C^+$ and negative charge pions $\pi^-$. $C^+$ excludes
+  slow protons with $p < 1.2\,\GeV/c$ in the laboratory. Final spectra are in center-of-mass
+  variables: $x_\mathrm{F}$, $y$ and $p_\mathrm{T}$.'
+BibKey: Adamus:1988xc
+BibTeX: '@article{Adamus:1988xc,
+      author         = "Adamus, M. and others",
+      title          = "{Charged Particle Production in $K^+ p$, $\pi^+ p$ and $p
+                        p$ Interactions at 250{GeV}/$c$}",
+      collaboration  = "EHS/NA22",
+      journal        = "Z. Phys.",
+      volume         = "C39",
+      year           = "1988",
+      pages          = "311-329",
+      reportNumber   = "IFVE-88-121",
+      SLACcitation   = "%%CITATION = ZEPYA,C39,311;%%"
+}'
diff --git a/analyses/pluginMisc/EHS_1988_I265504.plot b/analyses/pluginMisc/EHS_1988_I265504.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/EHS_1988_I265504.plot
@@ -0,0 +1,133 @@
+# BEGIN PLOT /EHS_1988_I265504/d01-x01-y01
+Title=NA22 $\pi^{+}+\mathrm{p} \, \to \, \mathrm{C}^{+}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Longitudinal momentum fraction $x_{\rm{F}}$
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}x_{\rm{F}}$ (mb)
+LegendXPos=0.4
+LegendYPos=0.4
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d01-x01-y02
+Title=NA22 $\mathrm{K}^{+}+\mathrm{p} \, \to \, \mathrm{C}^{+}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Longitudinal momentum fraction $x_{\rm{F}}$
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}x_{\rm{F}}$ (mb)
+LegendXPos=0.4
+LegendYPos=0.4
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d01-x01-y03
+Title=NA22 $\mathrm{p}+\mathrm{p} \, \to \, \mathrm{C}^{+}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Longitudinal momentum fraction $x_{\rm{F}}$
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}x_{\rm{F}}$ (mb)
+LegendXPos=0.4
+LegendYPos=0.4
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d02-x01-y01
+Title=NA22 $\pi^{+}+\mathrm{p} \, \to \, \pi^{-}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Longitudinal momentum fraction $x_{\rm{F}}$
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}x_{\rm{F}}$ (mb)
+LegendXPos=0.4
+LegendYPos=0.4
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d02-x01-y02
+Title=NA22 $\mathrm{K}^{+}+\mathrm{p} \, \to \, \pi^{-}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Longitudinal momentum fraction $x_{\rm{F}}$
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}x_{\rm{F}}$ (mb)
+LegendXPos=0.4
+LegendYPos=0.4
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d02-x01-y03
+Title=NA22 $\mathrm{p}+\mathrm{p} \, \to \, \pi^{-}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Longitudinal momentum fraction $x_{\rm{F}}$
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}x_{\rm{F}}$ (mb)
+LegendXPos=0.4
+LegendYPos=0.4
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d03-x01-y01
+Title=NA22 $\pi^{+}+\mathrm{p} \, \to \, \mathrm{C}^{+}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Pseudorapidity $\eta$
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}\eta$ (mb)
+LegendXPos=0.4
+LegendYPos=0.4
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d03-x01-y02
+Title=NA22 $\mathrm{K}^{+}+\mathrm{p} \, \to \, \mathrm{C}^{+}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Pseudorapidity $\eta$
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}\eta$ (mb)
+LegendXPos=0.4
+LegendYPos=0.4
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d03-x01-y03
+Title=NA22 $\mathrm{p}+\mathrm{p} \, \to \, \mathrm{C}^{+}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Pseudorapidity $\eta$
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}\eta$ (mb)
+LegendXPos=0.4
+LegendYPos=0.4
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d04-x01-y01
+Title=NA22 $\pi^{+}+\mathrm{p} \, \to \, \pi^{-}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Pseudorapidity $\eta$
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}\eta$ (mb)
+LegendXPos=0.4
+LegendYPos=0.4
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d04-x01-y02
+Title=NA22 $\mathrm{K}^{+}+\mathrm{p} \, \to \, \pi^{-}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Pseudorapidity $\eta$
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}\eta$ (mb)
+LegendXPos=0.4
+LegendYPos=0.4
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d04-x01-y03
+Title=NA22 $\mathrm{p}+\mathrm{p} \, \to \, \pi^{-}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Pseudorapidity $\eta$
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}\eta$ (mb)
+LegendXPos=0.4
+LegendYPos=0.4
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d05-x01-y01
+Title=NA22 $\pi^{+}+\mathrm{p} \, \to \, \mathrm{C}^{+}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Transverse momentum $p_{\rm{T}}^2$ (GeV$^{2}$c$^{-2}$))
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}p^{2}_{\rm{T}}$ (mb)
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d05-x01-y02
+Title=NA22 $\mathrm{K}^{+}+\mathrm{p} \, \to \, \mathrm{C}^{+}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Transverse momentum $p_{\rm{T}}^2$ (GeV$^{2}$c$^{-2}$))
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}p^{2}_{\rm{T}}$ (mb)
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d05-x01-y03
+Title=NA22 $\mathrm{p}+\mathrm{p} \, \to \, \mathrm{C}^{+}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Transverse momentum $p_{\rm{T}}^2$ (GeV$^{2}$c$^{-2}$))
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}p^{2}_{\rm{T}}$ (mb)
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d06-x01-y01
+Title=NA22 $\pi^{+}+\mathrm{p} \, \to \, \pi^{-}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Transverse momentum $p_{\rm{T}}^2$ (GeV$^{2}$c$^{-2}$)
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}p^{2}_{\rm{T}}$ (mb (GeV$c$^{-1}$)$^{-2}$)
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d06-x01-y02
+Title=NA22 $\mathrm{K}^{+}+\mathrm{p} \, \to \, \pi^{-}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Transverse momentum $p_{\rm{T}}^2$ (GeV$^{2}$c$^{-2}$)
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}p^{2}_{\rm{T}}$ (mb (GeV$c$^{-1}$)$^{-2}$)
+# END PLOT
+
+# BEGIN PLOT /EHS_1988_I265504/d06-x01-y03
+Title=NA22 $\mathrm{p}+\mathrm{p} \, \to \, \pi^{-}$ with $p_{\rm{Lab}}=250$ GeVc$^{-1}$
+XLabel=Transverse momentum $p_{\rm{T}}^2$ (GeV$^{2}$c$^{-2}$)
+YLabel=Cross section $\mathrm{d}\sigma / \mathrm{d}p^{2}_{\rm{T}}$ (mb (GeV$c$^{-1}$)$^{-2}$)
+# END PLOT
+
+# ... add more histograms as you need them ...
diff --git a/analyses/pluginMisc/EHS_1988_I265504.yoda b/analyses/pluginMisc/EHS_1988_I265504.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/EHS_1988_I265504.yoda
@@ -0,0 +1,909 @@
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d01-x01-y01
+Path=/REF/EHS_1988_I265504/d01-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-0.78	0.020000000000000018	0.020000000000000018			0.29	0.08	0.08
+-0.74	0.020000000000000018	0.020000000000000018			0.21	0.05	0.05
+-0.7	0.020000000000000018	0.019999999999999907			0.71	0.14	0.14
+-0.66	0.020000000000000018	0.020000000000000018			0.9	0.2	0.2
+-0.62	0.020000000000000018	0.020000000000000018			1.6	0.2	0.2
+-0.5800000000000001	0.019999999999999907	0.020000000000000018			2.7	0.3	0.3
+-0.54	0.020000000000000018	0.020000000000000018			3.1	0.4	0.4
+-0.5	0.020000000000000018	0.020000000000000018			4.3	0.5	0.5
+-0.45999999999999996	0.020000000000000018	0.019999999999999962			5.4	0.6	0.6
+-0.42000000000000004	0.019999999999999962	0.020000000000000018			7.3	0.6	0.6
+-0.38	0.020000000000000018	0.020000000000000018			9.9	0.7	0.7
+-0.33999999999999997	0.020000000000000018	0.019999999999999962			13.4	0.8	0.8
+-0.30000000000000004	0.019999999999999962	0.020000000000000018			19.1	1.0	1.0
+-0.26	0.020000000000000018	0.020000000000000018			27.2	1.0	1.0
+-0.22	0.01999999999999999	0.01999999999999999			37.7	1.0	1.0
+-0.18	0.020000000000000018	0.01999999999999999			51.8	1.2	1.2
+-0.14	0.01999999999999999	0.020000000000000018			80.1	1.4	1.4
+-0.1	0.01999999999999999	0.020000000000000004			125.5	1.6	1.6
+-0.06	0.020000000000000004	0.019999999999999997			226.0	2.0	2.0
+-0.02	0.02	0.02			495.0	3.0	3.0
+0.02	0.02	0.02			538.0	3.0	3.0
+0.06	0.019999999999999997	0.020000000000000004			258.0	2.0	2.0
+0.1	0.020000000000000004	0.01999999999999999			149.2	1.7	1.7
+0.14	0.020000000000000018	0.01999999999999999			97.4	1.3	1.3
+0.18	0.01999999999999999	0.020000000000000018			68.2	1.0	1.0
+0.22	0.01999999999999999	0.01999999999999999			51.6	0.9	0.9
+0.26	0.020000000000000018	0.020000000000000018			39.3	0.8	0.8
+0.30000000000000004	0.020000000000000018	0.019999999999999962			31.2	0.7	0.7
+0.33999999999999997	0.019999999999999962	0.020000000000000018			26.2	0.7	0.7
+0.38	0.020000000000000018	0.020000000000000018			20.0	0.6	0.6
+0.42000000000000004	0.020000000000000018	0.019999999999999962			16.4	0.6	0.6
+0.45999999999999996	0.019999999999999962	0.020000000000000018			14.7	0.6	0.6
+0.5	0.020000000000000018	0.020000000000000018			11.8	0.5	0.5
+0.54	0.020000000000000018	0.020000000000000018			11.4	0.5	0.5
+0.5800000000000001	0.020000000000000018	0.019999999999999907			9.5	0.5	0.5
+0.62	0.020000000000000018	0.020000000000000018			8.7	0.4	0.4
+0.66	0.020000000000000018	0.020000000000000018			7.2	0.4	0.4
+0.7	0.019999999999999907	0.020000000000000018			7.1	0.5	0.5
+0.74	0.020000000000000018	0.020000000000000018			6.3	0.5	0.5
+0.78	0.020000000000000018	0.020000000000000018			6.5	0.6	0.6
+0.8200000000000001	0.020000000000000018	0.019999999999999907			6.7	0.6	0.6
+0.86	0.020000000000000018	0.020000000000000018			7.0	0.7	0.7
+0.9	0.020000000000000018	0.020000000000000018			8.7	1.0	1.0
+0.94	0.019999999999999907	0.020000000000000018			11.2	1.5	1.5
+0.98	0.020000000000000018	0.020000000000000018			27.7	2.0	2.0
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d01-x01-y02
+Path=/REF/EHS_1988_I265504/d01-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-0.78	0.020000000000000018	0.020000000000000018			0.18	0.04	0.04
+-0.74	0.020000000000000018	0.020000000000000018			0.3	0.1	0.1
+-0.7	0.020000000000000018	0.019999999999999907			0.7	0.2	0.2
+-0.66	0.020000000000000018	0.020000000000000018			0.6	0.2	0.2
+-0.62	0.020000000000000018	0.020000000000000018			1.1	0.2	0.2
+-0.5800000000000001	0.019999999999999907	0.020000000000000018			1.7	0.2	0.2
+-0.54	0.020000000000000018	0.020000000000000018			2.3	0.2	0.2
+-0.5	0.020000000000000018	0.020000000000000018			3.2	0.2	0.2
+-0.45999999999999996	0.020000000000000018	0.019999999999999962			4.6	0.3	0.3
+-0.42000000000000004	0.019999999999999962	0.020000000000000018			5.7	0.3	0.3
+-0.38	0.020000000000000018	0.020000000000000018			8.4	0.4	0.4
+-0.33999999999999997	0.020000000000000018	0.019999999999999962			10.7	0.4	0.4
+-0.30000000000000004	0.019999999999999962	0.020000000000000018			15.6	0.5	0.5
+-0.26	0.020000000000000018	0.020000000000000018			21.5	0.6	0.6
+-0.22	0.01999999999999999	0.01999999999999999			29.7	0.6	0.6
+-0.18	0.020000000000000018	0.01999999999999999			41.9	0.7	0.7
+-0.14	0.01999999999999999	0.020000000000000018			65.3	0.9	0.9
+-0.1	0.01999999999999999	0.020000000000000004			102.9	1.2	1.2
+-0.06	0.020000000000000004	0.019999999999999997			193.0	2.0	2.0
+-0.02	0.02	0.02			424.0	2.0	2.0
+0.02	0.02	0.02			442.0	2.0	2.0
+0.06	0.019999999999999997	0.020000000000000004			211.0	2.0	2.0
+0.1	0.020000000000000004	0.01999999999999999			123.7	1.4	1.4
+0.14	0.020000000000000018	0.01999999999999999			81.3	1.1	1.1
+0.18	0.01999999999999999	0.020000000000000018			58.6	0.9	0.9
+0.22	0.01999999999999999	0.01999999999999999			44.6	0.8	0.8
+0.26	0.020000000000000018	0.020000000000000018			35.2	0.7	0.7
+0.30000000000000004	0.020000000000000018	0.019999999999999962			27.2	0.6	0.6
+0.33999999999999997	0.019999999999999962	0.020000000000000018			22.4	0.6	0.6
+0.38	0.020000000000000018	0.020000000000000018			18.3	0.5	0.5
+0.42000000000000004	0.020000000000000018	0.019999999999999962			14.6	0.4	0.4
+0.45999999999999996	0.019999999999999962	0.020000000000000018			12.2	0.4	0.4
+0.5	0.020000000000000018	0.020000000000000018			10.0	0.4	0.4
+0.54	0.020000000000000018	0.020000000000000018			8.5	0.4	0.4
+0.5800000000000001	0.020000000000000018	0.019999999999999907			7.1	0.4	0.4
+0.62	0.020000000000000018	0.020000000000000018			6.1	0.4	0.4
+0.66	0.020000000000000018	0.020000000000000018			5.9	0.4	0.4
+0.7	0.019999999999999907	0.020000000000000018			5.2	0.5	0.5
+0.74	0.020000000000000018	0.020000000000000018			4.7	0.5	0.5
+0.78	0.020000000000000018	0.020000000000000018			4.9	0.5	0.5
+0.8200000000000001	0.020000000000000018	0.019999999999999907			4.8	0.6	0.6
+0.86	0.020000000000000018	0.020000000000000018			5.4	0.6	0.6
+0.9	0.020000000000000018	0.020000000000000018			6.2	1.0	1.0
+0.94	0.019999999999999907	0.020000000000000018			10.9	1.4	1.4
+0.98	0.020000000000000018	0.020000000000000018			24.1	1.8	1.8
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d01-x01-y03
+Path=/REF/EHS_1988_I265504/d01-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-0.78	0.020000000000000018	0.020000000000000018			0.15	0.08	0.08
+-0.74	0.020000000000000018	0.020000000000000018			0.9	0.03	0.03
+-0.7	0.020000000000000018	0.019999999999999907			1.8	0.4	0.4
+-0.66	0.020000000000000018	0.020000000000000018			1.8	0.4	0.4
+-0.62	0.020000000000000018	0.020000000000000018			1.9	0.4	0.4
+-0.5800000000000001	0.019999999999999907	0.020000000000000018			3.3	0.5	0.5
+-0.54	0.020000000000000018	0.020000000000000018			3.5	0.5	0.5
+-0.5	0.020000000000000018	0.020000000000000018			7.2	0.7	0.7
+-0.45999999999999996	0.020000000000000018	0.019999999999999962			7.9	0.7	0.7
+-0.42000000000000004	0.019999999999999962	0.020000000000000018			10.7	0.9	0.9
+-0.38	0.020000000000000018	0.020000000000000018			14.5	1.0	1.0
+-0.33999999999999997	0.020000000000000018	0.019999999999999962			22.2	1.3	1.3
+-0.30000000000000004	0.019999999999999962	0.020000000000000018			23.8	1.3	1.3
+-0.26	0.020000000000000018	0.020000000000000018			38.6	1.6	1.6
+-0.22	0.01999999999999999	0.01999999999999999			56.0	2.0	2.0
+-0.18	0.020000000000000018	0.01999999999999999			74.0	2.0	2.0
+-0.14	0.01999999999999999	0.020000000000000018			115.0	3.0	3.0
+-0.1	0.01999999999999999	0.020000000000000004			191.0	4.0	4.0
+-0.06	0.020000000000000004	0.019999999999999997			341.0	5.0	5.0
+-0.02	0.02	0.02			772.0	7.0	7.0
+0.02	0.02	0.02			780.0	7.0	7.0
+0.06	0.019999999999999997	0.020000000000000004			346.0	5.0	5.0
+0.1	0.020000000000000004	0.01999999999999999			198.0	4.0	4.0
+0.14	0.020000000000000018	0.01999999999999999			122.0	3.0	3.0
+0.18	0.01999999999999999	0.020000000000000018			82.0	3.0	3.0
+0.22	0.01999999999999999	0.01999999999999999			67.0	2.0	2.0
+0.26	0.020000000000000018	0.020000000000000018			56.0	2.0	2.0
+0.30000000000000004	0.020000000000000018	0.019999999999999962			37.8	1.5	1.5
+0.33999999999999997	0.019999999999999962	0.020000000000000018			37.5	1.6	1.6
+0.38	0.020000000000000018	0.020000000000000018			36.2	1.6	1.6
+0.42000000000000004	0.020000000000000018	0.019999999999999962			30.8	1.4	1.4
+0.45999999999999996	0.019999999999999962	0.020000000000000018			29.0	1.4	1.4
+0.5	0.020000000000000018	0.020000000000000018			26.4	1.4	1.4
+0.54	0.020000000000000018	0.020000000000000018			23.2	1.3	1.3
+0.5800000000000001	0.020000000000000018	0.019999999999999907			20.1	1.2	1.2
+0.62	0.020000000000000018	0.020000000000000018			17.4	1.2	1.2
+0.66	0.020000000000000018	0.020000000000000018			14.4	1.1	1.1
+0.7	0.019999999999999907	0.020000000000000018			16.8	1.2	1.2
+0.74	0.020000000000000018	0.020000000000000018			18.9	1.4	1.4
+0.78	0.020000000000000018	0.020000000000000018			15.7	1.3	1.3
+0.8200000000000001	0.020000000000000018	0.019999999999999907			15.5	1.3	1.3
+0.86	0.020000000000000018	0.020000000000000018			17.2	1.5	1.5
+0.9	0.020000000000000018	0.020000000000000018			19.6	1.9	1.9
+0.94	0.019999999999999907	0.020000000000000018			24.0	3.0	3.0
+0.98	0.020000000000000018	0.020000000000000018			46.0	3.0	3.0
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d02-x01-y01
+Path=/REF/EHS_1988_I265504/d02-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-0.78	0.020000000000000018	0.020000000000000018			0.022	0.014	0.014
+-0.74	0.020000000000000018	0.020000000000000018			0.1	0.04	0.04
+-0.7	0.020000000000000018	0.019999999999999907			0.09	0.04	0.04
+-0.66	0.020000000000000018	0.020000000000000018			0.28	0.05	0.05
+-0.62	0.020000000000000018	0.020000000000000018			0.25	0.05	0.05
+-0.5800000000000001	0.019999999999999907	0.020000000000000018			0.53	0.07	0.07
+-0.54	0.020000000000000018	0.020000000000000018			0.58	0.08	0.08
+-0.5	0.020000000000000018	0.020000000000000018			1.22	0.12	0.12
+-0.45999999999999996	0.020000000000000018	0.019999999999999962			1.26	0.12	0.12
+-0.42000000000000004	0.019999999999999962	0.020000000000000018			2.36	0.19	0.19
+-0.38	0.020000000000000018	0.020000000000000018			2.9	0.2	0.2
+-0.33999999999999997	0.020000000000000018	0.019999999999999962			4.7	0.3	0.3
+-0.30000000000000004	0.019999999999999962	0.020000000000000018			6.5	0.3	0.3
+-0.26	0.020000000000000018	0.020000000000000018			10.7	0.4	0.4
+-0.22	0.01999999999999999	0.01999999999999999			15.7	0.5	0.5
+-0.18	0.020000000000000018	0.01999999999999999			23.1	0.6	0.6
+-0.14	0.01999999999999999	0.020000000000000018			40.0	0.8	0.8
+-0.1	0.01999999999999999	0.020000000000000004			70.9	1.2	1.2
+-0.06	0.020000000000000004	0.019999999999999997			147.7	1.7	1.7
+-0.02	0.02	0.02			391.0	2.9	2.9
+0.02	0.02	0.02			422.9	3.0	3.0
+0.06	0.019999999999999997	0.020000000000000004			189.3	1.9	1.9
+0.1	0.020000000000000004	0.01999999999999999			102.8	1.4	1.4
+0.14	0.020000000000000018	0.01999999999999999			62.7	1.0	1.0
+0.18	0.01999999999999999	0.020000000000000018			42.5	0.9	0.9
+0.22	0.01999999999999999	0.01999999999999999			29.1	0.7	0.7
+0.26	0.020000000000000018	0.020000000000000018			20.3	0.6	0.6
+0.30000000000000004	0.020000000000000018	0.019999999999999962			15.1	0.5	0.5
+0.33999999999999997	0.019999999999999962	0.020000000000000018			10.2	0.4	0.4
+0.38	0.020000000000000018	0.020000000000000018			8.0	0.4	0.4
+0.42000000000000004	0.020000000000000018	0.019999999999999962			5.6	0.3	0.3
+0.45999999999999996	0.019999999999999962	0.020000000000000018			4.8	0.3	0.3
+0.5	0.020000000000000018	0.020000000000000018			4.0	0.3	0.3
+0.54	0.020000000000000018	0.020000000000000018			3.4	0.2	0.2
+0.5800000000000001	0.020000000000000018	0.019999999999999907			2.6	0.2	0.2
+0.62	0.020000000000000018	0.020000000000000018			1.76	0.17	0.17
+0.66	0.020000000000000018	0.020000000000000018			1.7	0.17	0.17
+0.7	0.019999999999999907	0.020000000000000018			1.18	0.16	0.16
+0.74	0.020000000000000018	0.020000000000000018			1.04	0.16	0.16
+0.78	0.020000000000000018	0.020000000000000018			0.49	0.12	0.12
+0.8200000000000001	0.020000000000000018	0.019999999999999907			0.6	0.15	0.15
+0.86	0.020000000000000018	0.020000000000000018			0.44	0.12	0.12
+0.9	0.020000000000000018	0.020000000000000018			0.23	0.1	0.1
+0.94	0.019999999999999907	0.020000000000000018			0.06	0.04	0.04
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d02-x01-y02
+Path=/REF/EHS_1988_I265504/d02-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-0.78	0.020000000000000018	0.020000000000000018			0.05	0.02	0.02
+-0.74	0.020000000000000018	0.020000000000000018			0.07	0.02	0.02
+-0.7	0.020000000000000018	0.019999999999999907			0.06	0.02	0.02
+-0.66	0.020000000000000018	0.020000000000000018			0.16	0.04	0.04
+-0.62	0.020000000000000018	0.020000000000000018			0.23	0.04	0.04
+-0.5800000000000001	0.019999999999999907	0.020000000000000018			0.26	0.04	0.04
+-0.54	0.020000000000000018	0.020000000000000018			0.63	0.08	0.08
+-0.5	0.020000000000000018	0.020000000000000018			0.79	0.08	0.08
+-0.45999999999999996	0.020000000000000018	0.019999999999999962			1.14	0.1	0.1
+-0.42000000000000004	0.019999999999999962	0.020000000000000018			1.71	0.14	0.14
+-0.38	0.020000000000000018	0.020000000000000018			2.58	0.19	0.19
+-0.33999999999999997	0.020000000000000018	0.019999999999999962			3.5	0.2	0.2
+-0.30000000000000004	0.019999999999999962	0.020000000000000018			5.2	0.3	0.3
+-0.26	0.020000000000000018	0.020000000000000018			7.5	0.3	0.3
+-0.22	0.01999999999999999	0.01999999999999999			12.4	0.4	0.4
+-0.18	0.020000000000000018	0.01999999999999999			18.8	0.5	0.5
+-0.14	0.01999999999999999	0.020000000000000018			34.1	0.7	0.7
+-0.1	0.01999999999999999	0.020000000000000004			61.0	1.0	1.0
+-0.06	0.020000000000000004	0.019999999999999997			129.6	1.5	1.5
+-0.02	0.02	0.02			331.8	2.7	2.7
+0.02	0.02	0.02			363.7	2.6	2.6
+0.06	0.019999999999999997	0.020000000000000004			160.1	1.6	1.6
+0.1	0.020000000000000004	0.01999999999999999			82.4	1.2	1.2
+0.14	0.020000000000000018	0.01999999999999999			50.2	0.9	0.9
+0.18	0.01999999999999999	0.020000000000000018			33.2	0.7	0.7
+0.22	0.01999999999999999	0.01999999999999999			21.3	0.6	0.6
+0.26	0.020000000000000018	0.020000000000000018			14.9	0.4	0.4
+0.30000000000000004	0.020000000000000018	0.019999999999999962			10.1	0.4	0.4
+0.33999999999999997	0.019999999999999962	0.020000000000000018			7.3	0.3	0.3
+0.38	0.020000000000000018	0.020000000000000018			5.4	0.2	0.2
+0.42000000000000004	0.020000000000000018	0.019999999999999962			4.0	0.2	0.2
+0.45999999999999996	0.019999999999999962	0.020000000000000018			3.0	0.2	0.2
+0.5	0.020000000000000018	0.020000000000000018			2.1	0.2	0.2
+0.54	0.020000000000000018	0.020000000000000018			1.67	0.16	0.16
+0.5800000000000001	0.020000000000000018	0.019999999999999907			1.0	0.12	0.12
+0.62	0.020000000000000018	0.020000000000000018			0.6	0.09	0.09
+0.66	0.020000000000000018	0.020000000000000018			0.6	0.09	0.09
+0.7	0.019999999999999907	0.020000000000000018			0.43	0.07	0.07
+0.74	0.020000000000000018	0.020000000000000018			0.25	0.06	0.06
+0.78	0.020000000000000018	0.020000000000000018			0.15	0.05	0.05
+0.8200000000000001	0.020000000000000018	0.019999999999999907			0.16	0.06	0.06
+0.86	0.020000000000000018	0.020000000000000018			0.06	0.03	0.03
+0.9	0.020000000000000018	0.020000000000000018			0.03	0.02	0.02
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d02-x01-y03
+Path=/REF/EHS_1988_I265504/d02-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+							
+							
+-0.7	0.020000000000000018	0.019999999999999907			0.09	0.09	0.09
+							
+-0.62	0.020000000000000018	0.020000000000000018			0.21	0.21	0.21
+-0.5800000000000001	0.019999999999999907	0.020000000000000018			1.2	0.3	0.3
+-0.54	0.020000000000000018	0.020000000000000018			1.2	0.3	0.3
+-0.5	0.020000000000000018	0.020000000000000018			1.7	0.3	0.3
+-0.45999999999999996	0.020000000000000018	0.019999999999999962			2.9	0.4	0.4
+-0.42000000000000004	0.019999999999999962	0.020000000000000018			3.1	0.4	0.4
+-0.38	0.020000000000000018	0.020000000000000018			4.4	0.5	0.5
+-0.33999999999999997	0.020000000000000018	0.019999999999999962			5.6	0.6	0.6
+-0.30000000000000004	0.019999999999999962	0.020000000000000018			8.8	0.7	0.7
+-0.26	0.020000000000000018	0.020000000000000018			15.3	1.0	1.0
+-0.22	0.01999999999999999	0.01999999999999999			22.8	1.2	1.2
+-0.18	0.020000000000000018	0.01999999999999999			35.0	1.5	1.5
+-0.14	0.01999999999999999	0.020000000000000018			64.0	2.0	2.0
+-0.1	0.01999999999999999	0.020000000000000004			114.0	3.0	3.0
+-0.06	0.020000000000000004	0.019999999999999997			227.0	4.0	4.0
+-0.02	0.02	0.02			634.0	7.0	7.0
+0.02	0.02	0.02			648.0	7.0	7.0
+0.06	0.019999999999999997	0.020000000000000004			259.0	4.0	4.0
+0.1	0.020000000000000004	0.01999999999999999			126.0	3.0	3.0
+0.14	0.020000000000000018	0.01999999999999999			74.0	2.0	2.0
+0.18	0.01999999999999999	0.020000000000000018			44.5	1.6	1.6
+0.22	0.01999999999999999	0.01999999999999999			29.1	1.3	1.3
+0.26	0.020000000000000018	0.020000000000000018			16.8	0.9	0.9
+0.30000000000000004	0.020000000000000018	0.019999999999999962			11.2	0.8	0.8
+0.33999999999999997	0.019999999999999962	0.020000000000000018			6.6	0.6	0.6
+0.38	0.020000000000000018	0.020000000000000018			5.6	0.5	0.5
+0.42000000000000004	0.020000000000000018	0.019999999999999962			5.9	0.6	0.6
+0.45999999999999996	0.019999999999999962	0.020000000000000018			1.5	0.3	0.3
+0.5	0.020000000000000018	0.020000000000000018			1.3	0.3	0.3
+0.54	0.020000000000000018	0.020000000000000018			1.8	0.3	0.3
+0.5800000000000001	0.020000000000000018	0.019999999999999907			0.32	0.12	0.12
+0.62	0.020000000000000018	0.020000000000000018			0.32	0.12	0.12
+0.66	0.020000000000000018	0.020000000000000018			0.47	0.15	0.15
+0.7	0.019999999999999907	0.020000000000000018			0.31	0.12	0.12
+							
+							
+							
+							
+							
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d03-x01-y01
+Path=/REF/EHS_1988_I265504/d03-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-5.8	0.20000000000000018	0.20000000000000018			0.03	0.007	0.007
+-5.4	0.1999999999999993	0.20000000000000018			0.047	0.008	0.008
+-5.0	0.20000000000000018	0.20000000000000018			0.108	0.013	0.013
+-4.6	0.20000000000000018	0.1999999999999993			0.298	0.021	0.021
+-4.2	0.20000000000000018	0.20000000000000018			0.64	0.03	0.03
+-3.8	0.20000000000000018	0.19999999999999973			1.18	0.04	0.04
+-3.4000000000000004	0.19999999999999973	0.20000000000000018			2.01	0.06	0.06
+-3.0	0.20000000000000018	0.20000000000000018			4.52	0.09	0.09
+-2.5999999999999996	0.20000000000000018	0.19999999999999973			7.89	0.15	0.15
+-2.2	0.19999999999999973	0.20000000000000018			12.1	0.26	0.26
+-1.9	0.10000000000000009	0.09999999999999987			15.21	0.35	0.35
+-1.7000000000000002	0.09999999999999987	0.10000000000000009			16.2	0.36	0.36
+-1.5	0.10000000000000009	0.10000000000000009			16.82	0.36	0.36
+-1.2999999999999998	0.10000000000000009	0.09999999999999987			17.54	0.36	0.36
+-1.1	0.09999999999999987	0.10000000000000009			17.55	0.35	0.35
+-0.9	0.09999999999999998	0.09999999999999998			16.53	0.35	0.35
+-0.7	0.10000000000000009	0.09999999999999998			17.17	0.35	0.35
+-0.5	0.09999999999999998	0.09999999999999998			16.64	0.35	0.35
+-0.30000000000000004	0.09999999999999998	0.10000000000000003			16.24	0.35	0.35
+-0.1	0.1	0.1			16.44	0.25	0.25
+0.1	0.1	0.1			17.6	0.27	0.27
+0.30000000000000004	0.10000000000000003	0.09999999999999998			17.44	0.26	0.26
+0.5	0.09999999999999998	0.09999999999999998			17.47	0.26	0.26
+0.7	0.09999999999999998	0.10000000000000009			18.25	0.27	0.27
+0.9	0.09999999999999998	0.09999999999999998			18.24	0.26	0.26
+1.1	0.10000000000000009	0.09999999999999987			18.32	0.27	0.27
+1.2999999999999998	0.09999999999999987	0.10000000000000009			19.0	0.27	0.27
+1.5	0.10000000000000009	0.10000000000000009			18.64	0.26	0.26
+1.7000000000000002	0.10000000000000009	0.09999999999999987			18.7	0.27	0.27
+1.9	0.09999999999999987	0.10000000000000009			17.72	0.26	0.26
+2.2	0.20000000000000018	0.19999999999999973			15.83	0.17	0.17
+2.5999999999999996	0.19999999999999973	0.20000000000000018			12.08	0.15	0.15
+3.0	0.20000000000000018	0.20000000000000018			8.51	0.12	0.12
+3.4000000000000004	0.20000000000000018	0.19999999999999973			6.17	0.1	0.1
+3.8	0.19999999999999973	0.20000000000000018			4.43	0.08	0.08
+4.2	0.20000000000000018	0.20000000000000018			2.86	0.07	0.07
+4.6	0.1999999999999993	0.20000000000000018			1.39	0.05	0.05
+5.0	0.20000000000000018	0.20000000000000018			0.64	0.04	0.04
+5.4	0.20000000000000018	0.1999999999999993			0.287	0.022	0.022
+5.8	0.20000000000000018	0.20000000000000018			0.147	0.015	0.015
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d03-x01-y02
+Path=/REF/EHS_1988_I265504/d03-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-5.8	0.20000000000000018	0.20000000000000018			0.022	0.005	0.005
+-5.4	0.1999999999999993	0.20000000000000018			0.077	0.013	0.013
+-5.0	0.20000000000000018	0.20000000000000018			0.102	0.01	0.01
+-4.6	0.20000000000000018	0.1999999999999993			0.215	0.015	0.015
+-4.2	0.20000000000000018	0.20000000000000018			0.5	0.03	0.03
+-3.8	0.20000000000000018	0.19999999999999973			1.01	0.03	0.03
+-3.4000000000000004	0.19999999999999973	0.20000000000000018			1.64	0.04	0.04
+-3.0	0.20000000000000018	0.20000000000000018			3.53	0.07	0.07
+-2.5999999999999996	0.20000000000000018	0.19999999999999973			6.16	0.1	0.1
+-2.2	0.19999999999999973	0.20000000000000018			9.42	0.12	0.12
+-1.9	0.10000000000000009	0.09999999999999987			11.96	0.2	0.2
+-1.7000000000000002	0.09999999999999987	0.10000000000000009			13.21	0.2	0.2
+-1.5	0.10000000000000009	0.10000000000000009			13.85	0.21	0.21
+-1.2999999999999998	0.10000000000000009	0.09999999999999987			14.86	0.22	0.22
+-1.1	0.09999999999999987	0.10000000000000009			14.7	0.21	0.21
+-0.9	0.09999999999999998	0.09999999999999998			14.9	0.22	0.22
+-0.7	0.10000000000000009	0.09999999999999998			14.51	0.21	0.21
+-0.5	0.09999999999999998	0.09999999999999998			14.43	0.21	0.21
+-0.30000000000000004	0.09999999999999998	0.10000000000000003			14.79	0.22	0.22
+-0.1	0.1	0.1			14.62	0.22	0.22
+0.1	0.1	0.1			14.62	0.22	0.22
+0.30000000000000004	0.10000000000000003	0.09999999999999998			14.79	0.22	0.22
+0.5	0.09999999999999998	0.09999999999999998			14.87	0.23	0.23
+0.7	0.09999999999999998	0.10000000000000009			15.19	0.22	0.22
+0.9	0.09999999999999998	0.09999999999999998			15.65	0.23	0.23
+1.1	0.10000000000000009	0.09999999999999987			15.56	0.23	0.23
+1.2999999999999998	0.09999999999999987	0.10000000000000009			15.48	0.22	0.22
+1.5	0.10000000000000009	0.10000000000000009			15.71	0.23	0.23
+1.7000000000000002	0.10000000000000009	0.09999999999999987			15.47	0.22	0.22
+1.9	0.09999999999999987	0.10000000000000009			14.38	0.22	0.22
+2.2	0.20000000000000018	0.19999999999999973			12.72	0.14	0.14
+2.5999999999999996	0.19999999999999973	0.20000000000000018			10.21	0.12	0.12
+3.0	0.20000000000000018	0.20000000000000018			7.19	0.1	0.1
+3.4000000000000004	0.20000000000000018	0.19999999999999973			5.33	0.09	0.09
+3.8	0.19999999999999973	0.20000000000000018			3.51	0.07	0.07
+4.2	0.20000000000000018	0.20000000000000018			2.03	0.05	0.05
+4.6	0.1999999999999993	0.20000000000000018			1.04	0.04	0.04
+5.0	0.20000000000000018	0.20000000000000018			0.451	0.024	0.024
+5.4	0.20000000000000018	0.1999999999999993			0.204	0.017	0.017
+5.8	0.20000000000000018	0.20000000000000018			0.08	0.009	0.009
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d03-x01-y03
+Path=/REF/EHS_1988_I265504/d03-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-5.8	0.20000000000000018	0.20000000000000018			0.015	0.009	0.009
+-5.4	0.1999999999999993	0.20000000000000018			0.082	0.022	0.022
+-5.0	0.20000000000000018	0.20000000000000018			0.31	0.05	0.05
+-4.6	0.20000000000000018	0.1999999999999993			0.56	0.06	0.06
+-4.2	0.20000000000000018	0.20000000000000018			0.86	0.07	0.07
+-3.8	0.20000000000000018	0.19999999999999973			1.48	0.09	0.09
+-3.4000000000000004	0.19999999999999973	0.20000000000000018			2.87	0.13	0.13
+-3.0	0.20000000000000018	0.20000000000000018			5.84	0.2	0.2
+-2.5999999999999996	0.20000000000000018	0.19999999999999973			10.8	0.3	0.3
+-2.2	0.19999999999999973	0.20000000000000018			16.9	0.3	0.3
+-1.9	0.10000000000000009	0.09999999999999987			21.7	0.5	0.5
+-1.7000000000000002	0.09999999999999987	0.10000000000000009			22.6	0.6	0.6
+-1.5	0.10000000000000009	0.10000000000000009			25.6	0.6	0.6
+-1.2999999999999998	0.10000000000000009	0.09999999999999987			26.5	0.6	0.6
+-1.1	0.09999999999999987	0.10000000000000009			25.6	0.6	0.6
+-0.9	0.09999999999999998	0.09999999999999998			28.6	0.6	0.6
+-0.7	0.10000000000000009	0.09999999999999998			28.6	0.6	0.6
+-0.5	0.09999999999999998	0.09999999999999998			27.0	0.6	0.6
+-0.30000000000000004	0.09999999999999998	0.10000000000000003			26.6	0.6	0.6
+-0.1	0.1	0.1			25.8	0.6	0.6
+0.1	0.1	0.1			24.6	0.6	0.6
+0.30000000000000004	0.10000000000000003	0.09999999999999998			26.7	0.6	0.6
+0.5	0.09999999999999998	0.09999999999999998			25.9	0.6	0.6
+0.7	0.09999999999999998	0.10000000000000009			27.2	0.6	0.6
+0.9	0.09999999999999998	0.09999999999999998			26.2	0.6	0.6
+1.1	0.10000000000000009	0.09999999999999987			25.5	0.6	0.6
+1.2999999999999998	0.09999999999999987	0.10000000000000009			25.5	0.6	0.6
+1.5	0.10000000000000009	0.10000000000000009			25.2	0.6	0.6
+1.7000000000000002	0.10000000000000009	0.09999999999999987			22.3	0.5	0.5
+1.9	0.09999999999999987	0.10000000000000009			23.3	0.5	0.5
+2.2	0.20000000000000018	0.19999999999999973			21.0	0.4	0.4
+2.5999999999999996	0.19999999999999973	0.20000000000000018			16.2	0.3	0.3
+3.0	0.20000000000000018	0.20000000000000018			13.0	0.3	0.3
+3.4000000000000004	0.20000000000000018	0.19999999999999973			10.5	0.3	0.3
+3.8	0.19999999999999973	0.20000000000000018			9.69	0.27	0.27
+4.2	0.20000000000000018	0.20000000000000018			6.2	0.23	0.23
+4.6	0.1999999999999993	0.20000000000000018			2.87	0.16	0.16
+5.0	0.20000000000000018	0.20000000000000018			1.53	0.12	0.12
+5.4	0.20000000000000018	0.1999999999999993			0.6	0.07	0.07
+5.8	0.20000000000000018	0.20000000000000018			0.19	0.04	0.04
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d04-x01-y01
+Path=/REF/EHS_1988_I265504/d04-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-5.8	0.20000000000000018	0.20000000000000018			0.022	0.007	0.007
+-5.4	0.1999999999999993	0.20000000000000018			0.036	0.009	0.009
+-5.0	0.20000000000000018	0.20000000000000018			0.047	0.009	0.009
+-4.6	0.20000000000000018	0.1999999999999993			0.135	0.015	0.015
+-4.2	0.20000000000000018	0.20000000000000018			0.306	0.025	0.025
+-3.8	0.20000000000000018	0.19999999999999973			0.502	0.026	0.026
+-3.4000000000000004	0.19999999999999973	0.20000000000000018			0.94	0.04	0.04
+-3.0	0.20000000000000018	0.20000000000000018			2.25	0.06	0.06
+-2.5999999999999996	0.20000000000000018	0.19999999999999973			3.98	0.09	0.09
+-2.2	0.19999999999999973	0.20000000000000018			6.47	0.12	0.12
+-1.9	0.10000000000000009	0.09999999999999987			8.1	0.18	0.18
+-1.7000000000000002	0.09999999999999987	0.10000000000000009			9.44	0.2	0.2
+-1.5	0.10000000000000009	0.10000000000000009			9.93	0.2	0.2
+-1.2999999999999998	0.10000000000000009	0.09999999999999987			10.62	0.2	0.2
+-1.1	0.09999999999999987	0.10000000000000009			11.37	0.22	0.22
+-0.9	0.09999999999999998	0.09999999999999998			12.31	0.22	0.22
+-0.7	0.10000000000000009	0.09999999999999998			12.49	0.22	0.22
+-0.5	0.09999999999999998	0.09999999999999998			13.01	0.23	0.23
+-0.30000000000000004	0.09999999999999998	0.10000000000000003			13.52	0.23	0.23
+-0.1	0.1	0.1			13.84	0.24	0.24
+0.1	0.1	0.1			13.27	0.23	0.23
+0.30000000000000004	0.10000000000000003	0.09999999999999998			13.5	0.24	0.24
+0.5	0.09999999999999998	0.09999999999999998			13.85	0.24	0.24
+0.7	0.09999999999999998	0.10000000000000009			14.61	0.25	0.25
+0.9	0.09999999999999998	0.09999999999999998			13.65	0.23	0.23
+1.1	0.10000000000000009	0.09999999999999987			13.4	0.22	0.22
+1.2999999999999998	0.09999999999999987	0.10000000000000009			14.0	0.23	0.23
+1.5	0.10000000000000009	0.10000000000000009			13.01	0.23	0.23
+1.7000000000000002	0.10000000000000009	0.09999999999999987			12.43	0.22	0.22
+1.9	0.09999999999999987	0.10000000000000009			11.18	0.2	0.2
+2.2	0.20000000000000018	0.19999999999999973			9.89	0.14	0.14
+2.5999999999999996	0.19999999999999973	0.20000000000000018			7.03	0.11	0.11
+3.0	0.20000000000000018	0.20000000000000018			4.44	0.08	0.08
+3.4000000000000004	0.20000000000000018	0.19999999999999973			2.51	0.06	0.06
+3.8	0.19999999999999973	0.20000000000000018			1.38	0.05	0.05
+4.2	0.20000000000000018	0.20000000000000018			0.68	0.03	0.03
+4.6	0.1999999999999993	0.20000000000000018			0.402	0.029	0.029
+5.0	0.20000000000000018	0.20000000000000018			0.165	0.017	0.017
+5.4	0.20000000000000018	0.1999999999999993			0.087	0.013	0.013
+5.8	0.20000000000000018	0.20000000000000018			0.028	0.009	0.009
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d04-x01-y02
+Path=/REF/EHS_1988_I265504/d04-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-5.8	0.20000000000000018	0.20000000000000018			0.013	0.004	0.004
+-5.4	0.1999999999999993	0.20000000000000018			0.047	0.009	0.009
+-5.0	0.20000000000000018	0.20000000000000018			0.063	0.009	0.009
+-4.6	0.20000000000000018	0.1999999999999993			0.131	0.013	0.013
+-4.2	0.20000000000000018	0.20000000000000018			0.258	0.017	0.017
+-3.8	0.20000000000000018	0.19999999999999973			0.453	0.023	0.023
+-3.4000000000000004	0.19999999999999973	0.20000000000000018			0.84	0.03	0.03
+-3.0	0.20000000000000018	0.20000000000000018			1.85	0.05	0.05
+-2.5999999999999996	0.20000000000000018	0.19999999999999973			3.32	0.07	0.07
+-2.2	0.19999999999999973	0.20000000000000018			5.32	0.09	0.09
+-1.9	0.10000000000000009	0.09999999999999987			6.68	0.15	0.15
+-1.7000000000000002	0.09999999999999987	0.10000000000000009			7.68	0.17	0.17
+-1.5	0.10000000000000009	0.10000000000000009			8.41	0.17	0.17
+-1.2999999999999998	0.10000000000000009	0.09999999999999987			9.32	0.18	0.18
+-1.1	0.09999999999999987	0.10000000000000009			9.95	0.18	0.18
+-0.9	0.09999999999999998	0.09999999999999998			10.56	0.19	0.19
+-0.7	0.10000000000000009	0.09999999999999998			10.92	0.19	0.19
+-0.5	0.09999999999999998	0.09999999999999998			10.95	0.19	0.19
+-0.30000000000000004	0.09999999999999998	0.10000000000000003			11.61	0.2	0.2
+-0.1	0.1	0.1			11.62	0.2	0.2
+0.1	0.1	0.1			11.78	0.2	0.2
+0.30000000000000004	0.10000000000000003	0.09999999999999998			12.15	0.21	0.21
+0.5	0.09999999999999998	0.09999999999999998			12.04	0.2	0.2
+0.7	0.09999999999999998	0.10000000000000009			11.85	0.2	0.2
+0.9	0.09999999999999998	0.09999999999999998			11.89	0.2	0.2
+1.1	0.10000000000000009	0.09999999999999987			11.79	0.2	0.2
+1.2999999999999998	0.09999999999999987	0.10000000000000009			11.62	0.2	0.2
+1.5	0.10000000000000009	0.10000000000000009			11.33	0.19	0.19
+1.7000000000000002	0.10000000000000009	0.09999999999999987			10.14	0.18	0.18
+1.9	0.09999999999999987	0.10000000000000009			9.45	0.18	0.18
+2.2	0.20000000000000018	0.19999999999999973			7.54	0.1	0.1
+2.5999999999999996	0.19999999999999973	0.20000000000000018			5.24	0.07	0.07
+3.0	0.20000000000000018	0.20000000000000018			3.1	0.06	0.06
+3.4000000000000004	0.20000000000000018	0.19999999999999973			1.73	0.05	0.05
+3.8	0.19999999999999973	0.20000000000000018			0.86	0.03	0.03
+4.2	0.20000000000000018	0.20000000000000018			0.412	0.021	0.021
+4.6	0.1999999999999993	0.20000000000000018			0.202	0.015	0.015
+5.0	0.20000000000000018	0.20000000000000018			0.082	0.009	0.009
+5.4	0.20000000000000018	0.1999999999999993			0.039	0.008	0.008
+5.8	0.20000000000000018	0.20000000000000018			0.02	0.005	0.005
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d04-x01-y03
+Path=/REF/EHS_1988_I265504/d04-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+-5.8	0.20000000000000018	0.20000000000000018			0.019	0.012	0.012
+							
+-5.0	0.20000000000000018	0.20000000000000018			0.071	0.021	0.021
+-4.6	0.20000000000000018	0.1999999999999993			0.079	0.02	0.02
+-4.2	0.20000000000000018	0.20000000000000018			0.4	0.05	0.05
+-3.8	0.20000000000000018	0.19999999999999973			0.82	0.07	0.07
+-3.4000000000000004	0.19999999999999973	0.20000000000000018			1.56	0.1	0.1
+-3.0	0.20000000000000018	0.20000000000000018			2.98	0.14	0.14
+-2.5999999999999996	0.20000000000000018	0.19999999999999973			6.94	0.22	0.22
+-2.2	0.19999999999999973	0.20000000000000018			10.28	0.27	0.27
+-1.9	0.10000000000000009	0.09999999999999987			11.78	0.4	0.4
+-1.7000000000000002	0.09999999999999987	0.10000000000000009			13.13	0.42	0.42
+-1.5	0.10000000000000009	0.10000000000000009			15.14	0.45	0.45
+-1.2999999999999998	0.10000000000000009	0.09999999999999987			17.75	0.49	0.49
+-1.1	0.09999999999999987	0.10000000000000009			18.44	0.51	0.51
+-0.9	0.09999999999999998	0.09999999999999998			19.82	0.52	0.52
+-0.7	0.10000000000000009	0.09999999999999998			20.14	0.53	0.53
+-0.5	0.09999999999999998	0.09999999999999998			22.55	0.56	0.56
+-0.30000000000000004	0.09999999999999998	0.10000000000000003			21.41	0.54	0.54
+-0.1	0.1	0.1			22.26	0.56	0.56
+0.1	0.1	0.1			20.3	0.53	0.53
+0.30000000000000004	0.10000000000000003	0.09999999999999998			21.84	0.55	0.55
+0.5	0.09999999999999998	0.09999999999999998			21.32	0.54	0.54
+0.7	0.09999999999999998	0.10000000000000009			22.52	0.56	0.56
+0.9	0.09999999999999998	0.09999999999999998			21.87	0.55	0.55
+1.1	0.10000000000000009	0.09999999999999987			20.38	0.51	0.51
+1.2999999999999998	0.09999999999999987	0.10000000000000009			18.53	0.48	0.48
+1.5	0.10000000000000009	0.10000000000000009			16.34	0.45	0.45
+1.7000000000000002	0.10000000000000009	0.09999999999999987			16.05	0.45	0.45
+1.9	0.09999999999999987	0.10000000000000009			14.44	0.42	0.42
+2.2	0.20000000000000018	0.19999999999999973			11.12	0.26	0.26
+2.5999999999999996	0.19999999999999973	0.20000000000000018			7.16	0.2	0.2
+3.0	0.20000000000000018	0.20000000000000018			4.17	0.15	0.15
+3.4000000000000004	0.20000000000000018	0.19999999999999973			2.08	0.11	0.11
+3.8	0.19999999999999973	0.20000000000000018			1.16	0.08	0.08
+4.2	0.20000000000000018	0.20000000000000018			0.51	0.05	0.05
+4.6	0.1999999999999993	0.20000000000000018			0.3	0.04	0.04
+5.0	0.20000000000000018	0.20000000000000018			0.062	0.018	0.018
+5.4	0.20000000000000018	0.1999999999999993			0.032	0.013	0.013
+5.8	0.20000000000000018	0.20000000000000018			0.014	0.013	0.013
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d05-x01-y01
+Path=/REF/EHS_1988_I265504/d05-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.01	0.01	0.01			734.0	5.0	5.0
+0.03	0.009999999999999998	0.010000000000000002			577.0	4.0	4.0
+0.05	0.010000000000000002	0.009999999999999995			473.0	4.0	4.0
+0.07	0.010000000000000009	0.009999999999999995			378.0	4.0	4.0
+0.09	0.009999999999999995	0.010000000000000009			316.0	4.0	4.0
+0.11	0.009999999999999995	0.009999999999999995			263.0	3.0	3.0
+0.13	0.010000000000000009	0.010000000000000009			227.0	3.0	3.0
+0.15000000000000002	0.010000000000000009	0.009999999999999981			196.0	3.0	3.0
+0.16999999999999998	0.009999999999999981	0.010000000000000009			165.0	3.0	3.0
+0.19	0.010000000000000009	0.010000000000000009			148.0	2.0	2.0
+0.225	0.024999999999999994	0.024999999999999994			120.0	1.0	1.0
+0.275	0.025000000000000022	0.024999999999999967			91.0	1.0	1.0
+0.32499999999999996	0.024999999999999967	0.025000000000000022			70.0	1.0	1.0
+0.375	0.025000000000000022	0.025000000000000022			56.0	1.0	1.0
+0.42500000000000004	0.025000000000000022	0.024999999999999967			44.9	0.9	0.9
+0.475	0.024999999999999967	0.025000000000000022			36.8	0.8	0.8
+0.525	0.025000000000000022	0.025000000000000022			31.3	0.8	0.8
+0.575	0.02499999999999991	0.025000000000000022			26.3	0.7	0.7
+0.625	0.025000000000000022	0.025000000000000022			20.3	0.6	0.6
+0.675	0.025000000000000022	0.02499999999999991			18.2	0.6	0.6
+0.725	0.025000000000000022	0.025000000000000022			16.3	0.6	0.6
+0.775	0.025000000000000022	0.025000000000000022			12.9	0.5	0.5
+0.825	0.02499999999999991	0.025000000000000022			11.3	0.5	0.5
+0.875	0.025000000000000022	0.025000000000000022			9.2	0.4	0.4
+0.925	0.025000000000000022	0.02499999999999991			8.6	0.4	0.4
+0.975	0.025000000000000022	0.025000000000000022			7.5	0.4	0.4
+1.05	0.050000000000000044	0.050000000000000044			5.6	0.3	0.3
+1.15	0.04999999999999982	0.050000000000000044			4.6	0.2	0.2
+1.25	0.050000000000000044	0.050000000000000044			3.19	0.16	0.16
+1.35	0.050000000000000044	0.04999999999999982			2.99	0.17	0.17
+1.45	0.050000000000000044	0.050000000000000044			2.07	0.13	0.13
+1.55	0.050000000000000044	0.050000000000000044			1.85	0.13	0.13
+1.65	0.04999999999999982	0.050000000000000044			1.48	0.12	0.12
+1.75	0.050000000000000044	0.050000000000000044			1.37	0.12	0.12
+1.85	0.050000000000000044	0.04999999999999982			0.92	0.08	0.08
+1.95	0.050000000000000044	0.050000000000000044			0.75	0.08	0.08
+2.1	0.10000000000000009	0.10000000000000009			0.63	0.05	0.05
+2.3	0.09999999999999964	0.10000000000000009			0.43	0.05	0.05
+2.5	0.10000000000000009	0.10000000000000009			0.34	0.04	0.04
+2.7	0.10000000000000009	0.09999999999999964			0.22	0.04	0.04
+2.9	0.10000000000000009	0.10000000000000009			0.18	0.03	0.03
+3.2	0.20000000000000018	0.19999999999999973			0.152	0.021	0.021
+3.5999999999999996	0.19999999999999973	0.20000000000000018			0.08	0.014	0.014
+4.0	0.20000000000000018	0.20000000000000018			0.041	0.012	0.012
+4.4	0.20000000000000018	0.1999999999999993			0.037	0.011	0.011
+4.8	0.20000000000000018	0.20000000000000018			0.021	0.007	0.007
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d05-x01-y02
+Path=/REF/EHS_1988_I265504/d05-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.01	0.01	0.01			604.0	4.0	4.0
+0.03	0.009999999999999998	0.010000000000000002			477.0	4.0	4.0
+0.05	0.010000000000000002	0.009999999999999995			381.0	3.0	3.0
+0.07	0.010000000000000009	0.009999999999999995			309.0	3.0	3.0
+0.09	0.009999999999999995	0.010000000000000009			256.0	3.0	3.0
+0.11	0.009999999999999995	0.009999999999999995			217.0	3.0	3.0
+0.13	0.010000000000000009	0.010000000000000009			185.0	2.0	2.0
+0.15000000000000002	0.010000000000000009	0.009999999999999981			160.0	2.0	2.0
+0.16999999999999998	0.009999999999999981	0.010000000000000009			140.0	2.0	2.0
+0.19	0.010000000000000009	0.010000000000000009			121.0	2.0	2.0
+0.225	0.024999999999999994	0.024999999999999994			106.0	1.0	1.0
+0.275	0.025000000000000022	0.024999999999999967			76.0	1.0	1.0
+0.32499999999999996	0.024999999999999967	0.025000000000000022			60.2	0.9	0.9
+0.375	0.025000000000000022	0.025000000000000022			47.7	0.8	0.8
+0.42500000000000004	0.025000000000000022	0.024999999999999967			38.7	0.8	0.8
+0.475	0.024999999999999967	0.025000000000000022			32.4	0.7	0.7
+0.525	0.025000000000000022	0.025000000000000022			26.0	0.6	0.6
+0.575	0.02499999999999991	0.025000000000000022			22.3	0.6	0.6
+0.625	0.025000000000000022	0.025000000000000022			19.0	0.5	0.5
+0.675	0.025000000000000022	0.02499999999999991			15.4	0.5	0.5
+0.725	0.025000000000000022	0.025000000000000022			13.3	0.5	0.5
+0.775	0.025000000000000022	0.025000000000000022			12.2	0.5	0.5
+0.825	0.02499999999999991	0.025000000000000022			9.4	0.4	0.4
+0.875	0.025000000000000022	0.025000000000000022			8.8	0.4	0.4
+0.925	0.025000000000000022	0.02499999999999991			7.5	0.3	0.3
+0.975	0.025000000000000022	0.025000000000000022			6.0	0.3	0.3
+1.05	0.050000000000000044	0.050000000000000044			5.3	0.2	0.2
+1.15	0.04999999999999982	0.050000000000000044			4.3	0.2	0.2
+1.25	0.050000000000000044	0.050000000000000044			3.4	0.17	0.17
+1.35	0.050000000000000044	0.04999999999999982			2.55	0.15	0.15
+1.45	0.050000000000000044	0.050000000000000044			2.22	0.14	0.14
+1.55	0.050000000000000044	0.050000000000000044			1.54	0.12	0.12
+1.65	0.04999999999999982	0.050000000000000044			1.4	0.12	0.12
+1.75	0.050000000000000044	0.050000000000000044			1.22	0.11	0.11
+1.85	0.050000000000000044	0.04999999999999982			0.91	0.09	0.09
+1.95	0.050000000000000044	0.050000000000000044			0.84	0.07	0.07
+2.1	0.10000000000000009	0.10000000000000009			0.5	0.05	0.05
+2.3	0.09999999999999964	0.10000000000000009			0.44	0.04	0.04
+2.5	0.10000000000000009	0.10000000000000009			0.31	0.04	0.04
+2.7	0.10000000000000009	0.09999999999999964			0.22	0.03	0.03
+2.9	0.10000000000000009	0.10000000000000009			0.17	0.03	0.03
+3.2	0.20000000000000018	0.19999999999999973			0.127	0.017	0.017
+3.5999999999999996	0.19999999999999973	0.20000000000000018			0.082	0.015	0.015
+4.0	0.20000000000000018	0.20000000000000018			0.055	0.012	0.012
+4.4	0.20000000000000018	0.1999999999999993			0.026	0.007	0.007
+4.8	0.20000000000000018	0.20000000000000018			0.024	0.006	0.006
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d05-x01-y03
+Path=/REF/EHS_1988_I265504/d05-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.01	0.01	0.01			1104.0	13.0	13.0
+0.03	0.009999999999999998	0.010000000000000002			841.0	11.0	11.0
+0.05	0.010000000000000002	0.009999999999999995			689.0	10.0	10.0
+0.07	0.010000000000000009	0.009999999999999995			561.0	9.0	9.0
+0.09	0.009999999999999995	0.010000000000000009			458.0	8.0	8.0
+0.11	0.009999999999999995	0.009999999999999995			382.0	7.0	7.0
+0.13	0.010000000000000009	0.010000000000000009			323.0	7.0	7.0
+0.15000000000000002	0.010000000000000009	0.009999999999999981			266.0	6.0	6.0
+0.16999999999999998	0.009999999999999981	0.010000000000000009			253.0	6.0	6.0
+0.19	0.010000000000000009	0.010000000000000009			227.0	6.0	6.0
+0.225	0.024999999999999994	0.024999999999999994			183.0	3.0	3.0
+0.275	0.025000000000000022	0.024999999999999967			134.0	3.0	3.0
+0.32499999999999996	0.024999999999999967	0.025000000000000022			106.0	3.0	3.0
+0.375	0.025000000000000022	0.025000000000000022			84.0	2.0	2.0
+0.42500000000000004	0.025000000000000022	0.024999999999999967			66.0	2.0	2.0
+0.475	0.024999999999999967	0.025000000000000022			57.0	2.0	2.0
+0.525	0.025000000000000022	0.025000000000000022			42.5	1.6	1.6
+0.575	0.02499999999999991	0.025000000000000022			40.6	1.6	1.6
+0.625	0.025000000000000022	0.025000000000000022			35.4	1.5	1.5
+0.675	0.025000000000000022	0.02499999999999991			25.8	1.2	1.2
+0.725	0.025000000000000022	0.025000000000000022			22.2	1.2	1.2
+0.775	0.025000000000000022	0.025000000000000022			19.0	1.1	1.1
+0.825	0.02499999999999991	0.025000000000000022			17.5	1.1	1.1
+0.875	0.025000000000000022	0.025000000000000022			16.7	1.0	1.0
+0.925	0.025000000000000022	0.02499999999999991			12.0	0.9	0.9
+0.975	0.025000000000000022	0.025000000000000022			10.0	0.8	0.8
+1.05	0.050000000000000044	0.050000000000000044			9.5	0.6	0.6
+1.15	0.04999999999999982	0.050000000000000044			6.4	0.4	0.4
+1.25	0.050000000000000044	0.050000000000000044			5.3	0.4	0.4
+1.35	0.050000000000000044	0.04999999999999982			4.2	0.4	0.4
+1.45	0.050000000000000044	0.050000000000000044			3.7	0.3	0.3
+1.55	0.050000000000000044	0.050000000000000044			2.8	0.3	0.3
+1.65	0.04999999999999982	0.050000000000000044			2.4	0.3	0.3
+1.75	0.050000000000000044	0.050000000000000044			2.2	0.3	0.3
+1.85	0.050000000000000044	0.04999999999999982			1.8	0.2	0.2
+1.95	0.050000000000000044	0.050000000000000044			1.4	0.2	0.2
+2.1	0.10000000000000009	0.10000000000000009			1.07	0.14	0.14
+2.3	0.09999999999999964	0.10000000000000009			0.64	0.1	0.1
+2.5	0.10000000000000009	0.10000000000000009			0.6	0.1	0.1
+2.7	0.10000000000000009	0.09999999999999964			0.33	0.07	0.07
+2.9	0.10000000000000009	0.10000000000000009			0.23	0.07	0.07
+3.2	0.20000000000000018	0.19999999999999973			0.2	0.04	0.04
+3.5999999999999996	0.19999999999999973	0.20000000000000018			0.14	0.04	0.04
+4.0	0.20000000000000018	0.20000000000000018			0.06	0.03	0.03
+4.4	0.20000000000000018	0.1999999999999993			0.08	0.03	0.03
+4.8	0.20000000000000018	0.20000000000000018			0.05	0.03	0.03
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d06-x01-y01
+Path=/REF/EHS_1988_I265504/d06-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.01	0.01	0.01			561.0	5.0	5.0
+0.03	0.009999999999999998	0.010000000000000002			425.0	4.0	4.0
+0.05	0.010000000000000002	0.009999999999999995			325.0	4.0	4.0
+0.07	0.010000000000000009	0.009999999999999995			265.0	4.0	4.0
+0.09	0.009999999999999995	0.010000000000000009			217.0	3.0	3.0
+0.11	0.009999999999999995	0.009999999999999995			175.0	3.0	3.0
+0.13	0.010000000000000009	0.010000000000000009			149.0	3.0	3.0
+0.15000000000000002	0.010000000000000009	0.009999999999999981			121.0	2.0	2.0
+0.16999999999999998	0.009999999999999981	0.010000000000000009			107.0	2.0	2.0
+0.19	0.010000000000000009	0.010000000000000009			92.0	2.0	2.0
+0.225	0.024999999999999994	0.024999999999999994			72.0	1.0	1.0
+0.275	0.025000000000000022	0.024999999999999967			53.0	1.0	1.0
+0.32499999999999996	0.024999999999999967	0.025000000000000022			38.9	0.8	0.8
+0.375	0.025000000000000022	0.025000000000000022			31.1	0.7	0.7
+0.42500000000000004	0.025000000000000022	0.024999999999999967			24.9	0.6	0.6
+0.475	0.024999999999999967	0.025000000000000022			19.5	0.5	0.5
+0.525	0.025000000000000022	0.025000000000000022			15.9	0.5	0.5
+0.575	0.02499999999999991	0.025000000000000022			12.5	0.4	0.4
+0.625	0.025000000000000022	0.025000000000000022			10.1	0.4	0.4
+0.675	0.025000000000000022	0.02499999999999991			8.7	0.3	0.3
+0.725	0.025000000000000022	0.025000000000000022			7.1	0.3	0.3
+0.775	0.025000000000000022	0.025000000000000022			6.8	0.3	0.3
+0.825	0.02499999999999991	0.025000000000000022			5.5	0.3	0.3
+0.875	0.025000000000000022	0.025000000000000022			3.9	0.2	0.2
+0.925	0.025000000000000022	0.02499999999999991			3.4	0.2	0.2
+0.975	0.02499999999999993	0.02500000000000004			3.3	0.2	0.2
+1.05	0.050000000000000044	0.050000000000000044			2.68	0.14	0.14
+1.15	0.04999999999999982	0.050000000000000044			2.15	0.12	0.12
+1.25	0.050000000000000044	0.050000000000000044			1.49	0.1	0.1
+1.35	0.050000000000000044	0.04999999999999982			1.23	0.09	0.09
+1.45	0.050000000000000044	0.050000000000000044			0.97	0.08	0.08
+1.55	0.050000000000000044	0.050000000000000044			0.69	0.06	0.06
+1.65	0.04999999999999982	0.050000000000000044			0.6	0.06	0.06
+1.75	0.050000000000000044	0.050000000000000044			0.53	0.06	0.06
+1.85	0.050000000000000044	0.04999999999999982			0.5	0.06	0.06
+1.95	0.050000000000000044	0.050000000000000044			0.33	0.05	0.05
+2.1	0.10000000000000009	0.10000000000000009			0.32	0.03	0.03
+2.3	0.09999999999999964	0.10000000000000009			0.141	0.021	0.021
+2.5	0.10000000000000009	0.10000000000000009			0.157	0.023	0.023
+2.7	0.10000000000000009	0.09999999999999964			0.113	0.027	0.027
+2.9	0.10000000000000009	0.10000000000000009			0.071	0.018	0.018
+3.2	0.20000000000000018	0.19999999999999973			0.042	0.011	0.011
+3.5999999999999996	0.19999999999999973	0.20000000000000018			0.031	0.008	0.008
+4.0	0.20000000000000018	0.20000000000000018			0.014	0.004	0.004
+4.4	0.20000000000000018	0.1999999999999993			0.011	0.004	0.004
+4.8	0.20000000000000018	0.20000000000000018			0.007	0.003	0.003
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d06-x01-y02
+Path=/REF/EHS_1988_I265504/d06-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.01	0.01	0.01			469.0	4.0	4.0
+0.03	0.009999999999999998	0.010000000000000002			348.0	4.0	4.0
+0.05	0.010000000000000002	0.009999999999999995			274.0	3.0	3.0
+0.07	0.010000000000000009	0.009999999999999995			225.0	3.0	3.0
+0.09	0.009999999999999995	0.010000000000000009			176.0	3.0	3.0
+0.11	0.009999999999999995	0.009999999999999995			148.0	2.0	2.0
+0.13	0.010000000000000009	0.010000000000000009			122.0	2.0	2.0
+0.15000000000000002	0.010000000000000009	0.009999999999999981			105.0	2.0	2.0
+0.16999999999999998	0.009999999999999981	0.010000000000000009			89.0	2.0	2.0
+0.19	0.010000000000000009	0.010000000000000009			77.0	2.0	2.0
+0.225	0.024999999999999994	0.024999999999999994			60.0	1.0	1.0
+0.275	0.025000000000000022	0.024999999999999967			45.4	0.8	0.8
+0.32499999999999996	0.024999999999999967	0.025000000000000022			33.1	0.7	0.7
+0.375	0.025000000000000022	0.025000000000000022			25.4	0.6	0.6
+0.42500000000000004	0.025000000000000022	0.024999999999999967			20.2	0.5	0.5
+0.475	0.024999999999999967	0.025000000000000022			16.5	0.5	0.5
+0.525	0.025000000000000022	0.025000000000000022			12.8	0.4	0.4
+0.575	0.02499999999999991	0.025000000000000022			10.7	0.4	0.4
+0.625	0.025000000000000022	0.025000000000000022			8.4	0.3	0.3
+0.675	0.025000000000000022	0.02499999999999991			7.2	0.3	0.3
+0.725	0.025000000000000022	0.025000000000000022			6.3	0.3	0.3
+0.775	0.025000000000000022	0.025000000000000022			5.1	0.3	0.3
+0.825	0.02499999999999991	0.025000000000000022			4.7	0.2	0.2
+0.875	0.025000000000000022	0.025000000000000022			3.8	0.2	0.2
+0.925	0.025000000000000022	0.02499999999999991			3.18	0.18	0.18
+#0.525	0.42499999999999993	0.42500000000000004			2.75	0.16	0.16
+1.05	0.050000000000000044	0.050000000000000044			2.24	0.11	0.11
+1.15	0.04999999999999982	0.050000000000000044			1.55	0.09	0.09
+1.25	0.050000000000000044	0.050000000000000044			1.26	0.08	0.08
+1.35	0.050000000000000044	0.04999999999999982			1.03	0.07	0.07
+1.45	0.050000000000000044	0.050000000000000044			0.83	0.07	0.07
+1.55	0.050000000000000044	0.050000000000000044			0.54	0.05	0.05
+1.65	0.04999999999999982	0.050000000000000044			0.63	0.06	0.06
+1.75	0.050000000000000044	0.050000000000000044			0.46	0.05	0.05
+1.85	0.050000000000000044	0.04999999999999982			0.48	0.06	0.06
+1.95	0.050000000000000044	0.050000000000000044			0.35	0.05	0.05
+2.1	0.10000000000000009	0.10000000000000009			0.22	0.03	0.03
+2.3	0.09999999999999964	0.10000000000000009			0.213	0.025	0.025
+2.5	0.10000000000000009	0.10000000000000009			0.152	0.021	0.021
+2.7	0.10000000000000009	0.09999999999999964			0.096	0.019	0.019
+2.9	0.10000000000000009	0.10000000000000009			0.074	0.014	0.014
+3.2	0.20000000000000018	0.19999999999999973			0.064	0.011	0.011
+3.5999999999999996	0.19999999999999973	0.20000000000000018			0.038	0.011	0.011
+4.0	0.20000000000000018	0.20000000000000018			0.018	0.007	0.007
+4.4	0.20000000000000018	0.1999999999999993			0.013	0.004	0.004
+4.8	0.20000000000000018	0.20000000000000018			0.006	0.003	0.003
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/EHS_1988_I265504/d06-x01-y03
+Path=/REF/EHS_1988_I265504/d06-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.01	0.01	0.01			817.0	11.0	11.0
+0.03	0.01	0.01			627.0	10.0	10.0
+0.05	0.01	0.01			458.0	8.0	8.0
+0.07	0.01	0.01			383.0	8.0	8.0
+0.09	0.01	0.01			319.0	7.0	7.0
+#0.11	0.01	0.01			251.0	6.0	6.0
+0.13	0.01	0.01			208.0	6.0	6.0
+0.15000000000000002	0.010000000000000009	0.009999999999999981			179.0	5.0	5.0
+0.16999999999999998	0.009999999999999981	0.010000000000000009			148.0	5.0	5.0
+0.19	0.010000000000000009	0.010000000000000009			139.0	5.0	5.0
+0.225	0.024999999999999994	0.024999999999999994			107.0	2.0	2.0
+0.275	0.025000000000000022	0.024999999999999967			79.0	2.0	2.0
+0.32499999999999996	0.024999999999999967	0.025000000000000022			60.3	1.8	1.8
+0.375	0.025000000000000022	0.025000000000000022			39.4	1.6	1.6
+0.42500000000000004	0.025000000000000022	0.024999999999999967			33.0	1.5	1.5
+0.475	0.024999999999999967	0.025000000000000022			26.4	1.3	1.3
+0.525	0.025000000000000022	0.025000000000000022			22.1	1.1	1.1
+0.575	0.02499999999999991	0.025000000000000022			17.9	1.0	1.0
+0.625	0.025000000000000022	0.025000000000000022			12.5	0.8	0.8
+0.675	0.025000000000000022	0.02499999999999991			12.0	0.8	0.8
+0.725	0.025000000000000022	0.025000000000000022			10.5	0.7	0.7
+0.775	0.025000000000000022	0.025000000000000022			8.2	0.7	0.7
+0.825	0.02499999999999991	0.025000000000000022			7.1	0.6	0.6
+0.875	0.025000000000000022	0.025000000000000022			8.7	0.7	0.7
+0.925	0.025000000000000022	0.02499999999999991			6.0	0.6	0.6
+#0.525	0.42499999999999993	0.42500000000000004			3.9	0.4	0.4
+1.05	0.050000000000000044	0.050000000000000044			3.3	0.3	0.3
+1.15	0.04999999999999982	0.050000000000000044			2.71	0.26	0.26
+1.25	0.050000000000000044	0.050000000000000044			2.22	0.24	0.24
+1.35	0.050000000000000044	0.04999999999999982			1.77	0.21	0.21
+1.45	0.050000000000000044	0.050000000000000044			1.93	0.24	0.24
+1.55	0.050000000000000044	0.050000000000000044			0.51	0.11	0.11
+1.65	0.04999999999999982	0.050000000000000044			0.63	0.12	0.12
+1.75	0.050000000000000044	0.050000000000000044			0.8	0.14	0.14
+1.85	0.050000000000000044	0.04999999999999982			0.79	0.15	0.15
+1.95	0.050000000000000044	0.050000000000000044			0.51	0.11	0.11
+2.1	0.10000000000000009	0.10000000000000009			0.28	0.06	0.06
+2.3	0.09999999999999964	0.10000000000000009			0.38	0.08	0.08
+2.5	0.10000000000000009	0.10000000000000009			0.21	0.05	0.05
+2.7	0.10000000000000009	0.09999999999999964			0.3	0.09	0.09
+2.9	0.10000000000000009	0.10000000000000009			0.13	0.04	0.04
+3.2	0.20000000000000018	0.19999999999999973			0.098	0.028	0.028
+3.5999999999999996	0.19999999999999973	0.20000000000000018			0.015	0.01	0.01
+4.0	0.20000000000000018	0.20000000000000018			0.015	0.011	0.011
+							
+4.8	0.20000000000000018	0.20000000000000018			0.066	0.028	0.028
+# END YODA_SCATTER2D 
+
+
diff --git a/analyses/pluginMisc/HRS_1986_I18502.cc b/analyses/pluginMisc/HRS_1986_I18502.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/HRS_1986_I18502.cc
@@ -0,0 +1,60 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+
+namespace Rivet {
+
+
+  /// @brief Charged hadron multiplicity at 29 GeV from HRS experiment
+  class HRS_1986_I18502 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(HRS_1986_I18502);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+      const ChargedFinalState cfs;
+      declare(cfs, "CFS");
+
+      _histChTot = bookHisto1D(1, 1, 1);
+      _histAver  = bookProfile1D(3, 1, 1);
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+      const FinalState& cfs = apply<FinalState>(event, "CFS");
+      MSG_DEBUG("Total charged multiplicity = " << cfs.size());
+      _histChTot->fill(cfs.size(), event.weight());
+      _histAver->fill(_histAver->bin(0).xMid(),cfs.size(),event.weight());
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+      scale(_histChTot, 200.0/sumOfWeights()); // bin width (2) and %age (100)
+    }
+
+    //@}
+
+
+  private:
+
+    /// @name Histograms
+    //@{
+    Histo1DPtr _histChTot;
+    Profile1DPtr _histAver;
+    //@}
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(HRS_1986_I18502);
+
+
+}
diff --git a/analyses/pluginMisc/HRS_1986_I18502.info b/analyses/pluginMisc/HRS_1986_I18502.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/HRS_1986_I18502.info
@@ -0,0 +1,37 @@
+Name: HRS_1986_I18502
+Year: 1986
+Summary: Charged Hadron multiplicity at 29 GeV
+Experiment: HRS
+Collider: PEP
+InspireID: 18502
+Status: VALIDATED
+Authors:
+ - Peter Richardson <peter.richardson@durham.ac.uk>
+References:
+- Phys.Rev. D34 (1986) 3304
+RunInfo: 
+  Hadronic e+e- events at $\sqrt{s} = 29.$ GeV
+NumEvents: 1000000
+Beams: [e+, e-]
+Energies: [29.]
+PtCuts: [0]
+Description:
+  The charged particle multiplicity distribution of hadronic $e^+e^-$ events,
+  as measured at $\sqrt{s} = 29.$ GeV using the HRS detector at
+  PEP.
+BibKey: Derrick:1986jx
+BibTeX: '@article{Derrick:1986jx,
+      author         = "Derrick, M. and others",
+      title          = "{Study of Quark Fragmentation in e+ e- Annihilation at
+                        29-GeV: Charged Particle Multiplicity and Single Particle
+                        Rapidity Distributions}",
+      booktitle      = "{Proceedings, 23RD International Conference on High
+                        Energy Physics, JULY 16-23, 1986, Berkeley, CA}",
+      journal        = "Phys. Rev.",
+      volume         = "D34",
+      year           = "1986",
+      pages          = "3304",
+      doi            = "10.1103/PhysRevD.34.3304",
+      reportNumber   = "ANL-HEP-PR-86-03, IUHEE-81, UM-HE-86-06, PU-86-560",
+      SLACcitation   = "%%CITATION = PHRVA,D34,3304;%%"
+}'
diff --git a/analyses/pluginMisc/HRS_1986_I18502.plot b/analyses/pluginMisc/HRS_1986_I18502.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/HRS_1986_I18502.plot
@@ -0,0 +1,14 @@
+# BEGIN PLOT /HRS_1986_I18502/d01-x01-y01
+Title=Total charged multiplicity
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ (\%)
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+
+# BEGIN PLOT /HRS_1986_I18502/d03-x01-y01
+Title=Mean charged multiplicity
+LogY=0
+LegendXPos=0.25
+LegendYPos=0.5
+# END PLOT
diff --git a/analyses/pluginMisc/HRS_1986_I18502.yoda b/analyses/pluginMisc/HRS_1986_I18502.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/HRS_1986_I18502.yoda
@@ -0,0 +1,382 @@
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d01-x01-y01
+Path=/REF/HRS_1986_I18502/d01-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			0.05	0.0282842712474619	0.0282842712474619
+4.0	1.0	1.0			0.63	0.20615528128088306	0.20615528128088306
+6.0	1.0	1.0			3.56	0.223606797749979	0.223606797749979
+8.0	1.0	1.0			9.43	0.4561797891182817	0.4561797891182817
+10.0	1.0	1.0			17.54	0.796994353806851	0.796994353806851
+12.0	1.0	1.0			23.12	1.0358088626768938	1.0358088626768938
+14.0	1.0	1.0			19.43	0.8764131445842194	0.8764131445842194
+16.0	1.0	1.0			13.32	0.6135144660071187	0.6135144660071187
+18.0	1.0	1.0			7.38	0.39395431207184417	0.39395431207184417
+20.0	1.0	1.0			3.59	0.27313000567495327	0.27313000567495327
+22.0	1.0	1.0			1.24	0.15652475842498528	0.15652475842498528
+24.0	1.0	1.0			0.5	0.08944271909999159	0.08944271909999159
+26.0	1.0	1.0			0.17	0.05	0.05
+28.0	1.0	1.0			0.04	0.022360679774997897	0.022360679774997897
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d02-x01-y01
+Path=/REF/HRS_1986_I18502/d02-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			0.05	0.0282842712474619	0.0282842712474619
+4.0	1.0	1.0			0.69	0.22803508501982758	0.22803508501982758
+6.0	1.0	1.0			3.66	0.23259406699226012	0.23259406699226012
+8.0	1.0	1.0			10.48	0.5053711507397312	0.5053711507397312
+10.0	1.0	1.0			19.07	0.8664871608973788	0.8664871608973788
+12.0	1.0	1.0			24.21	1.0893117092916977	1.0893117092916977
+14.0	1.0	1.0			19.21	0.8668333173107734	0.8668333173107734
+16.0	1.0	1.0			12.42	0.5692099788303083	0.5692099788303083
+18.0	1.0	1.0			6.29	0.33241540277189324	0.33241540277189324
+20.0	1.0	1.0			2.75	0.2102379604162864	0.2102379604162864
+22.0	1.0	1.0			0.84	0.1077032961426901	0.1077032961426901
+24.0	1.0	1.0			0.23	0.044721359549995794	0.044721359549995794
+26.0	1.0	1.0			0.09	0.022360679774997897	0.022360679774997897
+28.0	1.0	1.0			0.01	0.01414213562373095	0.01414213562373095
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d03-x01-y01
+Path=/REF/HRS_1986_I18502/d03-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.5	0.5			12.87	0.3014962686336267	0.3014962686336267
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d03-x01-y02
+Path=/REF/HRS_1986_I18502/d03-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			3.67	0.18110770276274832	0.18110770276274832
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d03-x01-y03
+Path=/REF/HRS_1986_I18502/d03-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			0.6	0.18110770276274832	0.18110770276274832
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d03-x01-y04
+Path=/REF/HRS_1986_I18502/d03-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			3.51	0.18	0.18
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d04-x01-y01
+Path=/REF/HRS_1986_I18502/d04-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			12.53	0.3014962686336267	0.3014962686336267
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d04-x01-y02
+Path=/REF/HRS_1986_I18502/d04-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			3.48	0.17117242768623692	0.17117242768623692
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d04-x01-y03
+Path=/REF/HRS_1986_I18502/d04-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			-0.42	0.17117242768623692	0.17117242768623692
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d04-x01-y04
+Path=/REF/HRS_1986_I18502/d04-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			3.6	0.18	0.18
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d05-x01-y01
+Path=/REF/HRS_1986_I18502/d05-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.04	0.0282842712474619	0.0282842712474619
+1.0	0.0	0.0			1.48	0.7011419257183241	0.7011419257183241
+2.0	0.0	0.0			3.42	1.1335784048754634	1.1335784048754634
+3.0	0.0	0.0			6.48	0.33541019662496846	0.33541019662496846
+4.0	0.0	0.0			11.44	0.5385164807134505	0.5385164807134505
+5.0	0.0	0.0			15.32	0.7083784299369935	0.7083784299369935
+6.0	0.0	0.0			15.89	0.7273238618387272	0.7273238618387272
+7.0	0.0	0.0			14.34	0.657875368135941	0.657875368135941
+8.0	0.0	0.0			11.61	0.5385164807134505	0.5385164807134505
+9.0	0.0	0.0			8.33	0.40718546143004664	0.40718546143004664
+10.0	0.0	0.0			5.14	0.2641968962724581	0.2641968962724581
+11.0	0.0	0.0			3.15	0.18027756377319948	0.18027756377319948
+12.0	0.0	0.0			1.65	0.12206555615733704	0.12206555615733704
+13.0	0.0	0.0			1.01	0.07810249675906655	0.07810249675906655
+14.0	0.0	0.0			0.42	0.0565685424949238	0.0565685424949238
+15.0	0.0	0.0			0.17	0.0282842712474619	0.0282842712474619
+16.0	0.0	0.0			0.07	0.0282842712474619	0.0282842712474619
+17.0	0.0	0.0			0.03	0.01414213562373095	0.01414213562373095
+18.0	0.0	0.0			0.01	0.01414213562373095	0.01414213562373095
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d06-x01-y01
+Path=/REF/HRS_1986_I18502/d06-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.04	0.0282842712474619	0.0282842712474619
+1.0	0.0	0.0			1.54	0.7310950690573695	0.7310950690573695
+2.0	0.0	0.0			3.49	1.1335784048754634	1.1335784048754634
+3.0	0.0	0.0			6.89	0.35341194094144585	0.35341194094144585
+4.0	0.0	0.0			12.09	0.5664803615307419	0.5664803615307419
+5.0	0.0	0.0			16.15	0.7494664769020694	0.7494664769020694
+6.0	0.0	0.0			16.38	0.7494664769020694	0.7494664769020694
+7.0	0.0	0.0			14.37	0.657875368135941	0.657875368135941
+8.0	0.0	0.0			11.38	0.5292447448959696	0.5292447448959696
+9.0	0.0	0.0			7.92	0.38483762809787714	0.38483762809787714
+10.0	0.0	0.0			4.61	0.24186773244895649	0.24186773244895649
+11.0	0.0	0.0			2.72	0.15811388300841897	0.15811388300841897
+12.0	0.0	0.0			1.22	0.08602325267042628	0.08602325267042628
+13.0	0.0	0.0			0.78	0.06403124237432849	0.06403124237432849
+14.0	0.0	0.0			0.27	0.042426406871192854	0.042426406871192854
+15.0	0.0	0.0			0.08	0.022360679774997897	0.022360679774997897
+16.0	0.0	0.0			0.04	0.01414213562373095	0.01414213562373095
+17.0	0.0	0.0			0.02	0.01414213562373095	0.01414213562373095
+18.0	0.0	0.0			0.01	0.01414213562373095	0.01414213562373095
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d07-x01-y01
+Path=/REF/HRS_1986_I18502/d07-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			6.43	0.15132745950421556	0.15132745950421556
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d07-x01-y02
+Path=/REF/HRS_1986_I18502/d07-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			2.55	0.13152946437965907	0.13152946437965907
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d07-x01-y03
+Path=/REF/HRS_1986_I18502/d07-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			-0.07	0.13152946437965907	0.13152946437965907
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d07-x01-y04
+Path=/REF/HRS_1986_I18502/d07-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			2.52	0.13	0.13
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d08-x01-y01
+Path=/REF/HRS_1986_I18502/d08-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			6.26	0.15132745950421556	0.15132745950421556
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d08-x01-y02
+Path=/REF/HRS_1986_I18502/d08-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			2.45	0.1216552506059644	0.1216552506059644
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d08-x01-y03
+Path=/REF/HRS_1986_I18502/d08-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			-0.26	0.13152946437965907	0.13152946437965907
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d08-x01-y04
+Path=/REF/HRS_1986_I18502/d08-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			2.56	0.13	0.13
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d09-x01-y01
+Path=/REF/HRS_1986_I18502/d09-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			1.08	0.04	0.04
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d09-x01-y02
+Path=/REF/HRS_1986_I18502/d09-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			1.25	0.06	0.06
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d09-x01-y03
+Path=/REF/HRS_1986_I18502/d09-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			1.54	0.08	0.08
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d09-x01-y04
+Path=/REF/HRS_1986_I18502/d09-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			2.0	0.12	0.12
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d09-x01-y05
+Path=/REF/HRS_1986_I18502/d09-x01-y05
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			2.75	0.18	0.18
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d10-x01-y01
+Path=/REF/HRS_1986_I18502/d10-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			1.08	0.04	0.04
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d10-x01-y02
+Path=/REF/HRS_1986_I18502/d10-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			1.24	0.06	0.06
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d10-x01-y03
+Path=/REF/HRS_1986_I18502/d10-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			1.51	0.08	0.08
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d10-x01-y04
+Path=/REF/HRS_1986_I18502/d10-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			1.93	0.12	0.12
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d10-x01-y05
+Path=/REF/HRS_1986_I18502/d10-x01-y05
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			2.61	0.18	0.18
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d11-x01-y01
+Path=/REF/HRS_1986_I18502/d11-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			1.16	0.04	0.04
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d11-x01-y02
+Path=/REF/HRS_1986_I18502/d11-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			1.5	0.07	0.07
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d11-x01-y03
+Path=/REF/HRS_1986_I18502/d11-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			2.13	0.11	0.11
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d11-x01-y04
+Path=/REF/HRS_1986_I18502/d11-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			3.27	0.18	0.18
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d11-x01-y05
+Path=/REF/HRS_1986_I18502/d11-x01-y05
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			5.38	0.35	0.35
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d12-x01-y01
+Path=/REF/HRS_1986_I18502/d12-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			1.15	0.04	0.04
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d12-x01-y02
+Path=/REF/HRS_1986_I18502/d12-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			1.49	0.07	0.07
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d12-x01-y03
+Path=/REF/HRS_1986_I18502/d12-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			2.09	0.1	0.1
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d12-x01-y04
+Path=/REF/HRS_1986_I18502/d12-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			3.18	0.18	0.18
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/HRS_1986_I18502/d12-x01-y05
+Path=/REF/HRS_1986_I18502/d12-x01-y05
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			5.19	0.34	0.34
+# END YODA_SCATTER2D 
+
+
diff --git a/src/Analyses/PDG_HADRON_MULTIPLICITIES.cc b/analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES.cc
rename from src/Analyses/PDG_HADRON_MULTIPLICITIES.cc
rename to analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES.cc
diff --git a/data/refdata/PDG_HADRON_MULTIPLICITIES.dat b/analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES.dat
rename from data/refdata/PDG_HADRON_MULTIPLICITIES.dat
rename to analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES.dat
diff --git a/data/anainfo/PDG_HADRON_MULTIPLICITIES.info b/analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES.info
rename from data/anainfo/PDG_HADRON_MULTIPLICITIES.info
rename to analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES.info
diff --git a/data/plotinfo/PDG_HADRON_MULTIPLICITIES.plot b/analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES.plot
rename from data/plotinfo/PDG_HADRON_MULTIPLICITIES.plot
rename to analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES.plot
diff --git a/data/refdata/PDG_HADRON_MULTIPLICITIES.yoda b/analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES.yoda
rename from data/refdata/PDG_HADRON_MULTIPLICITIES.yoda
rename to analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES.yoda
diff --git a/src/Analyses/PDG_HADRON_MULTIPLICITIES_RATIOS.cc b/analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES_RATIOS.cc
rename from src/Analyses/PDG_HADRON_MULTIPLICITIES_RATIOS.cc
rename to analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES_RATIOS.cc
diff --git a/data/anainfo/PDG_HADRON_MULTIPLICITIES_RATIOS.info b/analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES_RATIOS.info
rename from data/anainfo/PDG_HADRON_MULTIPLICITIES_RATIOS.info
rename to analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES_RATIOS.info
diff --git a/data/plotinfo/PDG_HADRON_MULTIPLICITIES_RATIOS.plot b/analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES_RATIOS.plot
rename from data/plotinfo/PDG_HADRON_MULTIPLICITIES_RATIOS.plot
rename to analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES_RATIOS.plot
diff --git a/data/refdata/PDG_HADRON_MULTIPLICITIES_RATIOS.yoda b/analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES_RATIOS.yoda
rename from data/refdata/PDG_HADRON_MULTIPLICITIES_RATIOS.yoda
rename to analyses/pluginMisc/PDG_HADRON_MULTIPLICITIES_RATIOS.yoda
diff --git a/src/Analyses/PDG_TAUS.cc b/analyses/pluginMisc/PDG_TAUS.cc
rename from src/Analyses/PDG_TAUS.cc
rename to analyses/pluginMisc/PDG_TAUS.cc
diff --git a/data/anainfo/PDG_TAUS.info b/analyses/pluginMisc/PDG_TAUS.info
rename from data/anainfo/PDG_TAUS.info
rename to analyses/pluginMisc/PDG_TAUS.info
diff --git a/data/plotinfo/PDG_TAUS.plot b/analyses/pluginMisc/PDG_TAUS.plot
rename from data/plotinfo/PDG_TAUS.plot
rename to analyses/pluginMisc/PDG_TAUS.plot
diff --git a/data/refdata/PDG_TAUS.yoda b/analyses/pluginMisc/PDG_TAUS.yoda
rename from data/refdata/PDG_TAUS.yoda
rename to analyses/pluginMisc/PDG_TAUS.yoda
diff --git a/src/Analyses/SFM_1984_S1178091.cc b/analyses/pluginMisc/SFM_1984_S1178091.cc
rename from src/Analyses/SFM_1984_S1178091.cc
rename to analyses/pluginMisc/SFM_1984_S1178091.cc
diff --git a/data/anainfo/SFM_1984_S1178091.info b/analyses/pluginMisc/SFM_1984_S1178091.info
rename from data/anainfo/SFM_1984_S1178091.info
rename to analyses/pluginMisc/SFM_1984_S1178091.info
diff --git a/data/plotinfo/SFM_1984_S1178091.plot b/analyses/pluginMisc/SFM_1984_S1178091.plot
rename from data/plotinfo/SFM_1984_S1178091.plot
rename to analyses/pluginMisc/SFM_1984_S1178091.plot
diff --git a/data/refdata/SFM_1984_S1178091.yoda b/analyses/pluginMisc/SFM_1984_S1178091.yoda
rename from data/refdata/SFM_1984_S1178091.yoda
rename to analyses/pluginMisc/SFM_1984_S1178091.yoda
diff --git a/analyses/pluginMisc/TPC_1987_I235694.cc b/analyses/pluginMisc/TPC_1987_I235694.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/TPC_1987_I235694.cc
@@ -0,0 +1,103 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/Beam.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+#include "Rivet/Projections/InitialQuarks.hh"
+
+namespace Rivet {
+
+
+  /// @brief TPC flavour separated N charged at 29 GeV
+  class TPC_1987_I235694 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(TPC_1987_I235694);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+      // Histograms
+      _h_all    = bookProfile1D(5, 1, 4);
+      _h_light  = bookProfile1D(4, 1, 4);
+      _h_charm  = bookProfile1D(3, 1, 4);
+      _h_bottom = bookProfile1D(2, 1, 4);
+      // Projections
+      declare(Beam(), "Beams");
+      declare(ChargedFinalState(), "CFS");
+      declare(InitialQuarks(), "IQF");
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+      const double weight = event.weight();
+      // Even if we only generate hadronic events, we still need a cut on numCharged >= 2.
+      const FinalState& cfs = apply<FinalState>(event, "CFS");
+      if (cfs.size() < 2) vetoEvent;
+
+
+      int flavour = 0;
+      const InitialQuarks& iqf = apply<InitialQuarks>(event, "IQF");
+
+      // If we only have two quarks (qqbar), just take the flavour.
+      // If we have more than two quarks, look for the highest energetic q-qbar pair.
+      if (iqf.particles().size() == 2) {
+        flavour = iqf.particles().front().abspid();
+      }
+      else {
+        map<int, double> quarkmap;
+        foreach (const Particle& p, iqf.particles()) {
+          if (quarkmap[p.pid()] < p.E()) {
+            quarkmap[p.pid()] = p.E();
+          }
+        }
+        double maxenergy = 0.;
+        for (int i = 1; i <= 5; ++i) {
+          if (quarkmap[i]+quarkmap[-i] > maxenergy) {
+            flavour = i;
+          }
+        }
+      }
+      const size_t numParticles = cfs.particles().size();
+      switch (flavour) {
+      case 1: case 2: case 3:
+	_h_light->fill(sqrtS()/GeV,numParticles,weight);
+        break;
+      case 4:
+	_h_charm->fill(sqrtS()/GeV,numParticles,weight);
+        break;
+      case 5:
+	_h_bottom->fill(sqrtS()/GeV,numParticles,weight);
+        break;
+      }
+      _h_all->fill(sqrtS()/GeV,numParticles,weight);
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() { }
+    //@}
+
+
+  private:
+
+    /// @name Multiplicities
+    //@{
+    Profile1DPtr _h_all;
+    Profile1DPtr _h_light;
+    Profile1DPtr _h_charm;
+    Profile1DPtr _h_bottom;
+    //@}
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(TPC_1987_I235694);
+
+
+}
diff --git a/analyses/pluginMisc/TPC_1987_I235694.info b/analyses/pluginMisc/TPC_1987_I235694.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/TPC_1987_I235694.info
@@ -0,0 +1,36 @@
+Name: TPC_1987_I235694
+Year: 1987
+Summary: Charged Hadron multiplicity at 29 GeV, flavour separated
+Experiment: TPC
+Collider: PEP
+InspireID: 235694
+Status: VALIDATED
+Authors:
+ - Peter Richardson <peter.richardson@durham.ac.uk>
+References:
+- Phys.Lett. B184 (1987) 299-304
+RunInfo: 
+  Hadronic e+e- events at $\sqrt{s} = 29.$ GeV
+NumEvents: 1000000
+Beams: [e+, e-]
+Energies: [29.]
+PtCuts: [0]
+Description:
+  The charged particle multiplicity distribution of hadronic $e^+e^-$ events,
+  as measured at $\sqrt{s} = 29.$ GeV using the TPC detector at
+  PEP. The multiplicities are measured separately for light, charm and bottom events 
+  as well as the results averaged over the quark flavours.
+BibKey: Aihara:1986mv
+BibTeX: '@article{Aihara:1986mv,
+      author         = "Aihara, H. and others",
+      title          = "{Pion and kaon multiplicities in heavy quark jets from
+                        $e^+e^-$ annihilation at 29-GeV}",
+      collaboration  = "TPC/Two Gamma",
+      journal        = "Phys. Lett.",
+      volume         = "B184",
+      year           = "1987",
+      pages          = "299-304",
+      doi            = "10.1016/0370-2693(87)90586-7",
+      reportNumber   = "JHU-HEP-86-105",
+      SLACcitation   = "%%CITATION = PHLTA,B184,299;%%"
+}'
diff --git a/analyses/pluginMisc/TPC_1987_I235694.plot b/analyses/pluginMisc/TPC_1987_I235694.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/TPC_1987_I235694.plot
@@ -0,0 +1,24 @@
+# BEGIN PLOT /TPC_1987_I235694/d02-x01-y04
+Title=Mean charged multiplicity bottom
+LogY=0
+LegendXPos=0.25
+LegendYPos=0.5
+# END PLOT
+# BEGIN PLOT /TPC_1987_I235694/d03-x01-y04
+LogY=0
+Title=Mean charged multiplicity charm
+LegendXPos=0.25
+LegendYPos=0.5
+# END PLOT
+# BEGIN PLOT /TPC_1987_I235694/d04-x01-y04
+Title=Mean charged multiplicity light
+LogY=0
+LegendXPos=0.25
+LegendYPos=0.5
+# END PLOT
+# BEGIN PLOT /TPC_1987_I235694/d05-x01-y04
+LogY=0
+Title=Mean charged multiplicity all flavours
+LegendXPos=0.25
+LegendYPos=0.5
+# END PLOT
diff --git a/analyses/pluginMisc/TPC_1987_I235694.yoda b/analyses/pluginMisc/TPC_1987_I235694.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginMisc/TPC_1987_I235694.yoda
@@ -0,0 +1,128 @@
+# BEGIN YODA_SCATTER2D /REF/TPC_1987_I235694/d02-x01-y01
+Path=/REF/TPC_1987_I235694/d02-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			13.8	1.0	1.0
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TPC_1987_I235694/d02-x01-y02
+Path=/REF/TPC_1987_I235694/d02-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.0	0.0			1.7	0.6	0.6
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TPC_1987_I235694/d02-x01-y03
+Path=/REF/TPC_1987_I235694/d02-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.5	0.5			0.7	0.6	0.6
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TPC_1987_I235694/d02-x01-y04
+Path=/REF/TPC_1987_I235694/d02-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.5	0.5			15.9	1.0	1.0
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TPC_1987_I235694/d03-x01-y01
+Path=/REF/TPC_1987_I235694/d03-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.5	0.5			10.8	0.9	0.9
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TPC_1987_I235694/d03-x01-y02
+Path=/REF/TPC_1987_I235694/d03-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.5	0.5			2.0	0.5	0.5
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TPC_1987_I235694/d03-x01-y03
+Path=/REF/TPC_1987_I235694/d03-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.5	0.5			0.6	0.5	0.5
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TPC_1987_I235694/d03-x01-y04
+Path=/REF/TPC_1987_I235694/d03-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.5	0.5			13.2	0.9	0.9
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TPC_1987_I235694/d04-x01-y01
+Path=/REF/TPC_1987_I235694/d04-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.5	0.5			10.1	0.9	0.9
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TPC_1987_I235694/d04-x01-y02
+Path=/REF/TPC_1987_I235694/d04-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.5	0.5			0.9	0.4	0.4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TPC_1987_I235694/d04-x01-y03
+Path=/REF/TPC_1987_I235694/d04-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.5	0.5			0.6	0.4	0.4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TPC_1987_I235694/d04-x01-y04
+Path=/REF/TPC_1987_I235694/d04-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.5	0.5			12.0	0.9	0.9
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TPC_1987_I235694/d05-x01-y01
+Path=/REF/TPC_1987_I235694/d05-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.5	0.5			10.7	0.5	0.5
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TPC_1987_I235694/d05-x01-y02
+Path=/REF/TPC_1987_I235694/d05-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.5	0.5			1.4	0.1	0.1
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TPC_1987_I235694/d05-x01-y03
+Path=/REF/TPC_1987_I235694/d05-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.5	0.5			0.6	0.1	0.1
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TPC_1987_I235694/d05-x01-y04
+Path=/REF/TPC_1987_I235694/d05-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+29.0	0.5	0.5			12.8	0.6	0.6
+# END YODA_SCATTER2D 
+
+
diff --git a/analyses/pluginPetra/JADE_1983_I190818.cc b/analyses/pluginPetra/JADE_1983_I190818.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginPetra/JADE_1983_I190818.cc
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+
+namespace Rivet {
+
+
+  /// @brief Add a short analysis description here
+  class JADE_1983_I190818 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(JADE_1983_I190818);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+      const ChargedFinalState cfs;
+      declare(cfs, "CFS");
+      if( !(fuzzyEquals(sqrtS()/GeV,12.0) ||
+	    fuzzyEquals(sqrtS()/GeV,30.0) ||
+	    fuzzyEquals(sqrtS()/GeV,35.0) )) {
+        MSG_WARNING("CoM energy of events sqrt(s) = " << sqrtS()/GeV
+                    << " doesn't match any available analysis energy .");
+      }
+      _hist = bookProfile1D(1, 1, 1);
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+      const FinalState& cfs = apply<FinalState>(event, "CFS");
+      MSG_DEBUG("Total charged multiplicity = " << cfs.size());
+      _hist->fill(sqrtS(),cfs.size(),event.weight());
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {}
+    //@}
+
+  private:
+
+    // Histogram
+    Profile1DPtr _hist;
+
+  };
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(JADE_1983_I190818);
+
+}
diff --git a/analyses/pluginPetra/JADE_1983_I190818.info b/analyses/pluginPetra/JADE_1983_I190818.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginPetra/JADE_1983_I190818.info
@@ -0,0 +1,34 @@
+Name: JADE_1983_I190818
+Year: 1983
+Summary: Hadronic charged multiplicity measurement between 12 and 35 GeV
+Experiment: JADE
+Collider: PETRA
+InspireID: 190818
+Status: VALIDATED
+Authors:
+ - Peter Richardson <peter.richardson@durham.ac.uk>
+References:
+- Z.Phys. C20 (1983) 187
+RunInfo: 
+  Hadronic e+ e- events generated below the Z pole
+NumEvents: 1000000
+Beams: [e+, e-]
+Energies: [12.,30.,35.]
+PtCuts: [0]
+Description:
+  The charged particle multiplicity distribution of hadronic $e^+e^-$ events
+  as measured between 12 and 35 GeV using the JADE detector at
+  PETRA.
+BibKey: Bartel:1983qp
+BibTeX: '@article{Bartel:1983qp,
+      author         = "Bartel, W. and others",
+      title          = "{Charged Particle and Neutral Kaon Production in e+ e-
+                        Annihilation at PETRA}",
+      collaboration  = "JADE",
+      journal        = "Z. Phys.",
+      volume         = "C20",
+      year           = "1983",
+      pages          = "187",
+      reportNumber   = "DESY-83-042",
+      SLACcitation   = "%%CITATION = ZEPYA,C20,187;%%"
+}'
diff --git a/analyses/pluginPetra/JADE_1983_I190818.plot b/analyses/pluginPetra/JADE_1983_I190818.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginPetra/JADE_1983_I190818.plot
@@ -0,0 +1,8 @@
+# BEGIN PLOT /JADE_1983_I190818/d01-x01-y01
+Title=Mean charged multiplicity average for $\sqrt{s}$ between 12 and 35 GeV
+XLabel=$\sqrt{s}$
+YLabel=$\bar{n}_\text{ch}$
+LogY=0
+LegendXPos=0.25
+LegendYPos=0.25
+# END PLOT
diff --git a/analyses/pluginPetra/JADE_1983_I190818.yoda b/analyses/pluginPetra/JADE_1983_I190818.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginPetra/JADE_1983_I190818.yoda
@@ -0,0 +1,30 @@
+# BEGIN YODA_SCATTER2D /REF/JADE_1983_I190818/d01-x01-y01
+Path=/REF/JADE_1983_I190818/d01-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+12.0	9.0	9.0			8.4	0.6708203932499369	0.6708203932499369
+30.0	9.0	2.5			13.1	0.6708203932499369	0.6708203932499369
+35.0	2.5	2.5			13.6	0.6708203932499369	0.6708203932499369
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/JADE_1983_I190818/d02-x01-y01
+Path=/REF/JADE_1983_I190818/d02-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+12.0	0.0	0.0			7.2	0.8602325267042626	0.8602325267042626
+30.0	0.0	0.0			11.4	0.8062257748298549	0.8062257748298549
+35.0	0.0	0.0			11.8	0.8062257748298549	0.8062257748298549
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/JADE_1983_I190818/d03-x01-y01
+Path=/REF/JADE_1983_I190818/d03-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+12.0	0.0	0.0			2.86	0.25	0.25
+30.0	0.0	0.0			3.05	0.16	0.16
+35.0	0.0	0.0			3.2	0.15	0.15
+# END YODA_SCATTER2D 
+
+
diff --git a/src/Analyses/JADE_1998_S3612880.cc b/analyses/pluginPetra/JADE_1998_S3612880.cc
rename from src/Analyses/JADE_1998_S3612880.cc
rename to analyses/pluginPetra/JADE_1998_S3612880.cc
diff --git a/data/anainfo/JADE_1998_S3612880.info b/analyses/pluginPetra/JADE_1998_S3612880.info
rename from data/anainfo/JADE_1998_S3612880.info
rename to analyses/pluginPetra/JADE_1998_S3612880.info
diff --git a/data/plotinfo/JADE_1998_S3612880.plot b/analyses/pluginPetra/JADE_1998_S3612880.plot
rename from data/plotinfo/JADE_1998_S3612880.plot
rename to analyses/pluginPetra/JADE_1998_S3612880.plot
diff --git a/data/refdata/JADE_1998_S3612880.yoda b/analyses/pluginPetra/JADE_1998_S3612880.yoda
rename from data/refdata/JADE_1998_S3612880.yoda
rename to analyses/pluginPetra/JADE_1998_S3612880.yoda
diff --git a/src/Analyses/JADE_OPAL_2000_S4300807.cc b/analyses/pluginPetra/JADE_OPAL_2000_S4300807.cc
rename from src/Analyses/JADE_OPAL_2000_S4300807.cc
rename to analyses/pluginPetra/JADE_OPAL_2000_S4300807.cc
diff --git a/data/anainfo/JADE_OPAL_2000_S4300807.info b/analyses/pluginPetra/JADE_OPAL_2000_S4300807.info
rename from data/anainfo/JADE_OPAL_2000_S4300807.info
rename to analyses/pluginPetra/JADE_OPAL_2000_S4300807.info
diff --git a/data/plotinfo/JADE_OPAL_2000_S4300807.plot b/analyses/pluginPetra/JADE_OPAL_2000_S4300807.plot
rename from data/plotinfo/JADE_OPAL_2000_S4300807.plot
rename to analyses/pluginPetra/JADE_OPAL_2000_S4300807.plot
diff --git a/data/refdata/JADE_OPAL_2000_S4300807.yoda b/analyses/pluginPetra/JADE_OPAL_2000_S4300807.yoda
rename from data/refdata/JADE_OPAL_2000_S4300807.yoda
rename to analyses/pluginPetra/JADE_OPAL_2000_S4300807.yoda
diff --git a/analyses/pluginPetra/PLUTO_1980_I154270.cc b/analyses/pluginPetra/PLUTO_1980_I154270.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginPetra/PLUTO_1980_I154270.cc
@@ -0,0 +1,93 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+
+namespace Rivet {
+
+
+  /// @brief Add a short analysis description here
+  class PLUTO_1980_I154270 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(PLUTO_1980_I154270);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+      const ChargedFinalState cfs;
+      declare(cfs, "CFS");
+      if(fuzzyEquals(sqrtS()/GeV,30.75)) {
+	_hist=bookProfile1D(1, 2, 1);
+      }
+      else if (fuzzyEquals(sqrtS()/GeV,9.4 ) ||
+	       fuzzyEquals(sqrtS()/GeV,12.0) ||
+	       fuzzyEquals(sqrtS()/GeV,13.0) ||
+	       fuzzyEquals(sqrtS()/GeV,17.0) ||
+	       fuzzyEquals(sqrtS()/GeV,22.0) ||
+	       fuzzyEquals(sqrtS()/GeV,27.6) ||
+	       fuzzyEquals(sqrtS()/GeV,30.2) ||
+	       fuzzyEquals(sqrtS()/GeV,30.7) ||
+	       fuzzyEquals(sqrtS()/GeV,31.3)) {
+	_hist=bookProfile1D(1, 1, 1);
+      }
+      else {
+        MSG_WARNING("CoM energy of events sqrt(s) = " << sqrtS()/GeV
+                    << " doesn't match any available analysis energy .");
+      }
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+      const FinalState& cfs = apply<FinalState>(event, "CFS");
+      MSG_DEBUG("Total charged multiplicity = " << cfs.size());
+      unsigned int nPart(0);
+      foreach (const Particle& p, cfs.particles()) {
+        // check if prompt or not
+        const GenParticle* pmother = p.genParticle();
+        const GenVertex* ivertex = pmother->production_vertex();
+        bool prompt = true;
+        while (ivertex) {
+          int n_inparts = ivertex->particles_in_size();
+          if (n_inparts < 1) break;
+          pmother = particles(ivertex, HepMC::parents)[0]; // first mother particle
+          int mother_pid = abs(pmother->pdg_id());
+          if (mother_pid==PID::K0S || mother_pid==PID::LAMBDA) {
+            prompt = false;
+            break;
+          }
+          else if (mother_pid<6) {
+            break;
+          }
+          ivertex = pmother->production_vertex();
+        }
+	if(prompt) ++nPart;
+      }
+      _hist->fill(sqrtS(),nPart,event.weight());
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() { }
+
+    //@}
+
+
+  private:
+
+    // Histogram
+    Profile1DPtr _hist;
+
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(PLUTO_1980_I154270);
+
+
+}
diff --git a/analyses/pluginPetra/PLUTO_1980_I154270.info b/analyses/pluginPetra/PLUTO_1980_I154270.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginPetra/PLUTO_1980_I154270.info
@@ -0,0 +1,36 @@
+Name: PLUTO_1980_I154270
+Year: 1980
+Summary: Hadronic charged multiplicity measurement between 12 and 31.3 GeV
+Experiment: PLUTO
+Collider: PETRA
+InspireID: 154270
+Status: VALIDATED
+Authors:
+ - Peter Richardson <peter.richardson@durham.ac.uk>
+References:
+- Phys.Lett. 95B (1980) 313-317
+RunInfo: 
+  Hadronic e+ e- events generated below the Z pole
+NumEvents: 1000000
+Beams: [e+, e-]
+Energies: [9.4,12.0,13.0,17.0,22.0,27.6,30.2,30.7,31.3,30.75]
+PtCuts: [0]
+Description:
+  The charged particle multiplicity distribution of hadronic $e^+e^-$ events
+  as measured between 12 and 31.3 GeV using the PLUTO detector at
+  PETRA. The decay products of weakly decaying strange hadrons, 
+  e.g. $K^0_s$ and $\Lambda^0$, are not included in the measurement.
+BibKey: Berger:1980zb
+BibTeX: '@article{Berger:1980zb,
+      author         = "Berger, Christoph and others",
+      title          = "{Multiplicity Distributions in e+ e- Annihilations at
+                        PETRA Energies}",
+      collaboration  = "PLUTO",
+      journal        = "Phys. Lett.",
+      volume         = "B95",
+      year           = "1980",
+      pages          = "313-317",
+      doi            = "10.1016/0370-2693(80)90494-3",
+      reportNumber   = "DESY-80-69",
+      SLACcitation   = "%%CITATION = PHLTA,B95,313;%%"
+}'
diff --git a/analyses/pluginPetra/PLUTO_1980_I154270.plot b/analyses/pluginPetra/PLUTO_1980_I154270.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginPetra/PLUTO_1980_I154270.plot
@@ -0,0 +1,14 @@
+# BEGIN PLOT /PLUTO_1980_I154270/d01-x01-y01
+Title=Mean charged multiplicity average for $\sqrt{s}$ between 12 and 31.3 GeV
+YLabel=$\bar{n}_\text{ch}$
+XLabel=$\sqrt{s}$
+LogY=0
+LegendXPos=0.25
+LegendYPos=0.25
+# END PLOT
+# BEGIN PLOT /PLUTO_1980_I154270/d01-x02-y01
+Title=Mean charged multiplicity average for $\sqrt{s}$ at 30.75 GeV
+LogY=0
+LegendXPos=0.25
+LegendYPos=0.25
+# END PLOT
diff --git a/analyses/pluginPetra/PLUTO_1980_I154270.yoda b/analyses/pluginPetra/PLUTO_1980_I154270.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginPetra/PLUTO_1980_I154270.yoda
@@ -0,0 +1,56 @@
+# BEGIN YODA_SCATTER2D /REF/PLUTO_1980_I154270/d01-x01-y01
+Path=/REF/PLUTO_1980_I154270/d01-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+9.4	1.3	1.3			6.9	0.1	0.1
+12.0	1.3	0.5			7.4	0.2	0.2
+13.0	0.5	2.0			7.4	0.3	0.3
+17.0	2.0	2.5			8.0	0.3	0.3
+22.0	2.5	2.8			9.7	0.7	0.7
+27.6	2.8	1.3			10.4	0.3	0.3
+30.2	1.3	0.25			10.4	0.2	0.2
+30.7	0.25	0.3			10.6	0.3	0.3
+31.3	0.3	0.3			11.0	0.3	0.3
+# END YODA_SCATTER2D
+
+# BEGIN YODA_SCATTER2D /REF/PLUTO_1980_I154270/d01-x02-y01
+Path=/REF/PLUTO_1980_I154270/d01-x02-y01
+Type=Scatter2D
+30.75	0.85	0.85			10.6	0.1	0.1
+# END YODA_SCATTER2D
+
+
+# BEGIN YODA_SCATTER2D /REF/PLUTO_1980_I154270/d01-x01-y02
+Path=/REF/PLUTO_1980_I154270/d01-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+9.4	0.0	0.0			2.2	0.2	0.2
+12.0	0.0	0.0			2.7	0.3	0.3
+13.0	0.0	0.0			2.5	0.4	0.4
+17.0	0.0	0.0			3.4	0.5	0.5
+22.0	0.0	0.0			3.3	0.9	0.9
+27.6	0.0	0.0			3.5	0.4	0.4
+30.2	0.0	0.0			3.8	0.2	0.2
+30.7	0.0	0.0			3.7	0.4	0.4
+31.3	0.0	0.0			3.9	0.4	0.4
+30.75	0.8500000000000014	0.8500000000000014			3.8	0.2	0.2
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/PLUTO_1980_I154270/d01-x01-y03
+Path=/REF/PLUTO_1980_I154270/d01-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+9.4	0.0	0.0			3.2	0.2	0.2
+12.0	0.0	0.0			2.7	0.3	0.3
+13.0	0.0	0.0			2.9	0.5	0.5
+17.0	0.0	0.0			2.4	0.4	0.4
+22.0	0.0	0.0			2.9	0.9	0.9
+27.6	0.0	0.0			2.9	0.4	0.4
+30.2	0.0	0.0			2.8	0.2	0.2
+30.7	0.0	0.0			2.9	0.3	0.3
+31.3	0.0	0.0			2.8	0.3	0.3
+30.75	0.8500000000000014	0.8500000000000014			2.8	0.1	0.1
+# END YODA_SCATTER2D 
+
+
diff --git a/analyses/pluginPetra/TASSO_1989_I277658.cc b/analyses/pluginPetra/TASSO_1989_I277658.cc
new file mode 100644
--- /dev/null
+++ b/analyses/pluginPetra/TASSO_1989_I277658.cc
@@ -0,0 +1,77 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+
+namespace Rivet {
+
+
+  /// @brief Add a short analysis description here
+  class TASSO_1989_I277658 : public Analysis {
+  public:
+
+    /// Constructor
+    DEFAULT_RIVET_ANALYSIS_CTOR(TASSO_1989_I277658);
+
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+      const ChargedFinalState cfs;
+      declare(cfs, "CFS");
+
+      int offset = 0;
+      if(fuzzyEquals(sqrtS()/GeV,14.0)) {
+	offset = 1;
+      }
+      else if(fuzzyEquals(sqrtS()/GeV,22.0)) {
+	offset = 2;
+      }
+      else if(fuzzyEquals(sqrtS()/GeV,34.8)) {
+	offset = 3;
+      }
+      else if(fuzzyEquals(sqrtS()/GeV,43.6)) {
+	offset = 4;
+      }
+      else {
+        MSG_WARNING("CoM energy of events sqrt(s) = " << sqrtS()/GeV
+                    << " doesn't match any available analysis energy .");
+      }
+      _histCh = bookHisto1D(5, 1, offset); 
+      _histTotal = bookProfile1D(2, 1, 1);
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+      const FinalState& cfs = apply<FinalState>(event, "CFS");
+      MSG_DEBUG("Total charged multiplicity = " << cfs.size());
+      _histCh->fill(cfs.size(), event.weight());
+      _histTotal->fill(sqrtS(),cfs.size(),event.weight());
+    }
+
+
+    /// Normalise histograms etc., after the run
+    void finalize() {
+      scale(_histCh, 2.0/sumOfWeights()); // bin width (2)
+    }
+
+    //@}
+
+
+  private:
+
+    /// @name Histograms
+    //@{
+    Histo1DPtr _histCh;
+    Profile1DPtr _histTotal;
+    //@}
+  };
+
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(TASSO_1989_I277658);
+
+
+}
diff --git a/analyses/pluginPetra/TASSO_1989_I277658.info b/analyses/pluginPetra/TASSO_1989_I277658.info
new file mode 100644
--- /dev/null
+++ b/analyses/pluginPetra/TASSO_1989_I277658.info
@@ -0,0 +1,35 @@
+Name: TASSO_1989_I277658
+Year: 1989
+Summary: Hadronic charged multiplicity measurement between 14 and 43.6 GeV
+Experiment: TASSO
+Collider: PEP
+InspireID: 277658
+Status: VALIDATED
+Authors:
+ - Peter Richardson <peter.richardson@durham.ac.uk>
+References:
+- Z.Phys. C45 (1989) 193
+RunInfo: 
+  Hadronic e+ e- events generated below the Z pole
+NumEvents: 1000000
+Beams: [e+, e-]
+Energies: [14.,22.,34.8,43.6]
+PtCuts: [0]
+Description:
+  The charged particle multiplicity distribution of hadronic $e^+e^-$ events
+  as measured between 14 and 43.6 GeV using the TASSO detector at
+  PEP.
+BibKey: Braunschweig:1989bp
+BibTeX: '@article{Braunschweig:1989bp,
+      author         = "Braunschweig, W. and others",
+      title          = "{Charged Multiplicity Distributions and Correlations in
+                        e+ e- Annihilation at PETRA Energies}",
+      collaboration  = "TASSO",
+      journal        = "Z. Phys.",
+      volume         = "C45",
+      year           = "1989",
+      pages          = "193",
+      doi            = "10.1007/BF01674450",
+      reportNumber   = "DESY-89-038",
+      SLACcitation   = "%%CITATION = ZEPYA,C45,193;%%"
+}'
diff --git a/analyses/pluginPetra/TASSO_1989_I277658.plot b/analyses/pluginPetra/TASSO_1989_I277658.plot
new file mode 100644
--- /dev/null
+++ b/analyses/pluginPetra/TASSO_1989_I277658.plot
@@ -0,0 +1,35 @@
+# BEGIN PLOT /TASSO_1989_I277658/d05-x01-y01
+Title=Total charged multiplicity $\sqrt{s}=14$ GeV
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ 
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+# BEGIN PLOT /TASSO_1989_I277658/d05-x01-y02
+Title=Total charged multiplicity $\sqrt{s}=22$ GeV
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ 
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+# BEGIN PLOT /TASSO_1989_I277658/d05-x01-y03
+Title=Total charged multiplicity $\sqrt{s}=34.8$ GeV
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ 
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+# BEGIN PLOT /TASSO_1989_I277658/d05-x01-y04
+Title=Total charged multiplicity $\sqrt{s}=43.6$ GeV
+XLabel=$n_\text{ch}$
+YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ 
+LegendXPos=0.25
+LegendYPos=0.7
+# END PLOT
+
+# BEGIN PLOT /TASSO_1989_I277658/d02-x01-y01
+Title=Mean charged multiplicity average for $\sqrt{s}$ between 14 and 43.6 GeV
+LogY=0
+LegendXPos=0.25
+LegendYPos=0.25
+# END PLOT
diff --git a/analyses/pluginPetra/TASSO_1989_I277658.yoda b/analyses/pluginPetra/TASSO_1989_I277658.yoda
new file mode 100644
--- /dev/null
+++ b/analyses/pluginPetra/TASSO_1989_I277658.yoda
@@ -0,0 +1,1005 @@
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d01-x01-y01
+Path=/REF/TASSO_1989_I277658/d01-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+14.0	4.0	4.0			1.35	0.03	0.03
+22.0	4.0	6.4			1.35	0.03	0.03
+34.8	6.4	4.4			1.34	0.01	0.01
+43.6	4.4	4.4			1.35	0.02	0.02
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d02-x01-y01
+Path=/REF/TASSO_1989_I277658/d02-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+14.0	4.0	4.0			9.3	0.4143669871020132	0.4143669871020132
+22.0	4.0	6.4			11.3	0.4669047011971501	0.4669047011971501
+34.8	6.4	4.4			13.59	0.46043457732885357	0.46043457732885357
+43.6	4.4	4.4			15.08	0.47381430961928533	0.47381430961928533
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d02-x01-y02
+Path=/REF/TASSO_1989_I277658/d02-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+14.0	0.0	0.0			3.07	0.28284271247461906	0.28284271247461906
+22.0	0.0	0.0			3.55	0.36496575181789315	0.36496575181789315
+34.8	0.0	0.0			4.14	0.3901281840626232	0.3901281840626232
+43.6	0.0	0.0			4.59	0.37215588131856786	0.37215588131856786
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d02-x01-y03
+Path=/REF/TASSO_1989_I277658/d02-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+14.0	0.0	0.0			3.03	0.31400636936215165	0.31400636936215165
+22.0	0.0	0.0			3.19	0.35510561809129404	0.35510561809129404
+34.8	0.0	0.0			3.28	0.3301514803843836	0.3301514803843836
+43.6	0.0	0.0			3.28	0.2816025568065745	0.2816025568065745
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d03-x01-y01
+Path=/REF/TASSO_1989_I277658/d03-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+14.0	0.0	0.0			4.63	0.3014962686336267	0.3014962686336267
+22.0	0.0	0.0			5.64	0.3125699921617557	0.3125699921617557
+34.8	0.0	0.0			6.78	0.3301514803843836	0.3301514803843836
+43.6	0.0	0.0			7.58	0.3712142238654117	0.3712142238654117
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d03-x01-y02
+Path=/REF/TASSO_1989_I277658/d03-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+14.0	0.0	0.0			2.06	0.161245154965971	0.161245154965971
+22.0	0.0	0.0			2.39	0.18248287590894657	0.18248287590894657
+34.8	0.0	0.0			2.78	0.2202271554554524	0.2202271554554524
+43.6	0.0	0.0			3.11	0.21095023109728983	0.21095023109728983
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d03-x01-y03
+Path=/REF/TASSO_1989_I277658/d03-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+14.0	0.0	0.0			2.24	0.23194827009486405	0.23194827009486405
+22.0	0.0	0.0			2.36	0.22203603311174516	0.22203603311174516
+34.8	0.0	0.0			2.44	0.23021728866442678	0.23021728866442678
+43.6	0.0	0.0			2.44	0.2009975124224178	0.2009975124224178
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d04-x01-y01
+Path=/REF/TASSO_1989_I277658/d04-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+14.0	0.0	0.0			1.2	0.05	0.05
+22.0	0.0	0.0			1.5	0.15	0.15
+34.8	0.0	0.0			1.76	0.2	0.2
+43.6	0.0	0.0			1.93	0.3	0.3
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d04-x01-y02
+Path=/REF/TASSO_1989_I277658/d04-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+14.0	0.0	0.0			0.79	0.07	0.07
+22.0	0.0	0.0			0.8	0.09	0.09
+34.8	0.0	0.0			1.02	0.04	0.04
+43.6	0.0	0.0			0.97	0.04	0.04
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d04-x01-y03
+Path=/REF/TASSO_1989_I277658/d04-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+14.0	0.0	0.0			0.17	0.05	0.05
+22.0	0.0	0.0			0.28	0.06	0.06
+34.8	0.0	0.0			0.28	0.03	0.03
+43.6	0.0	0.0			0.33	0.04	0.04
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d05-x01-y01
+Path=/REF/TASSO_1989_I277658/d05-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			0.005783	0.0018	0.0018
+4.0	1.0	1.0			0.053986	0.004449	0.004449
+6.0	1.0	1.0			0.164745	0.00723	0.00723
+8.0	1.0	1.0			0.266517	0.009146	0.009146
+10.0	1.0	1.0			0.250602	0.008596	0.008596
+12.0	1.0	1.0			0.149795	0.006175	0.006175
+14.0	1.0	1.0			0.067216	0.003885	0.003885
+16.0	1.0	1.0			0.026178	0.002336	0.002336
+18.0	1.0	1.0			0.008703	0.001306	0.001306
+20.0	1.0	1.0			0.004682	0.001159	0.001159
+22.0	1.0	1.0			0.001463	6.06E-4	6.06E-4
+24.0	1.0	1.0			2.62E-4	2.08E-4	2.08E-4
+26.0	1.0	1.0			6.7E-5	9.7E-5	9.7E-5
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d05-x01-y02
+Path=/REF/TASSO_1989_I277658/d05-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			0.001631	8.95E-4	8.95E-4
+4.0	1.0	1.0			0.017797	0.002557	0.002557
+6.0	1.0	1.0			0.078243	0.005185	0.005185
+8.0	1.0	1.0			0.167981	0.007497	0.007497
+10.0	1.0	1.0			0.229196	0.008749	0.008749
+12.0	1.0	1.0			0.21556	0.008322	0.008322
+14.0	1.0	1.0			0.145702	0.006494	0.006494
+16.0	1.0	1.0			0.08216	0.004705	0.004705
+18.0	1.0	1.0			0.036614	0.002927	0.002927
+20.0	1.0	1.0			0.016538	0.001931	0.001931
+22.0	1.0	1.0			0.005892	0.001048	0.001048
+24.0	1.0	1.0			0.001637	5.13E-4	5.13E-4
+26.0	1.0	1.0			6.97E-4	3.12E-4	3.12E-4
+28.0	1.0	1.0			3.55E-4	2.53E-4	2.53E-4
+							
+							
+							
+							
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d05-x01-y03
+Path=/REF/TASSO_1989_I277658/d05-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			4.47E-4	4.55E-4	4.55E-4
+4.0	1.0	1.0			0.005733	7.59E-4	7.59E-4
+6.0	1.0	1.0			0.031675	0.001424	0.001424
+8.0	1.0	1.0			0.083797	0.002133	0.002133
+10.0	1.0	1.0			0.15313	0.002897	0.002897
+12.0	1.0	1.0			0.197927	0.003349	0.003349
+14.0	1.0	1.0			0.19245	0.003312	0.003312
+16.0	1.0	1.0			0.144335	0.002843	0.002843
+18.0	1.0	1.0			0.091819	0.002231	0.002231
+20.0	1.0	1.0			0.050623	0.001627	0.001627
+22.0	1.0	1.0			0.027161	0.001189	0.001189
+24.0	1.0	1.0			0.012348	8.03E-4	8.03E-4
+26.0	1.0	1.0			0.005173	5.19E-4	5.19E-4
+28.0	1.0	1.0			0.001977	3.26E-4	3.26E-4
+30.0	1.0	1.0			8.31E-4	2.13E-4	2.13E-4
+32.0	1.0	1.0			4.0E-4	1.55E-4	1.55E-4
+34.0	1.0	1.0			1.32E-4	8.4E-5	8.4E-5
+36.0	1.0	1.0			4.3E-5	5.5E-5	5.5E-5
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d05-x01-y04
+Path=/REF/TASSO_1989_I277658/d05-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+2.0	1.0	1.0			3.28E-4	3.57E-4	3.57E-4
+4.0	1.0	1.0			0.003446	0.001505	0.001505
+6.0	1.0	1.0			0.022958	0.002682	0.002682
+8.0	1.0	1.0			0.051983	0.003303	0.003303
+10.0	1.0	1.0			0.10778	0.004604	0.004604
+12.0	1.0	1.0			0.157378	0.005594	0.005594
+14.0	1.0	1.0			0.177662	0.005933	0.005933
+16.0	1.0	1.0			0.164074	0.005626	0.005626
+18.0	1.0	1.0			0.123672	0.004756	0.004756
+20.0	1.0	1.0			0.086055	0.003927	0.003927
+22.0	1.0	1.0			0.052095	0.002972	0.002972
+24.0	1.0	1.0			0.029188	0.002171	0.002171
+26.0	1.0	1.0			0.013995	0.001416	0.001416
+28.0	1.0	1.0			0.006002	9.34E-4	9.34E-4
+30.0	1.0	1.0			0.002374	5.92E-4	5.92E-4
+32.0	1.0	1.0			5.91E-4	2.65E-4	2.65E-4
+34.0	1.0	1.0			2.64E-4	1.82E-4	1.82E-4
+36.0	1.0	1.0			4.7E-5	9.1E-5	9.1E-5
+38.0	1.0	1.0			1.11E-4	2.17E-4	2.17E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d06-x01-y01
+Path=/REF/TASSO_1989_I277658/d06-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.006157	9.8E-4	9.8E-4
+1.0	0.0	0.0			0.038679	0.002218	0.002218
+2.0	0.0	0.0			0.09527	0.003366	0.003366
+3.0	0.0	0.0			0.169531	0.004669	0.004669
+4.0	0.0	0.0			0.197048	0.005014	0.005014
+5.0	0.0	0.0			0.187225	0.00481	0.00481
+6.0	0.0	0.0			0.136571	0.003881	0.003881
+7.0	0.0	0.0			0.084164	0.002886	0.002886
+8.0	0.0	0.0			0.044369	0.001999	0.001999
+9.0	0.0	0.0			0.021841	0.001363	0.001363
+10.0	0.0	0.0			0.010125	9.48E-4	9.48E-4
+11.0	0.0	0.0			0.004761	6.14E-4	6.14E-4
+12.0	0.0	0.0			0.002729	5.02E-4	5.02E-4
+13.0	0.0	0.0			0.001075	4.09E-4	4.09E-4
+14.0	0.0	0.0			2.63E-4	1.5E-4	1.5E-4
+15.0	0.0	0.0			1.4E-4	1.09E-4	1.09E-4
+16.0	0.0	0.0			2.6E-5	4.5E-5	4.5E-5
+17.0	0.0	0.0			3.1E-5	5.4E-5	5.4E-5
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d06-x01-y02
+Path=/REF/TASSO_1989_I277658/d06-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.002812	5.2E-4	5.2E-4
+1.0	0.0	0.0			0.020135	0.001603	0.001603
+2.0	0.0	0.0			0.053329	0.002446	0.002446
+3.0	0.0	0.0			0.10859	0.003716	0.003716
+4.0	0.0	0.0			0.151301	0.004462	0.004462
+5.0	0.0	0.0			0.175128	0.00488	0.00488
+6.0	0.0	0.0			0.157342	0.004468	0.004468
+7.0	0.0	0.0			0.12557	0.003874	0.003874
+8.0	0.0	0.0			0.087552	0.003082	0.003082
+9.0	0.0	0.0			0.054471	0.002332	0.002332
+10.0	0.0	0.0			0.032668	0.00176	0.00176
+11.0	0.0	0.0			0.015372	0.001161	0.001161
+12.0	0.0	0.0			0.008243	8.4E-4	8.4E-4
+13.0	0.0	0.0			0.004259	5.89E-4	5.89E-4
+14.0	0.0	0.0			0.001901	3.99E-4	3.99E-4
+15.0	0.0	0.0			7.74E-4	2.37E-4	2.37E-4
+16.0	0.0	0.0			4.04E-4	1.84E-4	1.84E-4
+17.0	0.0	0.0			1.49E-4	1.01E-4	1.01E-4
+							
+							
+							
+							
+							
+							
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d06-x01-y03
+Path=/REF/TASSO_1989_I277658/d06-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.001252	1.42E-4	1.42E-4
+1.0	0.0	0.0			0.009615	5.11E-4	5.11E-4
+2.0	0.0	0.0			0.027727	8.34E-4	8.34E-4
+3.0	0.0	0.0			0.064916	0.00128	0.00128
+4.0	0.0	0.0			0.103787	0.001627	0.001627
+5.0	0.0	0.0			0.139725	0.001918	0.001918
+6.0	0.0	0.0			0.148574	0.001975	0.001975
+7.0	0.0	0.0			0.144296	0.001951	0.001951
+8.0	0.0	0.0			0.115939	0.00172	0.00172
+9.0	0.0	0.0			0.087374	0.001476	0.001476
+10.0	0.0	0.0			0.05959	0.001203	0.001203
+11.0	0.0	0.0			0.039341	9.68E-4	9.68E-4
+12.0	0.0	0.0			0.025193	7.7E-4	7.7E-4
+13.0	0.0	0.0			0.015241	6.03E-4	6.03E-4
+14.0	0.0	0.0			0.008236	4.37E-4	4.37E-4
+15.0	0.0	0.0			0.004603	3.31E-4	3.31E-4
+16.0	0.0	0.0			0.002206	2.24E-4	2.24E-4
+17.0	0.0	0.0			0.001281	1.75E-4	1.75E-4
+18.0	0.0	0.0			6.41E-4	1.23E-4	1.23E-4
+19.0	0.0	0.0			1.74E-4	6.6E-5	6.6E-5
+20.0	0.0	0.0			1.48E-4	5.9E-5	5.9E-5
+21.0	0.0	0.0			9.1E-5	4.8E-5	4.8E-5
+22.0	0.0	0.0			4.5E-5	4.7E-5	4.7E-5
+23.0	0.0	0.0			5.0E-6	8.0E-6	8.0E-6
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d06-x01-y04
+Path=/REF/TASSO_1989_I277658/d06-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.001189	2.85E-4	2.85E-4
+1.0	0.0	0.0			0.006682	8.14E-4	8.14E-4
+2.0	0.0	0.0			0.019985	0.001266	0.001266
+3.0	0.0	0.0			0.045684	0.001942	0.001942
+4.0	0.0	0.0			0.080933	0.002617	0.002617
+5.0	0.0	0.0			0.111637	0.003131	0.003131
+6.0	0.0	0.0			0.133177	0.003461	0.003461
+7.0	0.0	0.0			0.131853	0.003421	0.003421
+8.0	0.0	0.0			0.121098	0.003252	0.003252
+9.0	0.0	0.0			0.100522	0.002907	0.002907
+10.0	0.0	0.0			0.078876	0.00252	0.00252
+11.0	0.0	0.0			0.05808	0.00213	0.00213
+12.0	0.0	0.0			0.041115	0.00176	0.00176
+13.0	0.0	0.0			0.026213	0.001357	0.001357
+14.0	0.0	0.0			0.018627	0.001146	0.001146
+15.0	0.0	0.0			0.010597	8.45E-4	8.45E-4
+16.0	0.0	0.0			0.006019	6.28E-4	6.28E-4
+17.0	0.0	0.0			0.003987	5.23E-4	5.23E-4
+18.0	0.0	0.0			0.001976	3.52E-4	3.52E-4
+19.0	0.0	0.0			9.08E-4	2.38E-4	2.38E-4
+20.0	0.0	0.0			4.58E-4	1.63E-4	1.63E-4
+21.0	0.0	0.0			1.91E-4	1.15E-4	1.15E-4
+22.0	0.0	0.0			9.2E-5	8.0E-5	8.0E-5
+23.0	0.0	0.0			7.9E-5	6.5E-5	6.5E-5
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d07-x01-y01
+Path=/REF/TASSO_1989_I277658/d07-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+	0.0	0.0			2.06	0.03	0.03
+	0.0	0.0			4.23	0.05	0.05
+	0.0	0.0			6.21	0.06	0.06
+	0.0	0.0			7.77	0.06	0.06
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d07-x01-y02
+Path=/REF/TASSO_1989_I277658/d07-x01-y02
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+	0.0	0.0			2.1	0.04	0.04
+	0.0	0.0			4.42	0.07	0.07
+	0.0	0.0			6.76	0.08	0.08
+	0.0	0.0			8.76	0.09	0.09
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d07-x01-y03
+Path=/REF/TASSO_1989_I277658/d07-x01-y03
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+	0.0	0.0			2.29	0.01	0.01
+	0.0	0.0			4.73	0.01	0.01
+	0.0	0.0			7.22	0.02	0.02
+	0.0	0.0			9.56	0.02	0.02
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d07-x01-y04
+Path=/REF/TASSO_1989_I277658/d07-x01-y04
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+	0.0	0.0			2.52	0.03	0.03
+	0.0	0.0			5.15	0.04	0.04
+	0.0	0.0			7.82	0.06	0.06
+	0.0	0.0			10.43	0.06	0.06
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d08-x01-y01
+Path=/REF/TASSO_1989_I277658/d08-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+	0.0	0.0			1.14	0.01	0.01
+	0.0	0.0			2.38	0.01	0.01
+	0.0	0.0			3.64	0.01	0.01
+	0.0	0.0			4.81	0.01	0.01
+	0.0	0.0			5.75	0.01	0.01
+	0.0	0.0			6.34	0.01	0.01
+	0.0	0.0			6.63	0.01	0.01
+	0.0	0.0			6.74	0.01	0.01
+	0.0	0.0			6.77	0.01	0.01
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d09-x01-y01
+Path=/REF/TASSO_1989_I277658/d09-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+	0.0	0.0			1.15	0.01	0.01
+	0.0	0.0			2.36	0.01	0.01
+	0.0	0.0			3.61	0.01	0.01
+	0.0	0.0			4.78	0.01	0.01
+	0.0	0.0			5.74	0.01	0.01
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d10-x01-y01
+Path=/REF/TASSO_1989_I277658/d10-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.371844	0.0169835	0.0169835
+0.485756	0.0	0.0			0.537901	0.0188009	0.0188009
+0.971512	0.0	0.0			0.471889	0.0162281	0.0162281
+1.45727	0.0	0.0			0.318007	0.0123426	0.0123426
+1.94302	0.0	0.0			0.18061	0.00876851	0.00876851
+2.42878	0.0	0.0			0.0848802	0.00548308	0.00548308
+2.91454	0.0	0.0			0.0440257	0.00385998	0.00385998
+3.40029	0.0	0.0			0.0251317	0.0029419	0.0029419
+3.88605	0.0	0.0			0.011561	0.00192662	0.00192662
+4.3718	0.0	0.0			0.00831659	0.00173774	0.00173774
+4.85756	0.0	0.0			0.00220716	8.03797E-4	8.03797E-4
+5.34332	0.0	0.0			0.00176033	7.54985E-4	7.54985E-4
+5.82907	0.0	0.0			2.87643E-4	2.64308E-4	2.64308E-4
+6.31483	0.0	0.0			9.7109E-5	1.67108E-4	1.67108E-4
+7.28634	0.0	0.0			1.29331E-4	2.4318E-4	2.4318E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d11-x01-y01
+Path=/REF/TASSO_1989_I277658/d11-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.162095	0.0165203	0.0165203
+0.236236	0.0	0.0			0.423333	0.0238364	0.0238364
+0.472472	0.0	0.0			0.654821	0.0282862	0.0282862
+0.708708	0.0	0.0			0.706141	0.0277749	0.0277749
+0.944944	0.0	0.0			0.63611	0.0249476	0.0249476
+1.18118	0.0	0.0			0.524103	0.0218421	0.0218421
+1.41742	0.0	0.0			0.375398	0.0177266	0.0177266
+1.65365	0.0	0.0			0.254558	0.0141318	0.0141318
+1.88989	0.0	0.0			0.173041	0.0113918	0.0113918
+2.12612	0.0	0.0			0.109911	0.00895787	0.00895787
+2.36236	0.0	0.0			0.0766792	0.00737902	0.00737902
+2.5986	0.0	0.0			0.0467441	0.00583306	0.00583306
+2.83483	0.0	0.0			0.0312714	0.00468156	0.00468156
+3.07107	0.0	0.0			0.0251067	0.0044329	0.0044329
+3.30731	0.0	0.0			0.0128524	0.00332424	0.00332424
+3.54354	0.0	0.0			0.0108411	0.00296642	0.00296642
+3.77978	0.0	0.0			0.00472649	0.00190168	0.00190168
+4.01601	0.0	0.0			0.00314807	0.00147896	0.00147896
+4.25225	0.0	0.0			0.00176498	0.00106025	0.00106025
+4.72472	0.0	0.0			5.89295E-5	9.75189E-5	9.75189E-5
+4.96096	0.0	0.0			3.50403E-4	3.93854E-4	3.93854E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d12-x01-y01
+Path=/REF/TASSO_1989_I277658/d12-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.055708	0.0133952	0.0133952
+0.161043	0.0	0.0			0.186624	0.0195592	0.0195592
+0.322087	0.0	0.0			0.425124	0.0283537	0.0283537
+0.48313	0.0	0.0			0.621865	0.0323704	0.0323704
+0.644174	0.0	0.0			0.769136	0.0344355	0.0344355
+0.805217	0.0	0.0			0.831837	0.0345502	0.0345502
+0.966261	0.0	0.0			0.782326	0.0325202	0.0325202
+1.1273	0.0	0.0			0.673892	0.0292319	0.0292319
+1.28835	0.0	0.0			0.544344	0.025811	0.025811
+1.44939	0.0	0.0			0.401848	0.0214888	0.0214888
+1.61043	0.0	0.0			0.309444	0.0184672	0.0184672
+1.77148	0.0	0.0			0.180073	0.0136595	0.0136595
+1.93252	0.0	0.0			0.140486	0.0123915	0.0123915
+2.09356	0.0	0.0			0.085142	0.00929327	0.00929327
+2.25461	0.0	0.0			0.07149	0.00891224	0.00891224
+2.41565	0.0	0.0			0.0393684	0.00661736	0.00661736
+2.5767	0.0	0.0			0.0391413	0.00701746	0.00701746
+2.73774	0.0	0.0			0.018403	0.00462568	0.00462568
+2.89878	0.0	0.0			0.0120555	0.0035472	0.0035472
+3.05983	0.0	0.0			0.0104515	0.0038688	0.0038688
+3.22087	0.0	0.0			0.00734561	0.00298741	0.00298741
+3.38191	0.0	0.0			2.85855E-4	3.6975E-4	3.6975E-4
+3.54296	0.0	0.0			0.00222739	0.0015884	0.0015884
+3.86504	0.0	0.0			8.88149E-4	9.1284E-4	9.1284E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d13-x01-y01
+Path=/REF/TASSO_1989_I277658/d13-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.016659	0.00992681	0.00992681
+0.128648	0.0	0.0			0.0798907	0.017053	0.017053
+0.257296	0.0	0.0			0.195507	0.0226465	0.0226465
+0.385943	0.0	0.0			0.366822	0.0271669	0.0271669
+0.514591	0.0	0.0			0.579118	0.0330027	0.0330027
+0.643239	0.0	0.0			0.788855	0.0378364	0.0378364
+0.771887	0.0	0.0			0.904209	0.0394566	0.0394566
+0.900534	0.0	0.0			0.95653	0.0400462	0.0400462
+1.02918	0.0	0.0			0.951257	0.039608	0.039608
+1.15783	0.0	0.0			0.7793	0.0350769	0.0350769
+1.28648	0.0	0.0			0.702232	0.0329127	0.0329127
+1.41512	0.0	0.0			0.445036	0.0251262	0.0251262
+1.54377	0.0	0.0			0.37876	0.0231003	0.0231003
+1.67242	0.0	0.0			0.175	0.0150985	0.0150985
+1.80107	0.0	0.0			0.190915	0.0162554	0.0162554
+1.92972	0.0	0.0			0.0674021	0.0093909	0.0093909
+2.05836	0.0	0.0			0.0929168	0.0114823	0.0114823
+2.18701	0.0	0.0			0.0208032	0.00492652	0.00492652
+2.31566	0.0	0.0			0.0370982	0.00729959	0.00729959
+2.44431	0.0	0.0			0.00745148	0.00403458	0.00403458
+2.57296	0.0	0.0			0.0250438	0.00679407	0.00679407
+2.7016	0.0	0.0			0.00408231	0.00307964	0.00307964
+2.83025	0.0	0.0			0.00576585	0.00248642	0.00248642
+2.9589	0.0	0.0			9.3463E-4	0.00116732	0.00116732
+3.08755	0.0	0.0			9.87434E-4	0.00104096	0.00104096
+3.34484	0.0	0.0			5.87715E-4	8.50474E-4	8.50474E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d14-x01-y01
+Path=/REF/TASSO_1989_I277658/d14-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.215006	0.0	0.0			0.0537899	0.016644	0.016644
+0.430011	0.0	0.0			0.502181	0.041133	0.041133
+0.645017	0.0	0.0			1.53247	0.0668408	0.0668408
+0.860022	0.0	0.0			2.47916	0.0845553	0.0845553
+1.07503	0.0	0.0			2.33112	0.0794712	0.0794712
+1.29003	0.0	0.0			1.3934	0.0570844	0.0570844
+1.50504	0.0	0.0			0.625251	0.035913	0.035913
+1.72004	0.0	0.0			0.243512	0.0215954	0.0215954
+1.93505	0.0	0.0			0.0809564	0.0120766	0.0120766
+2.15006	0.0	0.0			0.0435569	0.010711	0.010711
+2.36506	0.0	0.0			0.0136079	0.00560287	0.00560287
+2.58007	0.0	0.0			0.00243894	0.00192629	0.00192629
+2.79507	0.0	0.0			6.26497E-4	9.0009E-4	9.0009E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d15-x01-y01
+Path=/REF/TASSO_1989_I277658/d15-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.356253	0.0181566	0.0181566
+0.476678	0.0	0.0			0.548509	0.0209061	0.0209061
+0.953356	0.0	0.0			0.483556	0.0180662	0.0180662
+1.43003	0.0	0.0			0.325207	0.0134938	0.0134938
+1.90671	0.0	0.0			0.186202	0.00944466	0.00944466
+2.38339	0.0	0.0			0.103195	0.00673591	0.00673591
+2.86007	0.0	0.0			0.0521705	0.00461484	0.00461484
+3.33674	0.0	0.0			0.0236885	0.00295217	0.00295217
+3.81342	0.0	0.0			0.00950986	0.0017885	0.0017885
+4.2901	0.0	0.0			0.00455765	0.00123674	0.00123674
+4.76678	0.0	0.0			0.00299002	0.00101437	0.00101437
+5.24346	0.0	0.0			0.00147188	7.10366E-4	7.10366E-4
+5.72013	0.0	0.0			3.42301E-4	2.98103E-4	2.98103E-4
+6.19681	0.0	0.0			9.31814E-5	1.31957E-4	1.31957E-4
+7.15017	0.0	0.0			1.07372E-4	2.02169E-4	2.02169E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d16-x01-y01
+Path=/REF/TASSO_1989_I277658/d16-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.140987	0.0148676	0.0148676
+0.226229	0.0	0.0			0.420792	0.025709	0.025709
+0.452459	0.0	0.0			0.643768	0.030513	0.030513
+0.678688	0.0	0.0			0.71217	0.0304495	0.0304495
+0.904917	0.0	0.0			0.659888	0.0278552	0.0278552
+1.13115	0.0	0.0			0.556007	0.0243834	0.0243834
+1.35738	0.0	0.0			0.410055	0.0200282	0.0200282
+1.5836	0.0	0.0			0.283898	0.0161154	0.0161154
+1.80983	0.0	0.0			0.205329	0.0133114	0.0133114
+2.03606	0.0	0.0			0.135154	0.010715	0.010715
+2.26229	0.0	0.0			0.0889342	0.0085355	0.0085355
+2.48852	0.0	0.0			0.0597289	0.007442	0.007442
+2.71475	0.0	0.0			0.0331317	0.00517402	0.00517402
+2.94098	0.0	0.0			0.0250025	0.0046318	0.0046318
+3.16721	0.0	0.0			0.0182543	0.00419695	0.00419695
+3.39344	0.0	0.0			0.0109587	0.00343124	0.00343124
+3.61967	0.0	0.0			0.00712558	0.00246253	0.00246253
+3.8459	0.0	0.0			0.00374137	0.00197257	0.00197257
+4.07213	0.0	0.0			0.00292164	0.00207308	0.00207308
+4.29836	0.0	0.0			0.00141476	0.00147799	0.00147799
+4.52459	0.0	0.0			3.71085E-4	5.28604E-4	5.28604E-4
+4.97705	0.0	0.0			6.63372E-4	0.00100637	0.00100637
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d17-x01-y01
+Path=/REF/TASSO_1989_I277658/d17-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.0508061	0.0115498	0.0115498
+0.148011	0.0	0.0			0.17994	0.0203679	0.0203679
+0.296021	0.0	0.0			0.386474	0.0289825	0.0289825
+0.444032	0.0	0.0			0.619059	0.0354249	0.0354249
+0.592043	0.0	0.0			0.746102	0.0371871	0.0371871
+0.740053	0.0	0.0			0.791505	0.0367575	0.0367575
+0.888064	0.0	0.0			0.782306	0.0359207	0.0359207
+1.03607	0.0	0.0			0.726683	0.0335337	0.0335337
+1.18408	0.0	0.0			0.625062	0.0306644	0.0306644
+1.3321	0.0	0.0			0.486691	0.0262066	0.0262066
+1.48011	0.0	0.0			0.389063	0.0232498	0.0232498
+1.62812	0.0	0.0			0.281416	0.0192824	0.0192824
+1.77613	0.0	0.0			0.19943	0.01613	0.01613
+1.92414	0.0	0.0			0.166064	0.0154395	0.0154395
+2.07215	0.0	0.0			0.098764	0.0109742	0.0109742
+2.22016	0.0	0.0			0.0799133	0.0104303	0.0104303
+2.36817	0.0	0.0			0.0489087	0.00773872	0.00773872
+2.51618	0.0	0.0			0.0353906	0.00676423	0.00676423
+2.66419	0.0	0.0			0.0224507	0.00520311	0.00520311
+2.8122	0.0	0.0			0.0162397	0.00454746	0.00454746
+2.96021	0.0	0.0			0.0106466	0.00484659	0.00484659
+3.10822	0.0	0.0			0.00381661	0.00212455	0.00212455
+3.25624	0.0	0.0			0.00305851	0.0020431	0.0020431
+3.40425	0.0	0.0			0.00148492	0.00150676	0.00150676
+3.55226	0.0	0.0			0.00248271	0.00203814	0.00203814
+3.70027	0.0	0.0			0.00206347	0.00188817	0.00188817
+3.84828	0.0	0.0			4.56122E-4	6.49125E-4	6.49125E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d18-x01-y01
+Path=/REF/TASSO_1989_I277658/d18-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.0233535	0.0154864	0.0154864
+0.114157	0.0	0.0			0.0780593	0.0189156	0.0189156
+0.228314	0.0	0.0			0.150328	0.0204874	0.0204874
+0.342472	0.0	0.0			0.335561	0.0291988	0.0291988
+0.456629	0.0	0.0			0.518963	0.0353302	0.0353302
+0.570786	0.0	0.0			0.689945	0.0391347	0.0391347
+0.684943	0.0	0.0			0.833348	0.0421997	0.0421997
+0.7991	0.0	0.0			0.898711	0.0433144	0.0433144
+0.913258	0.0	0.0			0.966032	0.0448878	0.0448878
+1.02741	0.0	0.0			0.892514	0.0424474	0.0424474
+1.14157	0.0	0.0			0.785074	0.0387659	0.0387659
+1.25573	0.0	0.0			0.652508	0.0347113	0.0347113
+1.36989	0.0	0.0			0.532032	0.0307629	0.0307629
+1.48404	0.0	0.0			0.39099	0.0263961	0.0263961
+1.5982	0.0	0.0			0.304898	0.0230404	0.0230404
+1.71236	0.0	0.0			0.226712	0.0201623	0.0201623
+1.82651	0.0	0.0			0.155699	0.0163468	0.0163468
+1.94067	0.0	0.0			0.0947717	0.0125714	0.0125714
+2.05483	0.0	0.0			0.086699	0.0122043	0.0122043
+2.16899	0.0	0.0			0.0503505	0.00950477	0.00950477
+2.28314	0.0	0.0			0.0474359	0.00944345	0.00944345
+2.3973	0.0	0.0			0.0143124	0.00450721	0.00450721
+2.51146	0.0	0.0			0.013073	0.00459917	0.00459917
+2.62562	0.0	0.0			0.00510902	0.00287551	0.00287551
+2.73977	0.0	0.0			0.00630394	0.0032172	0.0032172
+2.85393	0.0	0.0			0.00338233	0.00223214	0.00223214
+2.96809	0.0	0.0			0.00242983	0.00185211	0.00185211
+3.08224	0.0	0.0			9.17682E-4	0.00145829	0.00145829
+3.1964	0.0	0.0			3.45039E-4	6.05051E-4	6.05051E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d19-x01-y01
+Path=/REF/TASSO_1989_I277658/d19-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.176873	0.0	0.0			0.0184433	0.0101189	0.0101189
+0.353745	0.0	0.0			0.201236	0.0289058	0.0289058
+0.530618	0.0	0.0			0.884733	0.0586027	0.0586027
+0.707491	0.0	0.0			1.89946	0.0847389	0.0847389
+0.884364	0.0	0.0			2.59165	0.0988886	0.0988886
+1.06124	0.0	0.0			2.43746	0.0940602	0.0940602
+1.23811	0.0	0.0			1.64753	0.0733925	0.0733925
+1.41498	0.0	0.0			0.929027	0.0531736	0.0531736
+1.59185	0.0	0.0			0.414019	0.0330852	0.0330852
+1.76873	0.0	0.0			0.187002	0.0218234	0.0218234
+1.9456	0.0	0.0			0.0666272	0.0118417	0.0118417
+2.12247	0.0	0.0			0.0185083	0.00579643	0.00579643
+2.29935	0.0	0.0			0.00787778	0.00352793	0.00352793
+2.47622	0.0	0.0			0.0040088	0.00286373	0.00286373
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d20-x01-y01
+Path=/REF/TASSO_1989_I277658/d20-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.353538	0.00733818	0.00733818
+0.436636	0.0	0.0			0.555232	0.00891498	0.00891498
+0.873273	0.0	0.0			0.513291	0.00823227	0.00823227
+1.30991	0.0	0.0			0.374234	0.00679464	0.00679464
+1.74654	0.0	0.0			0.222738	0.00503866	0.00503866
+2.18318	0.0	0.0			0.127714	0.00375137	0.00375137
+2.61982	0.0	0.0			0.0688428	0.00275476	0.00275476
+3.05645	0.0	0.0			0.036353	0.00195898	0.00195898
+3.49309	0.0	0.0			0.0189141	0.00145587	0.00145587
+3.92973	0.0	0.0			0.0103239	0.00108589	0.00108589
+4.36636	0.0	0.0			0.00423854	7.17477E-4	7.17477E-4
+4.803	0.0	0.0			0.00231259	5.27048E-4	5.27048E-4
+5.23964	0.0	0.0			0.00154451	4.66364E-4	4.66364E-4
+5.67627	0.0	0.0			4.36988E-4	2.49388E-4	2.49388E-4
+6.11291	0.0	0.0			4.82094E-4	2.60331E-4	2.60331E-4
+6.54954	0.0	0.0			4.13645E-5	7.14295E-5	7.14295E-5
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d21-x01-y01
+Path=/REF/TASSO_1989_I277658/d21-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.157094	0.0073563	0.0073563
+0.211621	0.0	0.0			0.389805	0.0107356	0.0107356
+0.423243	0.0	0.0			0.6114	0.0129831	0.0129831
+0.634864	0.0	0.0			0.731093	0.0138724	0.0138724
+0.846485	0.0	0.0			0.693607	0.0131272	0.0131272
+1.05811	0.0	0.0			0.596347	0.0119139	0.0119139
+1.26973	0.0	0.0			0.455283	0.0101238	0.0101238
+1.48135	0.0	0.0			0.325283	0.00834906	0.00834906
+1.69297	0.0	0.0			0.239087	0.00707488	0.00707488
+1.90459	0.0	0.0			0.162468	0.00583324	0.00583324
+2.11621	0.0	0.0			0.115681	0.00491965	0.00491965
+2.32783	0.0	0.0			0.0788492	0.00407508	0.00407508
+2.53946	0.0	0.0			0.0544074	0.00337603	0.00337603
+2.75108	0.0	0.0			0.0411822	0.00299666	0.00299666
+2.9627	0.0	0.0			0.0224921	0.00219914	0.00219914
+3.17432	0.0	0.0			0.019019	0.00206516	0.00206516
+3.38594	0.0	0.0			0.0113991	0.00162037	0.00162037
+3.59756	0.0	0.0			0.00790119	0.00141697	0.00141697
+3.80918	0.0	0.0			0.00432331	0.00107162	0.00107162
+4.0208	0.0	0.0			0.0034714	9.60636E-4	9.60636E-4
+4.23243	0.0	0.0			0.00245354	8.08006E-4	8.08006E-4
+4.44405	0.0	0.0			0.00149171	6.38265E-4	6.38265E-4
+4.65567	0.0	0.0			6.22712E-4	3.82417E-4	3.82417E-4
+4.86729	0.0	0.0			1.35383E-4	1.92226E-4	1.92226E-4
+5.07891	0.0	0.0			2.22472E-4	2.75115E-4	2.75115E-4
+5.29053	0.0	0.0			1.1013E-4	1.89936E-4	1.89936E-4
+6.13702	0.0	0.0			1.95967E-4	4.12855E-4	4.12855E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d22-x01-y01
+Path=/REF/TASSO_1989_I277658/d22-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.0538233	0.00662453	0.00662453
+0.138476	0.0	0.0			0.177142	0.0097474	0.0097474
+0.276952	0.0	0.0			0.358698	0.0128959	0.0128959
+0.415429	0.0	0.0			0.579229	0.0156882	0.0156882
+0.553905	0.0	0.0			0.74284	0.0174315	0.0174315
+0.692381	0.0	0.0			0.828926	0.0179058	0.0179058
+0.830857	0.0	0.0			0.825876	0.0176025	0.0176025
+0.969333	0.0	0.0			0.742527	0.0162347	0.0162347
+1.10781	0.0	0.0			0.640483	0.014821	0.014821
+1.24629	0.0	0.0			0.523255	0.0131821	0.0131821
+1.38476	0.0	0.0			0.417024	0.0116153	0.0116153
+1.52324	0.0	0.0			0.326599	0.0101448	0.0101448
+1.66171	0.0	0.0			0.259935	0.00904894	0.00904894
+1.80019	0.0	0.0			0.192583	0.00777344	0.00777344
+1.93867	0.0	0.0			0.157609	0.00701711	0.00701711
+2.07714	0.0	0.0			0.110155	0.00588882	0.00588882
+2.21562	0.0	0.0			0.0863705	0.00526332	0.00526332
+2.35409	0.0	0.0			0.0626911	0.00455828	0.00455828
+2.49257	0.0	0.0			0.0411539	0.00365932	0.00365932
+2.63105	0.0	0.0			0.0297422	0.00316506	0.00316506
+2.76952	0.0	0.0			0.0214976	0.00274007	0.00274007
+2.908	0.0	0.0			0.0145623	0.00231291	0.00231291
+3.04648	0.0	0.0			0.00918637	0.00186191	0.00186191
+3.18495	0.0	0.0			0.00641573	0.00163088	0.00163088
+3.32343	0.0	0.0			0.00668896	0.00173017	0.00173017
+3.4619	0.0	0.0			0.00222227	9.91558E-4	9.91558E-4
+3.60038	0.0	0.0			0.00161065	7.62853E-4	7.62853E-4
+3.73886	0.0	0.0			0.00134597	8.37116E-4	8.37116E-4
+3.87733	0.0	0.0			5.1078E-4	4.2876E-4	4.2876E-4
+4.15429	0.0	0.0			4.1029E-4	4.3641E-4	4.3641E-4
+4.29276	0.0	0.0			2.98925E-4	5.59245E-4	5.59245E-4
+4.43124	0.0	0.0			4.98209E-5	1.03712E-4	1.03712E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d23-x01-y01
+Path=/REF/TASSO_1989_I277658/d23-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.0128197	0.00604649	0.00604649
+0.104584	0.0	0.0			0.0779353	0.0105132	0.0105132
+0.209168	0.0	0.0			0.172122	0.0120211	0.0120211
+0.313752	0.0	0.0			0.304216	0.013994	0.013994
+0.418336	0.0	0.0			0.48696	0.0166442	0.0166442
+0.52292	0.0	0.0			0.665655	0.0189991	0.0189991
+0.627504	0.0	0.0			0.791474	0.0200538	0.0200538
+0.732088	0.0	0.0			0.906809	0.0213764	0.0213764
+0.836672	0.0	0.0			0.920551	0.020891	0.020891
+0.941256	0.0	0.0			0.887269	0.0204504	0.0204504
+1.04584	0.0	0.0			0.811481	0.0190937	0.0190937
+1.15042	0.0	0.0			0.691228	0.0175865	0.0175865
+1.25501	0.0	0.0			0.609401	0.0162171	0.0162171
+1.35959	0.0	0.0			0.4939	0.0146889	0.0146889
+1.46418	0.0	0.0			0.412962	0.0132514	0.0132514
+1.56876	0.0	0.0			0.333141	0.0121319	0.0121319
+1.67334	0.0	0.0			0.264615	0.0106575	0.0106575
+1.77793	0.0	0.0			0.200781	0.00941769	0.00941769
+1.88251	0.0	0.0			0.147775	0.00798624	0.00798624
+1.9871	0.0	0.0			0.109323	0.00695863	0.00695863
+2.09168	0.0	0.0			0.0811376	0.00597932	0.00597932
+2.19626	0.0	0.0			0.0540147	0.00497684	0.00497684
+2.30085	0.0	0.0			0.0467139	0.00461415	0.00461415
+2.40543	0.0	0.0			0.0282722	0.00366085	0.00366085
+2.51002	0.0	0.0			0.0165228	0.00275821	0.00275821
+2.6146	0.0	0.0			0.0116946	0.0024202	0.0024202
+2.71918	0.0	0.0			0.00979372	0.00228281	0.00228281
+2.82377	0.0	0.0			0.00429136	0.0014955	0.0014955
+2.92835	0.0	0.0			0.0034814	0.00141673	0.00141673
+3.03294	0.0	0.0			0.00119343	7.33308E-4	7.33308E-4
+3.13752	0.0	0.0			0.0026482	0.00122033	0.00122033
+3.2421	0.0	0.0			7.88037E-4	5.48658E-4	5.48658E-4
+3.34669	0.0	0.0			3.9452E-4	4.07635E-4	4.07635E-4
+3.45127	0.0	0.0			1.07855E-4	1.9147E-4	1.9147E-4
+3.55586	0.0	0.0			2.2245E-4	4.01624E-4	4.01624E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d24-x01-y01
+Path=/REF/TASSO_1989_I277658/d24-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.147199	0.0	0.0			0.00606903	0.00617042	0.00617042
+0.294398	0.0	0.0			0.0779001	0.010291	0.010291
+0.441597	0.0	0.0			0.430367	0.0193206	0.0193206
+0.588797	0.0	0.0			1.13855	0.0289285	0.0289285
+0.735996	0.0	0.0			2.08058	0.0393006	0.0393006
+0.883195	0.0	0.0			2.68924	0.0454341	0.0454341
+1.03039	0.0	0.0			2.61483	0.0449274	0.0449274
+1.17759	0.0	0.0			1.96108	0.03857	0.03857
+1.32479	0.0	0.0			1.24755	0.0302597	0.0302597
+1.47199	0.0	0.0			0.687818	0.0220741	0.0220741
+1.61919	0.0	0.0			0.369032	0.0161267	0.0161267
+1.76639	0.0	0.0			0.167771	0.0108906	0.0108906
+1.91359	0.0	0.0			0.070284	0.00703429	0.00703429
+2.06079	0.0	0.0			0.02686	0.0044215	0.0044215
+2.20799	0.0	0.0			0.0112887	0.00288835	0.00288835
+2.35519	0.0	0.0			0.00543805	0.00210693	0.00210693
+2.50239	0.0	0.0			0.00179941	0.00114203	0.00114203
+2.64958	0.0	0.0			5.79773E-4	7.483E-4	7.483E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d25-x01-y01
+Path=/REF/TASSO_1989_I277658/d25-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.362669	0.0150326	0.0150326
+0.397201	0.0	0.0			0.574602	0.0184121	0.0184121
+0.794402	0.0	0.0			0.531182	0.0168524	0.0168524
+1.1916	0.0	0.0			0.395802	0.013768	0.013768
+1.5888	0.0	0.0			0.260041	0.010697	0.010697
+1.986	0.0	0.0			0.163964	0.00829803	0.00829803
+2.38321	0.0	0.0			0.100114	0.00638841	0.00638841
+2.78041	0.0	0.0			0.0580011	0.00461311	0.00461311
+3.17761	0.0	0.0			0.0356441	0.00355135	0.00355135
+3.57481	0.0	0.0			0.0158986	0.0022498	0.0022498
+3.97201	0.0	0.0			0.00944278	0.00175981	0.00175981
+4.36921	0.0	0.0			0.00461312	0.00117611	0.00117611
+4.76641	0.0	0.0			0.00216784	8.28653E-4	8.28653E-4
+5.16361	0.0	0.0			0.0022599	9.05743E-4	9.05743E-4
+5.56081	0.0	0.0			7.67129E-4	4.99911E-4	4.99911E-4
+6.35522	0.0	0.0			1.17768E-4	2.03869E-4	2.03869E-4
+6.75242	0.0	0.0			2.21815E-4	2.72852E-4	2.72852E-4
+7.14962	0.0	0.0			1.19553E-4	2.2803E-4	2.2803E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d26-x01-y01
+Path=/REF/TASSO_1989_I277658/d26-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.157559	0.0139953	0.0139953
+0.194106	0.0	0.0			0.380922	0.0203832	0.0203832
+0.388211	0.0	0.0			0.603217	0.0252263	0.0252263
+0.582317	0.0	0.0			0.730477	0.0273881	0.0273881
+0.776422	0.0	0.0			0.719033	0.0267711	0.0267711
+0.970528	0.0	0.0			0.622942	0.0242605	0.0242605
+1.16463	0.0	0.0			0.503928	0.0211713	0.0211713
+1.35874	0.0	0.0			0.37782	0.0177266	0.0177266
+1.55284	0.0	0.0			0.29235	0.0154755	0.0154755
+1.74695	0.0	0.0			0.207085	0.0124763	0.0124763
+1.94106	0.0	0.0			0.154347	0.0106369	0.0106369
+2.13516	0.0	0.0			0.108439	0.00871192	0.00871192
+2.32927	0.0	0.0			0.077737	0.00731509	0.00731509
+2.52337	0.0	0.0			0.0689996	0.00689087	0.00689087
+2.71748	0.0	0.0			0.0464945	0.00562986	0.00562986
+2.91158	0.0	0.0			0.0366476	0.00490543	0.00490543
+3.10569	0.0	0.0			0.0206167	0.00357777	0.00357777
+3.2998	0.0	0.0			0.0168554	0.00340576	0.00340576
+3.4939	0.0	0.0			0.00924842	0.00234888	0.00234888
+3.68801	0.0	0.0			0.00713317	0.00202115	0.00202115
+3.88211	0.0	0.0			0.00467502	0.00188745	0.00188745
+4.07622	0.0	0.0			0.00197929	0.00102939	0.00102939
+4.27032	0.0	0.0			0.00101119	6.90777E-4	6.90777E-4
+4.46443	0.0	0.0			9.0526E-4	7.52889E-4	7.52889E-4
+4.65853	0.0	0.0			4.21582E-4	4.63066E-4	4.63066E-4
+4.85264	0.0	0.0			4.5989E-4	5.96283E-4	5.96283E-4
+5.43496	0.0	0.0			3.5611E-4	6.43875E-4	6.43875E-4
+5.82317	0.0	0.0			2.01097E-4	3.52002E-4	3.52002E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d27-x01-y01
+Path=/REF/TASSO_1989_I277658/d27-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.0554565	0.0113204	0.0113204
+0.127835	0.0	0.0			0.192864	0.0201713	0.0201713
+0.255671	0.0	0.0			0.347898	0.0237234	0.0237234
+0.383506	0.0	0.0			0.547232	0.0292195	0.0292195
+0.511341	0.0	0.0			0.739645	0.0336646	0.0336646
+0.639177	0.0	0.0			0.784557	0.0339108	0.0339108
+0.767012	0.0	0.0			0.819608	0.0342172	0.0342172
+0.894847	0.0	0.0			0.748819	0.0317468	0.0317468
+1.02268	0.0	0.0			0.684668	0.0297815	0.0297815
+1.15052	0.0	0.0			0.576769	0.0268474	0.0268474
+1.27835	0.0	0.0			0.492443	0.024355	0.024355
+1.40619	0.0	0.0			0.393396	0.021498	0.021498
+1.53402	0.0	0.0			0.314581	0.0188222	0.0188222
+1.66186	0.0	0.0			0.25843	0.0170142	0.0170142
+1.78969	0.0	0.0			0.195243	0.0144196	0.0144196
+1.91753	0.0	0.0			0.164627	0.0134858	0.0134858
+2.04537	0.0	0.0			0.130004	0.0116088	0.0116088
+2.1732	0.0	0.0			0.0965213	0.0100074	0.0100074
+2.30104	0.0	0.0			0.0750395	0.00881203	0.00881203
+2.42887	0.0	0.0			0.0581219	0.00763724	0.00763724
+2.55671	0.0	0.0			0.0515394	0.0071762	0.0071762
+2.68454	0.0	0.0			0.0339261	0.00555982	0.00555982
+2.81238	0.0	0.0			0.0227211	0.0045438	0.0045438
+2.94021	0.0	0.0			0.0175011	0.00399823	0.00399823
+3.06805	0.0	0.0			0.00815151	0.00265541	0.00265541
+3.19588	0.0	0.0			0.00335251	0.00144189	0.00144189
+3.32372	0.0	0.0			0.00266517	0.0013967	0.0013967
+3.45155	0.0	0.0			0.00369259	0.00193564	0.00193564
+3.57939	0.0	0.0			8.80986E-4	7.24789E-4	7.24789E-4
+3.70722	0.0	0.0			0.00131588	0.00107126	0.00107126
+3.9629	0.0	0.0			1.5188E-4	2.42673E-4	2.42673E-4
+4.09073	0.0	0.0			5.77219E-4	7.58899E-4	7.58899E-4
+4.72991	0.0	0.0			2.1583E-4	4.39522E-4	4.39522E-4
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d28-x01-y01
+Path=/REF/TASSO_1989_I277658/d28-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.0	0.0	0.0			0.0344728	0.0188068	0.0188068
+0.0958932	0.0	0.0			0.0624667	0.0165019	0.0165019
+0.191786	0.0	0.0			0.160929	0.0215705	0.0215705
+0.28768	0.0	0.0			0.275906	0.0257634	0.0257634
+0.383573	0.0	0.0			0.459471	0.0310853	0.0310853
+0.479466	0.0	0.0			0.636049	0.0361731	0.0361731
+0.575359	0.0	0.0			0.764204	0.0386521	0.0386521
+0.671253	0.0	0.0			0.82247	0.0392622	0.0392622
+0.767146	0.0	0.0			0.898817	0.040729	0.040729
+0.863039	0.0	0.0			0.875468	0.0393094	0.0393094
+0.958932	0.0	0.0			0.821944	0.0372726	0.0372726
+1.05482	0.0	0.0			0.79077	0.0362976	0.0362976
+1.15072	0.0	0.0			0.666994	0.0324731	0.0324731
+1.24661	0.0	0.0			0.610426	0.0311659	0.0311659
+1.3425	0.0	0.0			0.498441	0.0275146	0.0275146
+1.4384	0.0	0.0			0.430593	0.025778	0.025778
+1.53429	0.0	0.0			0.339461	0.0222285	0.0222285
+1.63018	0.0	0.0			0.282813	0.020557	0.020557
+1.72608	0.0	0.0			0.241033	0.0187834	0.0187834
+1.82197	0.0	0.0			0.181994	0.0162778	0.0162778
+1.91786	0.0	0.0			0.15302	0.0146853	0.0146853
+2.01376	0.0	0.0			0.113673	0.0127673	0.0127673
+2.10965	0.0	0.0			0.100733	0.0120082	0.0120082
+2.20554	0.0	0.0			0.0636258	0.00924614	0.00924614
+2.30144	0.0	0.0			0.0547947	0.00857615	0.00857615
+2.39733	0.0	0.0			0.0307932	0.00617095	0.00617095
+2.49322	0.0	0.0			0.0234824	0.00547383	0.00547383
+2.58912	0.0	0.0			0.0112156	0.00364153	0.00364153
+2.68501	0.0	0.0			0.01083	0.00367071	0.00367071
+2.7809	0.0	0.0			0.0045781	0.00236083	0.00236083
+2.8768	0.0	0.0			0.00334645	0.00182589	0.00182589
+2.97269	0.0	0.0			0.00207116	0.00149675	0.00149675
+3.06858	0.0	0.0			5.76669E-4	8.39875E-4	8.39875E-4
+3.16448	0.0	0.0			3.13473E-4	4.75376E-4	4.75376E-4
+3.64394	0.0	0.0			5.74701E-4	0.00106758	0.00106758
+# END YODA_SCATTER2D 
+
+
+# BEGIN YODA_SCATTER2D /REF/TASSO_1989_I277658/d29-x01-y01
+Path=/REF/TASSO_1989_I277658/d29-x01-y01
+Type=Scatter2D
+# xval   xerr-   xerr+   yval   yerr-   yerr+
+0.132646	0.0	0.0			0.00494399	0.00538917	0.00538917
+0.265291	0.0	0.0			0.0519579	0.0227039	0.0227039
+0.397937	0.0	0.0			0.346148	0.0404434	0.0404434
+0.530583	0.0	0.0			0.783783	0.0498074	0.0498074
+0.663228	0.0	0.0			1.62508	0.069437	0.069437
+0.795874	0.0	0.0			2.37291	0.0843669	0.0843669
+0.92852	0.0	0.0			2.67875	0.0894865	0.0894865
+1.06116	0.0	0.0			2.47387	0.0848544	0.0848544
+1.19381	0.0	0.0			1.86469	0.0717301	0.0717301
+1.32646	0.0	0.0			1.29751	0.0592264	0.0592264
+1.4591	0.0	0.0			0.785476	0.0448164	0.0448164
+1.59175	0.0	0.0			0.440086	0.032748	0.032748
+1.72439	0.0	0.0			0.211016	0.021353	0.021353
+1.85704	0.0	0.0			0.0904993	0.0140819	0.0140819
+1.98969	0.0	0.0			0.0357935	0.00892276	0.00892276
+2.12233	0.0	0.0			0.00890981	0.00400406	0.00400406
+2.25498	0.0	0.0			0.00398685	0.00275233	0.00275233
+2.38762	0.0	0.0			7.14804E-4	0.00136731	0.00136731
+2.52026	0.0	0.0			0.00166788	0.00327274	0.00327274
+# END YODA_SCATTER2D 
+
+
diff --git a/src/Analyses/TASSO_1990_S2148048.cc b/analyses/pluginPetra/TASSO_1990_S2148048.cc
rename from src/Analyses/TASSO_1990_S2148048.cc
rename to analyses/pluginPetra/TASSO_1990_S2148048.cc
diff --git a/data/anainfo/TASSO_1990_S2148048.info b/analyses/pluginPetra/TASSO_1990_S2148048.info
rename from data/anainfo/TASSO_1990_S2148048.info
rename to analyses/pluginPetra/TASSO_1990_S2148048.info
diff --git a/data/plotinfo/TASSO_1990_S2148048.plot b/analyses/pluginPetra/TASSO_1990_S2148048.plot
rename from data/plotinfo/TASSO_1990_S2148048.plot
rename to analyses/pluginPetra/TASSO_1990_S2148048.plot
diff --git a/data/refdata/TASSO_1990_S2148048.yoda b/analyses/pluginPetra/TASSO_1990_S2148048.yoda
rename from data/refdata/TASSO_1990_S2148048.yoda
rename to analyses/pluginPetra/TASSO_1990_S2148048.yoda
diff --git a/src/Analyses/STAR_2006_S6500200.cc b/analyses/pluginRHIC/STAR_2006_S6500200.cc
rename from src/Analyses/STAR_2006_S6500200.cc
rename to analyses/pluginRHIC/STAR_2006_S6500200.cc
diff --git a/data/refdata/STAR_2006_S6500200.dat b/analyses/pluginRHIC/STAR_2006_S6500200.dat
rename from data/refdata/STAR_2006_S6500200.dat
rename to analyses/pluginRHIC/STAR_2006_S6500200.dat
diff --git a/data/anainfo/STAR_2006_S6500200.info b/analyses/pluginRHIC/STAR_2006_S6500200.info
rename from data/anainfo/STAR_2006_S6500200.info
rename to analyses/pluginRHIC/STAR_2006_S6500200.info
diff --git a/data/plotinfo/STAR_2006_S6500200.plot b/analyses/pluginRHIC/STAR_2006_S6500200.plot
rename from data/plotinfo/STAR_2006_S6500200.plot
rename to analyses/pluginRHIC/STAR_2006_S6500200.plot
diff --git a/data/refdata/STAR_2006_S6500200.yoda b/analyses/pluginRHIC/STAR_2006_S6500200.yoda
rename from data/refdata/STAR_2006_S6500200.yoda
rename to analyses/pluginRHIC/STAR_2006_S6500200.yoda
diff --git a/src/Analyses/STAR_2006_S6860818.cc b/analyses/pluginRHIC/STAR_2006_S6860818.cc
rename from src/Analyses/STAR_2006_S6860818.cc
rename to analyses/pluginRHIC/STAR_2006_S6860818.cc
diff --git a/data/refdata/STAR_2006_S6860818.dat b/analyses/pluginRHIC/STAR_2006_S6860818.dat
rename from data/refdata/STAR_2006_S6860818.dat
rename to analyses/pluginRHIC/STAR_2006_S6860818.dat
diff --git a/data/anainfo/STAR_2006_S6860818.info b/analyses/pluginRHIC/STAR_2006_S6860818.info
rename from data/anainfo/STAR_2006_S6860818.info
rename to analyses/pluginRHIC/STAR_2006_S6860818.info
diff --git a/data/plotinfo/STAR_2006_S6860818.plot b/analyses/pluginRHIC/STAR_2006_S6860818.plot
rename from data/plotinfo/STAR_2006_S6860818.plot
rename to analyses/pluginRHIC/STAR_2006_S6860818.plot
diff --git a/data/refdata/STAR_2006_S6860818.yoda b/analyses/pluginRHIC/STAR_2006_S6860818.yoda
rename from data/refdata/STAR_2006_S6860818.yoda
rename to analyses/pluginRHIC/STAR_2006_S6860818.yoda
diff --git a/src/Analyses/STAR_2006_S6870392.cc b/analyses/pluginRHIC/STAR_2006_S6870392.cc
rename from src/Analyses/STAR_2006_S6870392.cc
rename to analyses/pluginRHIC/STAR_2006_S6870392.cc
diff --git a/data/refdata/STAR_2006_S6870392.dat b/analyses/pluginRHIC/STAR_2006_S6870392.dat
rename from data/refdata/STAR_2006_S6870392.dat
rename to analyses/pluginRHIC/STAR_2006_S6870392.dat
diff --git a/data/anainfo/STAR_2006_S6870392.info b/analyses/pluginRHIC/STAR_2006_S6870392.info
rename from data/anainfo/STAR_2006_S6870392.info
rename to analyses/pluginRHIC/STAR_2006_S6870392.info
diff --git a/data/plotinfo/STAR_2006_S6870392.plot b/analyses/pluginRHIC/STAR_2006_S6870392.plot
rename from data/plotinfo/STAR_2006_S6870392.plot
rename to analyses/pluginRHIC/STAR_2006_S6870392.plot
diff --git a/data/refdata/STAR_2006_S6870392.yoda b/analyses/pluginRHIC/STAR_2006_S6870392.yoda
rename from data/refdata/STAR_2006_S6870392.yoda
rename to analyses/pluginRHIC/STAR_2006_S6870392.yoda
diff --git a/src/Analyses/STAR_2008_S7869363.cc b/analyses/pluginRHIC/STAR_2008_S7869363.cc
rename from src/Analyses/STAR_2008_S7869363.cc
rename to analyses/pluginRHIC/STAR_2008_S7869363.cc
diff --git a/data/anainfo/STAR_2008_S7869363.info b/analyses/pluginRHIC/STAR_2008_S7869363.info
rename from data/anainfo/STAR_2008_S7869363.info
rename to analyses/pluginRHIC/STAR_2008_S7869363.info
diff --git a/data/plotinfo/STAR_2008_S7869363.plot b/analyses/pluginRHIC/STAR_2008_S7869363.plot
rename from data/plotinfo/STAR_2008_S7869363.plot
rename to analyses/pluginRHIC/STAR_2008_S7869363.plot
diff --git a/data/refdata/STAR_2008_S7869363.yoda b/analyses/pluginRHIC/STAR_2008_S7869363.yoda
rename from data/refdata/STAR_2008_S7869363.yoda
rename to analyses/pluginRHIC/STAR_2008_S7869363.yoda
diff --git a/src/Analyses/STAR_2008_S7993412.cc b/analyses/pluginRHIC/STAR_2008_S7993412.cc
rename from src/Analyses/STAR_2008_S7993412.cc
rename to analyses/pluginRHIC/STAR_2008_S7993412.cc
diff --git a/data/refdata/STAR_2008_S7993412.dat b/analyses/pluginRHIC/STAR_2008_S7993412.dat
rename from data/refdata/STAR_2008_S7993412.dat
rename to analyses/pluginRHIC/STAR_2008_S7993412.dat
diff --git a/data/anainfo/STAR_2008_S7993412.info b/analyses/pluginRHIC/STAR_2008_S7993412.info
rename from data/anainfo/STAR_2008_S7993412.info
rename to analyses/pluginRHIC/STAR_2008_S7993412.info
diff --git a/data/plotinfo/STAR_2008_S7993412.plot b/analyses/pluginRHIC/STAR_2008_S7993412.plot
rename from data/plotinfo/STAR_2008_S7993412.plot
rename to analyses/pluginRHIC/STAR_2008_S7993412.plot
diff --git a/data/refdata/STAR_2008_S7993412.yoda b/analyses/pluginRHIC/STAR_2008_S7993412.yoda
rename from data/refdata/STAR_2008_S7993412.yoda
rename to analyses/pluginRHIC/STAR_2008_S7993412.yoda
diff --git a/src/Analyses/STAR_2009_UE_HELEN.cc b/analyses/pluginRHIC/STAR_2009_UE_HELEN.cc
rename from src/Analyses/STAR_2009_UE_HELEN.cc
rename to analyses/pluginRHIC/STAR_2009_UE_HELEN.cc
diff --git a/data/refdata/STAR_2009_UE_HELEN.dat b/analyses/pluginRHIC/STAR_2009_UE_HELEN.dat
rename from data/refdata/STAR_2009_UE_HELEN.dat
rename to analyses/pluginRHIC/STAR_2009_UE_HELEN.dat
diff --git a/data/anainfo/STAR_2009_UE_HELEN.info b/analyses/pluginRHIC/STAR_2009_UE_HELEN.info
rename from data/anainfo/STAR_2009_UE_HELEN.info
rename to analyses/pluginRHIC/STAR_2009_UE_HELEN.info
diff --git a/data/plotinfo/STAR_2009_UE_HELEN.plot b/analyses/pluginRHIC/STAR_2009_UE_HELEN.plot
rename from data/plotinfo/STAR_2009_UE_HELEN.plot
rename to analyses/pluginRHIC/STAR_2009_UE_HELEN.plot
diff --git a/data/refdata/STAR_2009_UE_HELEN.yoda b/analyses/pluginRHIC/STAR_2009_UE_HELEN.yoda
rename from data/refdata/STAR_2009_UE_HELEN.yoda
rename to analyses/pluginRHIC/STAR_2009_UE_HELEN.yoda
diff --git a/src/Analyses/UA1_1990_S2044935.cc b/analyses/pluginSPS/UA1_1990_S2044935.cc
rename from src/Analyses/UA1_1990_S2044935.cc
rename to analyses/pluginSPS/UA1_1990_S2044935.cc
diff --git a/data/anainfo/UA1_1990_S2044935.info b/analyses/pluginSPS/UA1_1990_S2044935.info
rename from data/anainfo/UA1_1990_S2044935.info
rename to analyses/pluginSPS/UA1_1990_S2044935.info
diff --git a/data/plotinfo/UA1_1990_S2044935.plot b/analyses/pluginSPS/UA1_1990_S2044935.plot
rename from data/plotinfo/UA1_1990_S2044935.plot
rename to analyses/pluginSPS/UA1_1990_S2044935.plot
diff --git a/data/refdata/UA1_1990_S2044935.yoda b/analyses/pluginSPS/UA1_1990_S2044935.yoda
rename from data/refdata/UA1_1990_S2044935.yoda
rename to analyses/pluginSPS/UA1_1990_S2044935.yoda
diff --git a/src/Analyses/UA5_1982_S875503.cc b/analyses/pluginSPS/UA5_1982_S875503.cc
rename from src/Analyses/UA5_1982_S875503.cc
rename to analyses/pluginSPS/UA5_1982_S875503.cc
diff --git a/data/anainfo/UA5_1982_S875503.info b/analyses/pluginSPS/UA5_1982_S875503.info
rename from data/anainfo/UA5_1982_S875503.info
rename to analyses/pluginSPS/UA5_1982_S875503.info
diff --git a/data/plotinfo/UA5_1982_S875503.plot b/analyses/pluginSPS/UA5_1982_S875503.plot
rename from data/plotinfo/UA5_1982_S875503.plot
rename to analyses/pluginSPS/UA5_1982_S875503.plot
diff --git a/data/refdata/UA5_1982_S875503.yoda b/analyses/pluginSPS/UA5_1982_S875503.yoda
rename from data/refdata/UA5_1982_S875503.yoda
rename to analyses/pluginSPS/UA5_1982_S875503.yoda
diff --git a/src/Analyses/UA5_1986_S1583476.cc b/analyses/pluginSPS/UA5_1986_S1583476.cc
rename from src/Analyses/UA5_1986_S1583476.cc
rename to analyses/pluginSPS/UA5_1986_S1583476.cc
diff --git a/data/anainfo/UA5_1986_S1583476.info b/analyses/pluginSPS/UA5_1986_S1583476.info
rename from data/anainfo/UA5_1986_S1583476.info
rename to analyses/pluginSPS/UA5_1986_S1583476.info
diff --git a/data/plotinfo/UA5_1986_S1583476.plot b/analyses/pluginSPS/UA5_1986_S1583476.plot
rename from data/plotinfo/UA5_1986_S1583476.plot
rename to analyses/pluginSPS/UA5_1986_S1583476.plot
diff --git a/data/refdata/UA5_1986_S1583476.yoda b/analyses/pluginSPS/UA5_1986_S1583476.yoda
rename from data/refdata/UA5_1986_S1583476.yoda
rename to analyses/pluginSPS/UA5_1986_S1583476.yoda
diff --git a/src/Analyses/UA5_1987_S1640666.cc b/analyses/pluginSPS/UA5_1987_S1640666.cc
rename from src/Analyses/UA5_1987_S1640666.cc
rename to analyses/pluginSPS/UA5_1987_S1640666.cc
diff --git a/data/anainfo/UA5_1987_S1640666.info b/analyses/pluginSPS/UA5_1987_S1640666.info
rename from data/anainfo/UA5_1987_S1640666.info
rename to analyses/pluginSPS/UA5_1987_S1640666.info
diff --git a/data/plotinfo/UA5_1987_S1640666.plot b/analyses/pluginSPS/UA5_1987_S1640666.plot
rename from data/plotinfo/UA5_1987_S1640666.plot
rename to analyses/pluginSPS/UA5_1987_S1640666.plot
diff --git a/data/refdata/UA5_1987_S1640666.yoda b/analyses/pluginSPS/UA5_1987_S1640666.yoda
rename from data/refdata/UA5_1987_S1640666.yoda
rename to analyses/pluginSPS/UA5_1987_S1640666.yoda
diff --git a/src/Analyses/UA5_1988_S1867512.cc b/analyses/pluginSPS/UA5_1988_S1867512.cc
rename from src/Analyses/UA5_1988_S1867512.cc
rename to analyses/pluginSPS/UA5_1988_S1867512.cc
diff --git a/data/anainfo/UA5_1988_S1867512.info b/analyses/pluginSPS/UA5_1988_S1867512.info
rename from data/anainfo/UA5_1988_S1867512.info
rename to analyses/pluginSPS/UA5_1988_S1867512.info
diff --git a/data/plotinfo/UA5_1988_S1867512.plot b/analyses/pluginSPS/UA5_1988_S1867512.plot
rename from data/plotinfo/UA5_1988_S1867512.plot
rename to analyses/pluginSPS/UA5_1988_S1867512.plot
diff --git a/data/refdata/UA5_1988_S1867512.yoda b/analyses/pluginSPS/UA5_1988_S1867512.yoda
rename from data/refdata/UA5_1988_S1867512.yoda
rename to analyses/pluginSPS/UA5_1988_S1867512.yoda
diff --git a/src/Analyses/UA5_1989_S1926373.cc b/analyses/pluginSPS/UA5_1989_S1926373.cc
rename from src/Analyses/UA5_1989_S1926373.cc
rename to analyses/pluginSPS/UA5_1989_S1926373.cc
diff --git a/data/anainfo/UA5_1989_S1926373.info b/analyses/pluginSPS/UA5_1989_S1926373.info
rename from data/anainfo/UA5_1989_S1926373.info
rename to analyses/pluginSPS/UA5_1989_S1926373.info
diff --git a/data/plotinfo/UA5_1989_S1926373.plot b/analyses/pluginSPS/UA5_1989_S1926373.plot
rename from data/plotinfo/UA5_1989_S1926373.plot
rename to analyses/pluginSPS/UA5_1989_S1926373.plot
diff --git a/data/refdata/UA5_1989_S1926373.yoda b/analyses/pluginSPS/UA5_1989_S1926373.yoda
rename from data/refdata/UA5_1989_S1926373.yoda
rename to analyses/pluginSPS/UA5_1989_S1926373.yoda
diff --git a/src/Analyses/CMSTOTEM_2014_I1294140.cc b/analyses/pluginTOTEM/CMSTOTEM_2014_I1294140.cc
rename from src/Analyses/CMSTOTEM_2014_I1294140.cc
rename to analyses/pluginTOTEM/CMSTOTEM_2014_I1294140.cc
diff --git a/data/anainfo/CMSTOTEM_2014_I1294140.info b/analyses/pluginTOTEM/CMSTOTEM_2014_I1294140.info
rename from data/anainfo/CMSTOTEM_2014_I1294140.info
rename to analyses/pluginTOTEM/CMSTOTEM_2014_I1294140.info
diff --git a/data/plotinfo/CMSTOTEM_2014_I1294140.plot b/analyses/pluginTOTEM/CMSTOTEM_2014_I1294140.plot
rename from data/plotinfo/CMSTOTEM_2014_I1294140.plot
rename to analyses/pluginTOTEM/CMSTOTEM_2014_I1294140.plot
diff --git a/data/refdata/CMSTOTEM_2014_I1294140.yoda b/analyses/pluginTOTEM/CMSTOTEM_2014_I1294140.yoda
rename from data/refdata/CMSTOTEM_2014_I1294140.yoda
rename to analyses/pluginTOTEM/CMSTOTEM_2014_I1294140.yoda
diff --git a/src/Analyses/TOTEM_2012_I1115294.cc b/analyses/pluginTOTEM/TOTEM_2012_I1115294.cc
rename from src/Analyses/TOTEM_2012_I1115294.cc
rename to analyses/pluginTOTEM/TOTEM_2012_I1115294.cc
diff --git a/data/refdata/TOTEM_2012_I1115294.dat b/analyses/pluginTOTEM/TOTEM_2012_I1115294.dat
rename from data/refdata/TOTEM_2012_I1115294.dat
rename to analyses/pluginTOTEM/TOTEM_2012_I1115294.dat
diff --git a/data/anainfo/TOTEM_2012_I1115294.info b/analyses/pluginTOTEM/TOTEM_2012_I1115294.info
rename from data/anainfo/TOTEM_2012_I1115294.info
rename to analyses/pluginTOTEM/TOTEM_2012_I1115294.info
diff --git a/data/plotinfo/TOTEM_2012_I1115294.plot b/analyses/pluginTOTEM/TOTEM_2012_I1115294.plot
rename from data/plotinfo/TOTEM_2012_I1115294.plot
rename to analyses/pluginTOTEM/TOTEM_2012_I1115294.plot
diff --git a/data/refdata/TOTEM_2012_I1115294.yoda b/analyses/pluginTOTEM/TOTEM_2012_I1115294.yoda
rename from data/refdata/TOTEM_2012_I1115294.yoda
rename to analyses/pluginTOTEM/TOTEM_2012_I1115294.yoda
diff --git a/src/Analyses/TOTEM_2012_I1220862.cc b/analyses/pluginTOTEM/TOTEM_2012_I1220862.cc
rename from src/Analyses/TOTEM_2012_I1220862.cc
rename to analyses/pluginTOTEM/TOTEM_2012_I1220862.cc
diff --git a/data/anainfo/TOTEM_2012_I1220862.info b/analyses/pluginTOTEM/TOTEM_2012_I1220862.info
rename from data/anainfo/TOTEM_2012_I1220862.info
rename to analyses/pluginTOTEM/TOTEM_2012_I1220862.info
diff --git a/data/plotinfo/TOTEM_2012_I1220862.plot b/analyses/pluginTOTEM/TOTEM_2012_I1220862.plot
rename from data/plotinfo/TOTEM_2012_I1220862.plot
rename to analyses/pluginTOTEM/TOTEM_2012_I1220862.plot
diff --git a/data/refdata/TOTEM_2012_I1220862.yoda b/analyses/pluginTOTEM/TOTEM_2012_I1220862.yoda
rename from data/refdata/TOTEM_2012_I1220862.yoda
rename to analyses/pluginTOTEM/TOTEM_2012_I1220862.yoda
diff --git a/src/Analyses/TOTEM_2014_I1328627.cc b/analyses/pluginTOTEM/TOTEM_2014_I1328627.cc
rename from src/Analyses/TOTEM_2014_I1328627.cc
rename to analyses/pluginTOTEM/TOTEM_2014_I1328627.cc
diff --git a/data/anainfo/TOTEM_2014_I1328627.info b/analyses/pluginTOTEM/TOTEM_2014_I1328627.info
rename from data/anainfo/TOTEM_2014_I1328627.info
rename to analyses/pluginTOTEM/TOTEM_2014_I1328627.info
diff --git a/data/plotinfo/TOTEM_2014_I1328627.plot b/analyses/pluginTOTEM/TOTEM_2014_I1328627.plot
rename from data/plotinfo/TOTEM_2014_I1328627.plot
rename to analyses/pluginTOTEM/TOTEM_2014_I1328627.plot
diff --git a/data/refdata/TOTEM_2014_I1328627.yoda b/analyses/pluginTOTEM/TOTEM_2014_I1328627.yoda
rename from data/refdata/TOTEM_2014_I1328627.yoda
rename to analyses/pluginTOTEM/TOTEM_2014_I1328627.yoda
diff --git a/avglist b/avglist
new file mode 100755
--- /dev/null
+++ b/avglist
@@ -0,0 +1,14 @@
+#! /usr/bin/env python
+
+import sys
+argstr = "".join(sys.argv[1:])
+if argstr == "-":
+    valstr = sys.stdin.read()
+else:
+    valstr = argstr
+
+vals = [float(x) for x in valstr.split(",")]
+avgvals = []
+for i in range(len(vals)-1):
+    avgvals.append((vals[i]+vals[i+1])/2.)
+print ", ".join(["{:0.3f}".format(x) for x in avgvals])
diff --git a/bin/make-plots b/bin/make-plots
--- a/bin/make-plots
+++ b/bin/make-plots
@@ -1,2752 +1,2820 @@
 #! /usr/bin/env python
 
 """\
 Usage: %prog [options] file.dat [file2.dat ...]
 
 TODO
  * Optimise output for e.g. lots of same-height bins in a row
  * Add a RatioFullRange directive to show the full range of error bars + MC envelope in the ratio
  * Tidy LaTeX-writing code -- faster to compile one doc only, then split it?
  * Handle boolean values flexibly (yes, no, true, false, etc. as well as 1, 0)
 """
 
 ##
 ## This program is copyright by Hendrik Hoeth <hoeth@linta.de> and
 ## the Rivet team https://rivet.hepforge.org. It may be used
 ## for scientific and private purposes. Patches are welcome, but please don't
 ## redistribute changed versions yourself.
 ##
 
 ## Check the Python version
 import sys
 if sys.version_info[:3] < (2,6,0):
     print "make-plots requires Python version >= 2.6.0... exiting"
     sys.exit(1)
 
 ## Try to rename the process on Linux
 try:
     import ctypes
     libc = ctypes.cdll.LoadLibrary('libc.so.6')
     libc.prctl(15, 'make-plots', 0, 0, 0)
 except Exception, e:
     pass
 
 
 import os, logging, re
 import tempfile
 import getopt
 import string
 from math import *
 
 
 ## Regex patterns
 pat_begin_block = re.compile(r'^#+\s*BEGIN ([A-Z0-9_]+) ?(\S+)?')
 pat_end_block =   re.compile('^#+\s*END ([A-Z0-9_]+)')
 pat_comment = re.compile('^#|^\s*$')
 pat_property = re.compile('^(\w+?)=(.*)$')
 pat_path_property  = re.compile('^(\S+?)::(\w+?)=(.*)$')
 
 
 def fuzzyeq(a, b, tolerance=1e-6):
     "Fuzzy equality comparison function for floats, with given fractional tolerance"
     # if type(a) is not float or type(a) is not float:
     #     print a, b
     if (a == 0 and abs(b) < 1e-12) or (b == 0 and abs(a) < 1e-12):
         return True
     return 2.0*abs(a-b)/abs(a+b) < tolerance
 
 def inrange(x, a, b):
     return x >= a and x < b
 
 def floatify(x):
     if type(x) is str:
         x = x.split()
     if not hasattr(x, "__len__"):
         x = [x]
     x = [float(a) for a in x]
     return x[0] if len(x) == 1 else x
 
 def floatpair(x):
     if type(x) is str:
         x = x.split()
     if hasattr(x, "__len__"):
         assert len(x) == 2
         return [float(a) for a in x]
     return [float(x), float(x)]
 
 
 def is_end_marker(line, blockname):
     m = pat_end_block.match(line)
     return m and m.group(1) == blockname
 
 def is_comment(line):
     return pat_comment.match(line) is not None
 
 
 
 class Described(object):
     "Inherited functionality for objects holding a 'description' dictionary"
 
     def __init__(self):
         pass
 
     def has_attr(self, key):
         return self.description.has_key(key)
 
     def set_attr(self, key, val):
         self.description[key] = val
 
     def attr(self, key, default=None):
         return self.description.get(key, default)
 
     def attr_bool(self, key, default=None):
         x = self.attr(key, default)
         if x is None: return None
         if str(x).lower() in ["1", "true", "yes", "on"]: return True
         if str(x).lower() in ["0", "false", "no", "off"]: return False
         return None
 
     def attr_int(self, key, default=None):
         x = self.attr(key, default)
         try:
             x = int(x)
         except:
             x = None
         return x
 
     def attr_float(self, key, default=None):
         x = self.attr(key, default)
         try:
             x = float(x)
         except:
             x = None
         return x
 
 
 
 class InputData(Described):
 
     def __init__(self, filename):
-        self.filename = filename+".dat"
+        self.filename = filename
+        if not self.filename.endswith(".dat"):
+            self.filename += ".dat"
         self.histos = {}
         self.special = {}
         self.functions = {}
 
         self.description = {}
         self.pathdescriptions = []
 
         self.is2dim = False
         f = open(self.filename)
         for line in f:
             m = pat_begin_block.match(line)
             if m:
                 name, path = m.group(1,2)
                 if path is None and name != 'PLOT':
                     raise Exception('BEGIN sections need a path name.')
 
                 ## Pass the reading of the block to separate functions
                 if name == 'PLOT':
                     self.read_input(f);
                 elif name == 'SPECIAL':
                     self.special[path] = Special(f)
                 elif name == 'HISTOGRAM' or name == 'HISTOGRAM2D':
                     self.histos[path] = Histogram(f, p=path)
                     # self.histos[path].path = path
                     self.description['is2dim'] = self.histos[path].is2dim
                 elif name == 'HISTO1D':
                     self.histos[path] = Histo1D(f, p=path)
                 elif name == 'HISTO2D':
                     self.histos[path] = Histo2D(f, p=path)
                     self.description['is2dim'] = True
+                elif name == 'COUNTER':
+                    self.histos[path] = Counter(f, p=path)
+                elif name == 'VALUE':
+                    self.histos[path] = Value(f, p=path)
                 elif name == 'FUNCTION':
                     self.functions[path] = Function(f)
 #            elif is_comment(line):
 #                continue
 #            else:
 #                self.read_path_based_input(line)
         f.close()
 
         self.apply_config_files(opts.CONFIGFILES)
 
         ## Plot (and subplot) sizing
         # TODO: Use attr functions and bools properly
         self.description.setdefault('PlotSizeX', 10.)
         if self.description['is2dim']:
             self.description['PlotSizeX'] -= 1.7
             self.description['MainPlot'] = '1'
             self.description['RatioPlot'] = '0'
 
         if self.description.has_key('PlotSize') and self.description['PlotSize']!='':
             plotsizes = self.description['PlotSize'].split(',')
             self.description['PlotSizeX'] = float(plotsizes[0])
             self.description['PlotSizeY'] = float(plotsizes[1])
             if len(plotsizes) == 3:
                 self.description['RatioPlotSizeY'] = float(plotsizes[2])
             del self.description['PlotSize']
 
         if self.description.get('MainPlot', '1') == '0':
             ## Ratio, no main
             self.description['RatioPlot'] = '1' #< don't allow both to be zero!
             self.description['PlotSizeY'] = 0.
             self.description.setdefault('RatioPlotSizeY', 9.)
         else:
             if self.description.get('RatioPlot', '0') == '1':
                 ## Main and ratio
                 self.description.setdefault('PlotSizeY', 6.)
                 self.description.setdefault('RatioPlotSizeY', self.description.get('RatioPlotYSize', 3.))
             else:
                 ## Main, no ratio
                 self.description.setdefault('PlotSizeY', self.description.get('PlotYSize', 9.))
                 self.description['RatioPlotSizeY'] = 0.
 
         ## Ensure numbers, not strings
         self.description['PlotSizeX'] = float(self.description['PlotSizeX'])
         self.description['PlotSizeY'] = float(self.description['PlotSizeY'])
         self.description['RatioPlotSizeY'] = float(self.description['RatioPlotSizeY'])
         # self.description['TopMargin'] = float(self.description['TopMargin'])
         # self.description['BottomMargin'] = float(self.description['BottomMargin'])
 
-        self.description['LogX'] = self.description.has_key('LogX') and self.description['LogX']=='1'
-        self.description['LogY'] = self.description.has_key('LogY') and self.description['LogY']=='1'
-        self.description['LogZ'] = self.description.has_key('LogZ') and self.description['LogZ']=='1'
+        self.description['LogX'] = str(self.description.get('LogX', 0)) in ["1", "yes", "true"]
+        self.description['LogY'] = str(self.description.get('LogY', 0)) in ["1", "yes", "true"]
+        self.description['LogZ'] = str(self.description.get('LogZ', 0)) in ["1", "yes", "true"]
         if self.description.has_key('Rebin'):
             for i in self.histos:
                 self.histos[i].description['Rebin'] = self.description['Rebin']
 
         histoordermap = {}
         histolist = self.histos.keys()
         if self.description.has_key('DrawOnly'):
             histolist = filter(self.histos.keys().count, self.description['DrawOnly'].strip().split())
         for histo in histolist:
             order = 0
             if self.histos[histo].description.has_key('PlotOrder'):
                 order = int(self.histos[histo].description['PlotOrder'])
             if not order in histoordermap:
                 histoordermap[order] = []
             histoordermap[order].append(histo)
         sortedhistolist = []
         for i in sorted(histoordermap.keys()):
             sortedhistolist.extend(histoordermap[i])
         self.description['DrawOnly'] = sortedhistolist
 
 
         ## Inherit various values from histograms if not explicitly set
         for k in ['LogX', 'LogY', 'LogZ',
                   'XLabel', 'YLabel', 'ZLabel',
                   'XCustomMajorTicks', 'YCustomMajorTicks', 'ZCustomMajorTicks']:
             self.inherit_from_histos(k)
 
         return
 
 
     @property
     def is2dim(self):
         return self.attr_bool("is2dim", False)
     @is2dim.setter
     def is2dim(self, val):
         self.set_attr("is2dim", val)
 
 
     @property
     def drawonly(self):
         x = self.attr("DrawOnly")
         if type(x) is str:
             self.drawonly = x #< use setter to listify
         return x if x else []
     @drawonly.setter
     def drawonly(self, val):
         if type(val) is str:
             val = val.strip().split()
         self.set_attr("DrawOnly", val)
 
 
     @property
     def stacklist(self):
         x = self.attr("Stack")
         if type(x) is str:
             self.stacklist = x #< use setter to listify
         return x if x else []
     @stacklist.setter
     def stacklist(self, val):
         if type(val) is str:
             val = val.strip().split()
         self.set_attr("Stack", val)
 
 
     @property
     def plotorder(self):
         x = self.attr("PlotOrder")
         if type(x) is str:
             self.plotorder = x #< use setter to listify
         return x if x else []
     @plotorder.setter
     def plotorder(self, val):
         if type(val) is str:
             val = val.strip().split()
         self.set_attr("PlotOrder", val)
 
 
     @property
     def plotsizex(self):
         return self.attr_float("PlotSizeX")
     @plotsizex.setter
     def plotsizex(self, val):
         self.set_attr("PlotSizeX", val)
 
     @property
     def plotsizey(self):
         return self.attr_float("PlotSizeY")
     @plotsizey.setter
     def plotsizey(self, val):
         self.set_attr("PlotSizeY", val)
 
     @property
     def plotsize(self):
         return [self.plotsizex, self.plotsizey]
     @plotsize.setter
     def plotsize(self, val):
         if type(val) is str:
             val = [float(x) for x in val.split(",")]
         assert len(val) == 2
         self.plotsizex = val[0]
         self.plotsizey = val[1]
 
     @property
     def ratiosizey(self):
         return self.attr_float("RatioPlotSizeY")
     @ratiosizey.setter
     def ratiosizey(self, val):
         self.set_attr("RatioPlotSizeY", val)
 
 
     @property
     def scale(self):
         return self.attr_float("Scale")
     @scale.setter
     def scale(self, val):
         self.set_attr("Scale", val)
 
 
     @property
     def xmin(self):
         return self.attr_float("XMin")
     @xmin.setter
     def xmin(self, val):
         self.set_attr("XMin", val)
 
     @property
     def xmax(self):
         return self.attr_float("XMax")
     @xmax.setter
     def xmax(self, val):
         self.set_attr("XMax", val)
 
     @property
     def xrange(self):
         return [self.xmin, self.xmax]
     @xrange.setter
     def xrange(self, val):
         if type(val) is str:
             val = [float(x) for x in val.split(",")]
         assert len(val) == 2
         self.xmin = val[0]
         self.xmax = val[1]
 
 
     @property
     def ymin(self):
         return self.attr_float("YMin")
     @ymin.setter
     def ymin(self, val):
         self.set_attr("YMin", val)
 
     @property
     def ymax(self):
         return self.attr_float("YMax")
     @ymax.setter
     def ymax(self, val):
         self.set_attr("YMax", val)
 
     @property
     def yrange(self):
         return [self.ymin, self.ymax]
     @yrange.setter
     def yrange(self, val):
         if type(val) is str:
             val = [float(y) for y in val.split(",")]
         assert len(val) == 2
         self.ymin = val[0]
         self.ymax = val[1]
 
 
     # TODO: add more rw properties for plotsize(x,y), ratiosize(y),
     #   show_mainplot, show_ratioplot, show_legend, log(x,y,z), rebin,
     #   drawonly, legendonly, plotorder, stack,
     #   label(x,y,z), majorticks(x,y,z), minorticks(x,y,z),
     #   min(x,y,z), max(x,y,z), range(x,y,z)
 
 
     def inherit_from_histos(self, k):
         """Note: this will inherit the key from a random histogram:
         only use if you're sure all histograms have this key!"""
         if not self.description.has_key(k):
             h = list(self.histos.itervalues())[0]
             if h.description.has_key(k):
                 self.description[k] = h.description[k]
 
 
     def read_input(self, f):
         for line in f:
             if is_end_marker(line, 'PLOT'):
                 break
             elif is_comment(line):
                 continue
             m = pat_property.match(line)
             if m:
                 prop, value = m.group(1,2)
                 if prop in self.description:
                     logging.debug("Overwriting property %s = %s -> %s" % (prop, self.description[prop], value))
                 ## Use strip here to deal with DOS newlines containing \r
                 self.description[prop.strip()] = value.strip()
 
 
     def apply_config_files(self, conffiles):
         if conffiles is not None:
             for filename in conffiles:
                 cf = open(filename,'r')
                 lines = cf.readlines()
                 for i in range(0, len(lines)):
                     ## First evaluate PLOT sections
                     m = pat_begin_block.match(lines[i])
                     if m and m.group(1) == 'PLOT' and re.match(m.group(2),self.filename):
                         while i<len(lines)-1:
                             i = i+1
                             if is_end_marker(lines[i], 'PLOT'):
                                 break
                             elif is_comment(lines[i]):
                                 continue
                             m = pat_property.match(lines[i])
                             if m:
                                 prop, value = m.group(1,2)
                                 if prop in self.description:
                                     logging.debug("Overwriting from conffile property %s = %s -> %s" % (prop, self.description[prop], value))
                                 ## Use strip here to deal with DOS newlines containing \r
                                 self.description[prop.strip()] = value.strip()
                     elif is_comment(lines[i]):
                         continue
                     else:
                         ## Then evaluate path-based settings, e.g. for HISTOGRAMs
                         m = pat_path_property.match(lines[i])
                         if m:
                             regex, prop, value = m.group(1,2,3)
                             for obj_dict in [self.special, self.histos, self.functions]:
                                 for path, obj in obj_dict.iteritems():
                                     if re.match(regex, path):
                                         ## Use strip here to deal with DOS newlines containing \r
                                         obj.description.update({prop.strip() : value.strip()})
                 cf.close()
 
 
 
 class Plot(object):
 
     def __init__(self, inputdata):
         pass
 
     def set_normalization(self,inputdata):
         for method in ['NormalizeToIntegral', 'NormalizeToSum']:
             if inputdata.description.has_key(method):
                 for i in inputdata.drawonly:
                     if not inputdata.histos[i].has_attr(method):
                         inputdata.histos[i].set_attr(method, inputdata.attr(method))
         if inputdata.scale:
             for i in inputdata.drawonly:
                 inputdata.histos[i].scale = inputdata.scale
         for i in inputdata.drawonly:
             inputdata.histos[i].mangle_input()
 
     def stack_histograms(self,inputdata):
         if inputdata.description.has_key('Stack'):
             stackhists = [h for h in inputdata.attr('Stack').strip().split() if h in inputdata.histos]
             previous = ''
             for i in stackhists:
                 if previous != '':
                     inputdata.histos[i].add(inputdata.histos[previous])
                 previous = i
 
     def set_histo_options(self,inputdata):
         if inputdata.description.has_key('ConnectGaps'):
             for i in inputdata.histos.keys():
                 if not inputdata.histos[i].description.has_key('ConnectGaps'):
                     inputdata.histos[i].description['ConnectGaps'] = inputdata.description['ConnectGaps']
+        # Counter and Value only have dummy x-axis, ticks wouldn't make sense here, so suppress them:
+        if 'Value object' in str(inputdata.histos) or 'Counter object' in str(inputdata.histos):
+          inputdata.description['XCustomMajorTicks'] = ''
+          inputdata.description['XCustomMinorTicks'] = ''
 
     def set_borders(self, inputdata):
         self.set_xmax(inputdata)
         self.set_xmin(inputdata)
         self.set_ymax(inputdata)
         self.set_ymin(inputdata)
         self.set_zmax(inputdata)
         self.set_zmin(inputdata)
         inputdata.description['Borders'] = (self.xmin, self.xmax, self.ymin, self.ymax, self.zmin, self.zmax)
 
     def set_xmin(self, inputdata):
         self.xmin = inputdata.xmin
         if self.xmin is None:
-            self.xmin = min(inputdata.histos[h].getXMin() for h in inputdata.description['DrawOnly'])
+            xmins = [inputdata.histos[h].getXMin() for h in inputdata.description['DrawOnly']]
+            self.xmin = min(xmins) if xmins else 0.0
 
     def set_xmax(self,inputdata):
         self.xmax = inputdata.xmax
         if self.xmax is None:
-            self.xmax = min(inputdata.histos[h].getXMax() for h in inputdata.description['DrawOnly'])
+            xmaxs = [inputdata.histos[h].getXMax() for h in inputdata.description['DrawOnly']]
+            self.xmax = min(xmaxs) if xmaxs else 1.0
+
 
     def set_ymin(self,inputdata):
         if inputdata.ymin is not None:
             self.ymin = inputdata.ymin
         else:
             ymins = [inputdata.histos[i].getYMin(self.xmin, self.xmax, inputdata.description['LogY']) for i in inputdata.attr('DrawOnly')]
-            minymin = min(ymins)
+            minymin = min(ymins) if ymins else 0.0
             if inputdata.description['is2dim']:
                 self.ymin = minymin
             else:
                 showzero = inputdata.attr_bool("ShowZero", True)
                 if showzero:
                     self.ymin = 0. if minymin > -1e-4 else 1.1*minymin
                 else:
                     self.ymin = 1.1*minymin if minymin < -1e-4 else 0 if minymin < 1e-4 else 0.9*minymin
                 if inputdata.description['LogY']:
                     ymins = [ymin for ymin in ymins if ymin > 0.0]
                     if not ymins:
                         if self.ymax == 0:
                             self.ymax = 1
                         ymins.append(2e-7*self.ymax)
                     minymin = min(ymins)
                     fullrange = opts.FULL_RANGE
                     if inputdata.has_attr('FullRange'):
                         fullrange = inputdata.attr_bool('FullRange')
                     self.ymin = minymin/1.7 if fullrange else max(minymin/1.7, 2e-7*self.ymax)
 
                 if self.ymin == self.ymax:
                     self.ymin -= 1
                     self.ymax += 1
 
     def set_ymax(self,inputdata):
         if inputdata.has_attr('YMax'):
             self.ymax = inputdata.attr_float('YMax')
         else:
-            self.ymax = max(inputdata.histos[h].getYMax(self.xmin, self.xmax) for h in inputdata.attr('DrawOnly'))
+            ymaxs = [inputdata.histos[h].getYMax(self.xmin, self.xmax) for h in inputdata.attr('DrawOnly')]
+            self.ymax = max(ymaxs) if ymaxs else 1.0
             if not inputdata.is2dim:
                 self.ymax *= (1.7 if inputdata.attr_bool('LogY') else 1.1)
 
     def set_zmin(self,inputdata):
         if inputdata.has_attr('ZMin'):
             self.zmin = inputdata.attr_float('ZMin')
         else:
             zmins = [inputdata.histos[i].getZMin(self.xmin, self.xmax, self.ymin, self.ymax) for i in inputdata.attr('DrawOnly')]
-            minzmin = min(zmins)
+            minzmin = min(zmins) if zmins else 0.0
             self.zmin = minzmin
             if zmins:
                 showzero = inputdata.attr_bool('ShowZero', True)
                 if showzero:
                     self.zmin = 0 if minzmin > -1e-4 else 1.1*minzmin
                 else:
                     self.zmin = 1.1*minzmin if minzmin < -1e-4 else 0. if minzmin < 1e-4 else 0.9*minzmin
                 if inputdata.attr_bool('LogZ', False):
                     zmins = [zmin for zmin in zmins if zmin > 0]
                     if not zmins:
                         if self.zmax == 0:
                             self.zmax = 1
                         zmins.append(2e-7*self.zmax)
                     minzmin = min(zmins)
                     fullrange = inputdata.attr_bool("FullRange", opts.FULL_RANGE)
                     self.zmin = minzmin/1.7 if fullrange else max(minzmin/1.7, 2e-7*self.zmax)
 
                 if self.zmin == self.zmax:
                     self.zmin -= 1
                     self.zmax += 1
 
     def set_zmax(self,inputdata):
         self.zmax = inputdata.attr_float('ZMax')
         if self.zmax is None:
             zmaxs = [inputdata.histos[h].getZMax(self.xmin, self.xmax, self.ymin, self.ymax) for h in inputdata.attr('DrawOnly')]
-            self.zmax = max(zmaxs) if zmaxs else 1
+            self.zmax = max(zmaxs) if zmaxs else 1.0
 
 
     def draw(self):
         pass
 
 
     def write_header(self,inputdata):
         if inputdata.description.has_key('LeftMargin') and inputdata.description['LeftMargin']!='':
             inputdata.description['LeftMargin'] = float(inputdata.description['LeftMargin'])
         else:
             inputdata.description['LeftMargin'] = 1.4
         if inputdata.description.has_key('RightMargin') and inputdata.description['RightMargin']!='':
             inputdata.description['RightMargin'] = float(inputdata.description['RightMargin'])
         else:
             inputdata.description['RightMargin'] = 0.35
         if inputdata.description.has_key('TopMargin') and inputdata.description['TopMargin']!='':
             inputdata.description['TopMargin'] = float(inputdata.description['TopMargin'])
         else:
             inputdata.description['TopMargin'] = 0.65
         if inputdata.description.has_key('BottomMargin') and inputdata.description['BottomMargin']!='':
             inputdata.description['BottomMargin'] = float(inputdata.description['BottomMargin'])
         else:
             inputdata.description['BottomMargin'] = 0.95
         if inputdata.description['is2dim']:
             inputdata.description['RightMargin'] += 1.7
         papersizex = inputdata.description['PlotSizeX'] + 0.1 + \
                      inputdata.description['LeftMargin'] + inputdata.description['RightMargin']
         papersizey = inputdata.description['PlotSizeY'] + inputdata.description['RatioPlotSizeY'] + 0.1 + \
                      inputdata.description['TopMargin'] + inputdata.description['BottomMargin']
         #
         out = ""
         out += '\\documentclass{article}\n'
         if opts.OUTPUT_FONT == "MINION":
             out += ('\\usepackage{minion}\n')
         elif opts.OUTPUT_FONT == "PALATINO_OSF":
             out += ('\\usepackage[osf,sc]{mathpazo}\n')
         elif opts.OUTPUT_FONT == "PALATINO":
             out += ('\\usepackage{mathpazo}\n')
         elif opts.OUTPUT_FONT == "TIMES":
             out += ('\\usepackage{mathptmx}\n')
         elif opts.OUTPUT_FONT == "HELVETICA":
             out += ('\\renewcommand{\\familydefault}{\\sfdefault}\n')
             out += ('\\usepackage{sfmath}\n')
             out += ('\\usepackage{helvet}\n')
             out += ('\\usepackage[symbolgreek]{mathastext}\n')
         for pkg in opts.LATEXPKGS:
             out += ('\\usepackage{%s}\n' % pkg)
         out += ('\\usepackage{pst-all}\n')
         out += ('\\usepackage{xcolor}\n')
         out += ('\\selectcolormodel{rgb}\n')
         out += ('\\definecolor{red}{HTML}{EE3311}\n') # (Google uses 'DC3912')
         out += ('\\definecolor{blue}{HTML}{3366FF}')
         out += ('\\definecolor{green}{HTML}{109618}')
         out += ('\\definecolor{orange}{HTML}{FF9900}')
         out += ('\\definecolor{lilac}{HTML}{990099}')
         out += ('\\usepackage{amsmath}\n')
         out += ('\\usepackage{amssymb}\n')
         out += ('\\usepackage{relsize}\n')
         out += ('\\usepackage[dvips,\n')
         out += ('  left=%4.3fcm, right=0cm,\n' % (inputdata.description['LeftMargin']-0.45,))
         out += ('  top=%4.3fcm,  bottom=0cm,\n' % (inputdata.description['TopMargin']-0.30,))
         out += ('  paperwidth=%scm,paperheight=%scm\n' % (papersizex,papersizey))
         out += (']{geometry}\n')
         out += ('\\begin{document}\n')
         out += ('\\pagestyle{empty}\n')
         out += ('\\SpecialCoor\n')
         out += ('\\begin{pspicture}(0,0)(0,0)\n')
         out += ('\\psset{xunit=%scm}\n' %(inputdata.description['PlotSizeX']))
         if inputdata.description['is2dim']:
             if inputdata.description.has_key('ColorSeries') and inputdata.description['ColorSeries']!='':
                 colorseries = inputdata.description['ColorSeries']
             else:
                 colorseries = '{hsb}{grad}[rgb]{0,0,1}{-.700,0,0}'
             out += ('\\definecolorseries{gradientcolors}%s\n' % colorseries)
             out += ('\\resetcolorseries[130]{gradientcolors}\n')
         return out
 
     def write_footer(self):
         out = ""
         out += ('\\end{pspicture}\n')
         out += ('\\end{document}\n')
         return out
 
 
 
 class MainPlot(Plot):
 
     def __init__(self, inputdata):
         self.set_normalization(inputdata)
         self.stack_histograms(inputdata)
         if (inputdata.description.has_key('GofLegend')  and inputdata.description['GofLegend']=='1') or \
            (inputdata.description.has_key('GofFrame')   and inputdata.description['GofFrame']!='') and not \
            (inputdata.description.has_key('TaylorPlot') and inputdata.description['TaylorPlot']=='1'):
             self.calculate_gof(inputdata)
         self.set_histo_options(inputdata)
         self.set_borders(inputdata)
         self.yoffset = inputdata.description['PlotSizeY']
         self.coors = Coordinates(inputdata)
 
     def draw(self, inputdata):
         out = ""
         out += ('\n%\n% MainPlot\n%\n')
         out += ('\\psset{yunit=%scm}\n' %(self.yoffset))
         out += ('\\rput(0,-1){%\n')
         out += ('\\psset{yunit=%scm}\n' %(inputdata.description['PlotSizeY']))
         out += self._draw(inputdata)
         out += ('}\n')
         return out
 
     def _draw(self, inputdata):
         out = ""
 
         # TODO: do this more compactly, e.g. by assigning sorting keys!
         if inputdata.attr_bool('DrawSpecialFirst', False):
-            for s in inputdata.special:
+            for s in inputdata.special.values():
                 out += s.draw(self.coors)
             if inputdata.attr_bool('DrawFunctionFirst', False):
-                for f in inputdata.functions:
+                for f in inputdata.functions.values():
                     out += f.draw(self.coors)
                 for i in inputdata.description['DrawOnly']:
                     out += inputdata.histos[i].draw(self.coors)
             else:
                 for i in inputdata.description['DrawOnly']:
                     out += inputdata.histos[i].draw(self.coors)
-                for f in inputdata.functions:
+                for f in inputdata.functions.values():
                     out += f.draw(self.coors)
         else:
             if inputdata.attr_bool('DrawFunctionFirst', False):
-                for f in inputdata.functions:
+                for f in inputdata.functions.values():
                     out += f.draw(self.coors)
                 for i in inputdata.description['DrawOnly']:
                     out += inputdata.histos[i].draw(self.coors)
             else:
                 for i in inputdata.description['DrawOnly']:
                     out += inputdata.histos[i].draw(self.coors)
-                for f in inputdata.functions:
+                for f in inputdata.functions.values():
                     out += f.draw(self.coors)
-            for i in inputdata.special.keys():
-                out += inputdata.special[i].draw(self.coors)
+            for s in inputdata.special.values():
+                out += s.draw(self.coors)
 
         if inputdata.attr_bool('Legend', False):
             legend = Legend(inputdata.description,inputdata.histos,inputdata.functions)
             out += legend.draw()
         if inputdata.description['is2dim']:
             colorscale = ColorScale(inputdata.description, self.coors)
             out += colorscale.draw()
         frame = Frame()
         out += frame.draw(inputdata)
 
         xcustommajortickmarks = inputdata.attr_int('XMajorTickMarks', -1)
         xcustomminortickmarks = inputdata.attr_int('XMinorTickMarks', -1)
 
         xcustommajorticks = xcustomminorticks = None
         if inputdata.attr('XCustomMajorTicks'):
             xcustommajorticks = []
             x_label_pairs = inputdata.attr('XCustomMajorTicks').strip().split() #'\t')
             if len(x_label_pairs) % 2 == 0:
                 for i in range(0, len(x_label_pairs), 2):
                     xcustommajorticks.append({'Value': float(x_label_pairs[i]), 'Label': x_label_pairs[i+1]})
             else:
                 print "Warning: XCustomMajorTicks requires an even number of alternating pos/label entries"
 
         if inputdata.attr('XCustomMinorTicks'):
             xs = inputdata.attr('XCustomMinorTicks').strip().split() #'\t')
             xcustomminorticks = [{'Value': float(x)} for x in xs]
 
         xticks = XTicks(inputdata.description, self.coors)
         drawxlabels = inputdata.attr_bool('PlotXTickLabels', True) and not inputdata.attr_bool('RatioPlot', False)
 
         out += xticks.draw(custommajortickmarks=xcustommajortickmarks,
                            customminortickmarks=xcustomminortickmarks,
                            custommajorticks=xcustommajorticks,
                            customminorticks=xcustomminorticks,
                            drawlabels=drawxlabels)
 
         ycustommajortickmarks = inputdata.attr_int('YMajorTickMarks', -1)
         ycustomminortickmarks = inputdata.attr_int('YMinorTickMarks', -1)
 
         ycustommajorticks = ycustomminorticks = None
         if inputdata.description.has_key('YCustomMajorTicks'):
             ycustommajorticks = []
             y_label_pairs = inputdata.description['YCustomMajorTicks'].strip().split() #'\t')
             if len(y_label_pairs) % 2 == 0:
                 for i in range(0, len(y_label_pairs), 2):
                     ycustommajorticks.append({'Value': float(y_label_pairs[i]), 'Label': y_label_pairs[i+1]})
             else:
                 print "Warning: YCustomMajorTicks requires an even number of alternating pos/label entries"
 
         if inputdata.has_attr('YCustomMinorTicks'):
             ys = inputdata.attr('YCustomMinorTicks').strip().split() #'\t')
             ycustomminorticks = [{'Value': float(y)} for y in ys]
 
         yticks = YTicks(inputdata.description, self.coors)
         drawylabels = inputdata.attr_bool('PlotYTickLabels', True)
 
         out += yticks.draw(custommajortickmarks=ycustommajortickmarks,
                            customminortickmarks=ycustomminortickmarks,
                            custommajorticks=ycustommajorticks,
                            customminorticks=ycustomminorticks,
                            drawlabels=drawylabels)
 
         labels = Labels(inputdata.description)
         if inputdata.attr_bool('RatioPlot', False):
             olab = labels.draw(['Title','YLabel'])
         else:
             if not inputdata.description['is2dim']:
                 olab = labels.draw(['Title','XLabel','YLabel'])
             else:
                 olab = labels.draw(['Title','XLabel','YLabel','ZLabel'])
         out += olab
         return out
 
 
     def calculate_gof(self, inputdata):
         refdata = inputdata.description.get('GofReference')
         if refdata is None:
             refdata = inputdata.description.get('RatioPlotReference')
 
         if refdata is None:
             inputdata.description['GofLegend'] = '0'
             inputdata.description['GofFrame'] = ''
             return
 
         def pickcolor(gof):
             color = None
             colordefs = {}
             for i in inputdata.description.setdefault('GofFrameColor', '0:green 3:yellow 6:red!70').strip().split():
                 foo = i.split(':')
                 if len(foo) != 2:
                     continue
                 colordefs[float(foo[0])] = foo[1]
             for i in sorted(colordefs.keys()):
                 if gof>=i:
                     color=colordefs[i]
             return color
 
         inputdata.description.setdefault('GofLegend', '0')
         inputdata.description.setdefault('GofFrame', '')
         inputdata.description.setdefault('FrameColor', None)
 
         for i in inputdata.description['DrawOnly']:
             if i == refdata:
                 continue
             if inputdata.description['GofLegend']!='1' and i!=inputdata.description['GofFrame']:
                 continue
 
             if inputdata.description.has_key('GofType') and inputdata.description['GofType']!='chi2':
                 return
             gof = inputdata.histos[i].getChi2(inputdata.histos[refdata])
             if i == inputdata.description['GofFrame'] and inputdata.description['FrameColor'] is None:
                 inputdata.description['FrameColor'] = pickcolor(gof)
             if inputdata.histos[i].description.setdefault('Title', '') != '':
                 inputdata.histos[i].description['Title'] += ', '
             inputdata.histos[i].description['Title'] += '$\\chi^2/n={}$%1.2f' %gof
 
 
 
 class TaylorPlot(Plot):
 
     def __init__(self, inputdata):
         self.refdata = inputdata.description['TaylorPlotReference']
         self.calculate_taylorcoordinates(inputdata)
 
     def calculate_taylorcoordinates(self,inputdata):
         foo = inputdata.description['DrawOnly'].pop(inputdata.description['DrawOnly'].index(self.refdata))
         inputdata.description['DrawOnly'].append(foo)
         for i in inputdata.description['DrawOnly']:
             print i
             print 'meanbinval  = ', inputdata.histos[i].getMeanBinValue()
             print 'sigmabinval = ', inputdata.histos[i].getSigmaBinValue()
             print 'chi2/nbins  = ', inputdata.histos[i].getChi2(inputdata.histos[self.refdata])
             print 'correlation = ', inputdata.histos[i].getCorrelation(inputdata.histos[self.refdata])
             print 'distance    = ', inputdata.histos[i].getRMSdistance(inputdata.histos[self.refdata])
 
 
 
 class RatioPlot(Plot):
 
     def __init__(self, inputdata):
 
         self.refdata = inputdata.description['RatioPlotReference']
         self.yoffset = inputdata.description['PlotSizeY'] + inputdata.description['RatioPlotSizeY']
 
         inputdata.description['RatioPlotStage'] = True
         inputdata.description['PlotSizeY'] = inputdata.description['RatioPlotSizeY']
-        inputdata.description['LogY'] = False
+        inputdata.description['LogY'] = False  # TODO: actually, log ratio plots could be useful...
 
         # TODO: It'd be nice it this wasn't so MC-specific
         if inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode']=='deviation':
             inputdata.description['YLabel'] = '$(\\text{MC}-\\text{data})$'
             inputdata.description['YMin'] = -3.5
             inputdata.description['YMax'] = 3.5
         elif inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode']=='datamc':
             inputdata.description['YLabel'] = 'Data/MC'
             inputdata.description['YMin'] = 0.5
             inputdata.description['YMax'] = 1.5
         else:
             inputdata.description['YLabel'] = 'MC/Data'
             inputdata.description['YMin'] = 0.5
             inputdata.description['YMax'] = 1.5
 
         if inputdata.description.has_key('RatioPlotYLabel'):
             inputdata.description['YLabel'] = inputdata.description['RatioPlotYLabel']
         inputdata.description['YLabel']='\\rput(-%s,0){%s}'%(0.5*inputdata.description['PlotSizeY']/inputdata.description['PlotSizeX'],inputdata.description['YLabel'])
 
         if inputdata.description.has_key('RatioPlotYMin'):
             inputdata.description['YMin'] = inputdata.description['RatioPlotYMin']
         if inputdata.description.has_key('RatioPlotYMax'):
             inputdata.description['YMax'] = inputdata.description['RatioPlotYMax']
 
         if not inputdata.description.has_key('RatioPlotErrorBandColor'):
             inputdata.description['RatioPlotErrorBandColor'] = 'yellow'
         if not inputdata.description.has_key('RatioPlotSameStyle') or inputdata.description['RatioPlotSameStyle'] == '0':
             inputdata.histos[self.refdata].description['ErrorBandColor'] = inputdata.description['RatioPlotErrorBandColor']
             inputdata.histos[self.refdata].description['ErrorBands'] = '1'
             inputdata.histos[self.refdata].description['ErrorBars'] = '0'
             inputdata.histos[self.refdata].description['LineStyle'] = 'solid'
             inputdata.histos[self.refdata].description['LineColor'] = 'black'
             inputdata.histos[self.refdata].description['LineWidth'] = '0.3pt'
             inputdata.histos[self.refdata].description['PolyMarker'] = ''
             inputdata.histos[self.refdata].description['ConnectGaps'] = '1'
 
         self.calculate_ratios(inputdata)
         self.set_borders(inputdata)
         self.coors = Coordinates(inputdata)
 
     def draw(self, inputdata):
         out = ""
         out += ('\n%\n% RatioPlot\n%\n')
         out += ('\\psset{yunit=%scm}\n' %(self.yoffset))
         out += ('\\rput(0,-1){%\n')
         out += ('\\psset{yunit=%scm}\n' %(inputdata.description['PlotSizeY']))
         out += self._draw(inputdata)
         out += ('}\n')
         return out
 
     def calculate_ratios(self, inputdata):
         foo = inputdata.description['DrawOnly'].pop(inputdata.description['DrawOnly'].index(self.refdata))
         if inputdata.histos[self.refdata].description.has_key('ErrorBands') and inputdata.histos[self.refdata].description['ErrorBands']=='1':
             inputdata.description['DrawOnly'].insert(0,foo)
         else:
             inputdata.description['DrawOnly'].append(foo)
         for i in inputdata.description['DrawOnly']:
             if i != self.refdata:
                 if inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode'] == 'deviation':
                     inputdata.histos[i].deviation(inputdata.histos[self.refdata])
                 elif inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode'] == 'datamc':
                     inputdata.histos[i].dividereverse(inputdata.histos[self.refdata])
                     inputdata.histos[i].description['ErrorBars'] = '1'
                 else:
                     inputdata.histos[i].divide(inputdata.histos[self.refdata])
         if inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode'] == 'deviation':
             inputdata.histos[self.refdata].deviation(inputdata.histos[self.refdata])
         elif inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode'] == 'datamc':
             inputdata.histos[self.refdata].dividereverse(inputdata.histos[self.refdata])
         else:
             inputdata.histos[self.refdata].divide(inputdata.histos[self.refdata])
 
     def _draw(self, inputdata):
         out = ""
         for i in inputdata.description['DrawOnly']:
             if inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode'] == 'datamc':
                 if i != self.refdata:
                     out += inputdata.histos[i].draw(self.coors)
             else:
                 out += inputdata.histos[i].draw(self.coors)
 
         frame = Frame()
         out += frame.draw(inputdata)
 
         # TODO: so much duplication with MainPlot... yuck!
         if inputdata.description.has_key('XMajorTickMarks') and inputdata.description['XMajorTickMarks'] != '':
             xcustommajortickmarks = int(inputdata.description['XMajorTickMarks'])
         else:
             xcustommajortickmarks = -1
         if inputdata.description.has_key('XMinorTickMarks') and inputdata.description['XMinorTickMarks'] != '':
             xcustomminortickmarks = int(inputdata.description['XMinorTickMarks'])
         else:
             xcustomminortickmarks =- 1
 
         xcustommajorticks = None
         if inputdata.description.has_key('XCustomMajorTicks'): # and inputdata.description['XCustomMajorTicks']!='':
             xcustommajorticks = []
             tickstr = inputdata.description['XCustomMajorTicks'].strip().split() #'\t')
             if not len(tickstr) % 2:
                 for i in range(0, len(tickstr), 2):
                     xcustommajorticks.append({'Value': float(tickstr[i]), 'Label': tickstr[i+1]})
 
         xcustomminorticks = None
         if inputdata.description.has_key('XCustomMinorTicks'): # and inputdata.description['XCustomMinorTicks']!='':
             xcustomminorticks = []
             tickstr = inputdata.description['XCustomMinorTicks'].strip().split() #'\t')
             for i in range(len(tickstr)):
                 xcustomminorticks.append({'Value': float(tickstr[i])})
 
         xticks = XTicks(inputdata.description, self.coors)
         drawlabels = not (inputdata.description.has_key('RatioPlotTickLabels') and inputdata.description['RatioPlotTickLabels']=='0')
         out += xticks.draw(custommajortickmarks=xcustommajortickmarks,
                            customminortickmarks=xcustomminortickmarks,
                            custommajorticks=xcustommajorticks,
                            customminorticks=xcustomminorticks,
                            drawlabels=drawlabels)
 
 
         ycustommajortickmarks = inputdata.attr('YMajorTickMarks', '')
         ycustommajortickmarks = int(ycustommajortickmarks) if ycustommajortickmarks else -1
 
         ycustomminortickmarks = inputdata.attr('YMinorTickMarks', '')
         ycustomminortickmarks = int(ycustomminortickmarks) if ycustomminortickmarks else -1
 
         ycustommajorticks = None
         if inputdata.description.has_key('YCustomMajorTicks'):
             ycustommajorticks = []
             tickstr = inputdata.description['YCustomMajorTicks'].strip().split() #'\t')
             if not len(tickstr) % 2:
                 for i in range(0, len(tickstr), 2):
                     ycustommajorticks.append({'Value': float(tickstr[i]), 'Label': tickstr[i+1]})
 
         ycustomminorticks = None
         if inputdata.description.has_key('YCustomMinorTicks'):
             ycustomminorticks = []
             tickstr = inputdata.description['YCustomMinorTicks'].strip().split() #'\t')
             for i in range(len(tickstr)):
                 ycustomminorticks.append({'Value': float(tickstr[i])})
 
         yticks = YTicks(inputdata.description, self.coors)
         out += yticks.draw(custommajortickmarks=ycustommajortickmarks,
                            customminortickmarks=ycustomminortickmarks,
                            custommajorticks=ycustommajorticks,
                            customminorticks=ycustomminorticks)
 
         if not inputdata.attr_bool('MainPlot', True) and inputdata.attr_bool('Legend', False):
             legend = Legend(inputdata.description, inputdata.histos, inputdata.functions)
             out += legend.draw()
 
         labels = Labels(inputdata.description)
         lnames = ['XLabel','YLabel']
         if not inputdata.attr_bool('MainPlot', True):
             lnames.append("Title")
         out += labels.draw(lnames)
         return out
 
 
 
 class Legend(Described):
 
     def __init__(self, description, histos, functions):
         self.histos = histos
         self.functions = functions
         self.description = description
 
     def draw(self):
         out = ""
         out += '\n%\n% Legend\n%\n'
         out += '\\rput[tr](%s,%s){%%\n' % (self.getLegendXPos(), self.getLegendYPos())
         ypos = -0.05*6/self.description['PlotSizeY']
 
         legendordermap = {}
         legendlist = self.description['DrawOnly']+self.functions.keys()
         if self.description.has_key('LegendOnly'):
             legendlist = []
             for legend in self.description['LegendOnly'].strip().split():
                 if legend in self.histos.keys() or legend in self.functions.keys():
                     legendlist.append(legend)
         for legend in legendlist:
             order = 0
             if self.histos.has_key(legend) and self.histos[legend].description.has_key('LegendOrder'):
                 order = int(self.histos[legend].description['LegendOrder'])
             if self.functions.has_key(legend) and self.functions[legend].description.has_key('LegendOrder'):
                 order = int(self.functions[legend].description['LegendOrder'])
             if not order in legendordermap:
                 legendordermap[order] = []
             legendordermap[order].append(legend)
         foo=[]
         for i in sorted(legendordermap.keys()):
             foo.extend(legendordermap[i])
 
         rel_xpos_sign = 1.0
         if self.getLegendAlign()=='r':
             rel_xpos_sign = -1.0
         xpos1 = -0.10*rel_xpos_sign
         xpos2 = -0.02*rel_xpos_sign
 
         for i in foo:
             if self.histos.has_key(i):
                 drawobject=self.histos[i]
             elif self.functions.has_key(i):
                 drawobject=self.functions[i]
             else:
                 continue
             title = drawobject.getTitle()
             if title == '':
                 continue
             else:
                 out += ('\\rput[B%s](%s,%s){%s}\n' %(self.getLegendAlign(),rel_xpos_sign*0.1,ypos,title))
                 out += ('\\rput[B%s](%s,%s){%s\n' %(self.getLegendAlign(),rel_xpos_sign*0.1,ypos,'%'))
                 if drawobject.getErrorBands():
                     out += ('\\psframe[linewidth=0pt,linestyle=none,fillstyle=solid,fillcolor=%s,opacity=%s]' %(drawobject.getErrorBandColor(),drawobject.getErrorBandOpacity()))
                     out += ('(%s, 0.033)(%s, 0.001)\n' %(xpos1, xpos2))
                 out += ('\\psline[linestyle=' + drawobject.getLineStyle() \
                             + ', linecolor=' + drawobject.getLineColor() \
                             + ', linewidth=' + drawobject.getLineWidth() \
                             + ', strokeopacity=' + drawobject.getLineOpacity() \
                             + ', opacity=' + drawobject.getFillOpacity())
                 if drawobject.getLineDash() != '':
                     out += (', dash=' + drawobject.getLineDash())
                 if drawobject.getFillStyle()!='none':
                     out += (', fillstyle=' + drawobject.getFillStyle() \
                                 + ', fillcolor='  + drawobject.getFillColor() \
                                 + ', hatchcolor=' + drawobject.getHatchColor() \
                                 + ']{C-C}(%s, 0.030)(%s, 0.030)(%s, 0.004)(%s, 0.004)(%s, 0.030)\n' \
                                 %(xpos1, xpos2, xpos2, xpos1, xpos1))
                 else:
                     out += ('](%s, 0.016)(%s, 0.016)\n' %(xpos1, xpos2))
                 if drawobject.getPolyMarker() != '':
                     out += ('  \\psdot[dotstyle=' + drawobject.getPolyMarker() \
                                 + ', dotsize='    + drawobject.getDotSize()   \
                                 + ', dotscale='   + drawobject.getDotScale()  \
                                 + ', linecolor='  + drawobject.getLineColor() \
                                 + ', linewidth='  + drawobject.getLineWidth() \
                                 + ', linestyle='  + drawobject.getLineStyle() \
                                 + ', fillstyle='  + drawobject.getFillStyle() \
                                 + ', fillcolor='  + drawobject.getFillColor() \
                                 + ', strokeopacity=' + drawobject.getLineOpacity() \
                                 + ', opacity=' + drawobject.getFillOpacity() \
                                 + ', hatchcolor=' + drawobject.getHatchColor())
                     if drawobject.getFillStyle()!='none':
                         out += ('](%s, 0.028)\n' % (rel_xpos_sign*-0.06))
                     else:
                         out += ('](%s, 0.016)\n' % (rel_xpos_sign*-0.06))
                 out += ('}\n')
                 ypos -= 0.075*6/self.description['PlotSizeY']
         if self.description.has_key('CustomLegend'):
             for i in self.description['CustomLegend'].strip().split('\\\\'):
                 out += ('\\rput[B%s](%s,%s){%s}\n' %(self.getLegendAlign(),rel_xpos_sign*0.1,ypos,i))
                 ypos -= 0.075*6/self.description['PlotSizeY']
         out += ('}\n')
         return out
 
     def getLegendXPos(self):
         if self.description.has_key('LegendXPos'):
             return self.description['LegendXPos']
         else:
             if self.getLegendAlign()=='r':
                 return '0.95'
             else:
                 return '0.53'
 
     def getLegendYPos(self):
         if self.description.has_key('LegendYPos'):
             return self.description['LegendYPos']
         else:
             return '0.93'
 
     def getLegendAlign(self):
         if self.description.has_key('LegendAlign'):
             return self.description['LegendAlign']
         else:
             return 'l'
 
 
 class ColorScale(Described):
 
     def __init__(self, description, coors):
         self.description = description
         self.coors = coors
 
     def draw(self):
         out = ''
         out += '\n%\n% ColorScale\n%\n'
         out += '\\rput(1,0){\n'
         out += '  \\psset{xunit=4mm}\n'
         out += '  \\rput(0.5,0){\n'
         out += '    \\psset{yunit=0.0076923, linestyle=none, fillstyle=solid}\n'
         out += '    \\multido{\\ic=0+1,\\id=1+1}{130}{\n'
         out += '      \\psframe[fillcolor={gradientcolors!![\\ic]},dimen=inner,linewidth=0.1pt](0, \\ic)(1, \\id)\n'
         out += '    }\n'
         out += '  }\n'
         out += '  \\rput(0.5,0){\n'
         out += '    \\psframe[linewidth=0.3pt,dimen=middle](0,0)(1,1)\n'
 
         zcustommajortickmarks = self.attr_int('ZMajorTickMarks', -1)
         zcustomminortickmarks = self.attr_int('ZMinorTickMarks', -1)
 
         zcustommajorticks = zcustomminorticks = None
         if self.attr('ZCustomMajorTicks'):
             zcustommajorticks = []
             z_label_pairs = self.attr('ZCustomMajorTicks').strip().split() #'\t')
             if len(z_label_pairs) % 2 == 0:
                 for i in range(0, len(z_label_pairs), 2):
                     zcustommajorticks.append({'Value': float(x_label_pairs[i]), 'Label': x_label_pairs[i+1]})
             else:
                 print "Warning: ZCustomMajorTicks requires an even number of alternating pos/label entries"
 
         if self.attr('ZCustomMinorTicks'):
             zs = self.attr('ZCustomMinorTicks').strip().split() #'\t')
             zcustomminorticks = [{'Value': float(x)} for x in xs]
 
         drawzlabels = self.attr_bool('PlotZTickLabels', True)
 
         zticks = ZTicks(self.description, self.coors)
         out += zticks.draw(custommajortickmarks=zcustommajortickmarks,\
                            customminortickmarks=zcustomminortickmarks,\
                            custommajorticks=zcustommajorticks,\
                            customminorticks=zcustomminorticks,
                            drawlabels=drawzlabels)
         out += '  }\n'
         out += '}\n'
         return out
 
 
 
 class Labels(Described):
 
     def __init__(self, description):
         self.description = description
 
     def draw(self, axis=[]):
         out = ""
         out += ('\n%\n% Labels\n%\n')
         if self.description.has_key('Title') and (axis.count('Title') or axis==[]):
             out += ('\\rput(0,1){\\rput[lB](0, 1.7\\labelsep){\\normalsize '+self.description['Title']+'}}\n')
         if self.description.has_key('XLabel') and (axis.count('XLabel') or axis==[]):
             xlabelsep=4.7
             if self.description.has_key('XLabelSep'):
                 xlabelsep=float(self.description['XLabelSep'])
             out += ('\\rput(1,0){\\rput[rB](0,-%4.3f\\labelsep){\\normalsize '%(xlabelsep) +self.description['XLabel']+'}}\n')
         if self.description.has_key('YLabel') and (axis.count('YLabel') or axis==[]):
             ylabelsep=6.5
             if self.description.has_key('YLabelSep'):
                 ylabelsep=float(self.description['YLabelSep'])
             out += ('\\rput(0,1){\\rput[rB]{90}(-%4.3f\\labelsep,0){\\normalsize '%(ylabelsep) +self.description['YLabel']+'}}\n')
         if self.description.has_key('ZLabel') and (axis.count('ZLabel') or axis==[]):
             zlabelsep=5.3
             if self.description.has_key('ZLabelSep'):
                 zlabelsep=float(self.description['ZLabelSep'])
             out += ('\\rput(1,1){\\rput(%4.3f\\labelsep,0){\\psset{xunit=4mm}\\rput[lB]{270}(1.5,0){\\normalsize '%(zlabelsep) +self.description['ZLabel']+'}}}\n')
         return out
 
 
 
 class Special(Described):
 
     def __init__(self, f):
         self.description = {}
         self.data = []
         self.read_input(f)
 
     def read_input(self, f):
         for line in f:
             if is_end_marker(line, 'SPECIAL'):
                 break
             elif is_comment(line):
                 continue
             else:
                 self.data.append(line)
 
     def draw(self, coors):
         out = ""
         out += ('\n%\n% Special\n%\n')
         import re
         regex = re.compile(r'^(.*?)(\\physics[xy]?coor)\(\s?([0-9\.eE+-]+)\s?,\s?([0-9\.eE+-]+)\s?\)(.*)')
         # TODO: More precise number string matching, something like this:
         # num = r"-?[0-9]*(?:\.[0-9]*)(?:[eE][+-]?\d+]"
         # regex = re.compile(r'^(.*?)(\\physics[xy]?coor)\(\s?(' + num + ')\s?,\s?(' + num + ')\s?\)(.*)')
         for l in self.data:
             while regex.search(l):
                 match = regex.search(l)
                 xcoor, ycoor = float(match.group(3)), float(match.group(4))
                 if match.group(2)[1:] in ["physicscoor", "physicsxcoor"]:
                     xcoor = coors.phys2frameX(xcoor)
                 if match.group(2)[1:] in ["physicscoor", "physicsycoor"]:
                     ycoor = coors.phys2frameY(ycoor)
                 line = "%s(%f, %f)%s" % (match.group(1), xcoor, ycoor, match.group(5))
                 l = line
             out += l + "\n"
         return out
 
 
 
 class DrawableObject(Described):
 
     def __init__(self, f):
         pass
 
     def getTitle(self):
         return self.description.get("Title", "")
 
     def getLineStyle(self):
         if self.description.has_key('LineStyle'):
             ## I normally like there to be "only one way to do it", but providing
             ## this dashdotted/dotdashed synonym just seems humane ;-)
             if self.description['LineStyle'] in ('dashdotted', 'dotdashed'):
                 self.description['LineStyle']='dashed'
                 self.description['LineDash']='3pt 3pt .8pt 3pt'
             return self.description['LineStyle']
         else:
             return 'solid'
 
     def getLineDash(self):
         if self.description.has_key('LineDash'):
             # Check if LineStyle=='dashdotted' before returning something
             self.getLineStyle()
             return self.description['LineDash']
         else:
             return ''
 
     def getLineWidth(self):
         return self.description.get("LineWidth", "0.8pt")
 
     def getLineColor(self):
         return self.description.get("LineColor", "black")
 
     def getLineOpacity(self):
         return self.description.get("LineOpacity", "1.0")
 
     def getFillColor(self):
         return self.description.get("FillColor", "white")
 
     def getFillOpacity(self):
         return self.description.get("FillOpacity", "1.0")
 
     def getHatchColor(self):
         return self.description.get("HatchColor", "black")
 
     def getFillStyle(self):
         return self.description.get("FillStyle", "none")
 
     def getPolyMarker(self):
         return self.description.get("PolyMarker", "")
 
     def getDotSize(self):
         return self.description.get("DotSize", "2pt 2")
 
     def getDotScale(self):
         return self.description.get("DotScale", "1")
 
     def getErrorBars(self):
         return bool(int(self.description.get("ErrorBars", "0")))
 
     def getErrorBands(self):
         return bool(int(self.description.get("ErrorBands", "0")))
 
     def getErrorBandColor(self):
         return self.description.get("ErrorBandColor", "yellow")
 
     def getErrorBandOpacity(self):
         return self.description.get("ErrorBandOpacity", "1.0")
 
     def getSmoothLine(self):
         return bool(int(self.description.get("SmoothLine", "0")))
 
     def startclip(self):
         return '\\psclip{\\psframe[linewidth=0, linestyle=none](0,0)(1,1)}\n'
 
     def stopclip(self):
         return '\\endpsclip\n'
 
     def startpsset(self):
         out = ""
         out += ('\\psset{linecolor='+self.getLineColor()+'}\n')
         out += ('\\psset{linewidth='+self.getLineWidth()+'}\n')
         out += ('\\psset{linestyle='+self.getLineStyle()+'}\n')
         out += ('\\psset{fillstyle='+self.getFillStyle()+'}\n')
         out += ('\\psset{fillcolor='+self.getFillColor()+'}\n')
         out += ('\\psset{hatchcolor='+self.getHatchColor()+'}\n')
         out += ('\\psset{strokeopacity='+self.getLineOpacity()+'}\n')
         out += ('\\psset{opacity='+self.getFillOpacity()+'}\n')
         if self.getLineDash()!='':
             out += ('\\psset{dash='+self.getLineDash()+'}\n')
         return out
 
     def stoppsset(self):
         out = ""
         out += ('\\psset{linecolor=black}\n')
         out += ('\\psset{linewidth=0.8pt}\n')
         out += ('\\psset{linestyle=solid}\n')
         out += ('\\psset{fillstyle=none}\n')
         out += ('\\psset{fillcolor=white}\n')
         out += ('\\psset{hatchcolor=black}\n')
         out += ('\\psset{strokeopacity=1.0}\n')
         out += ('\\psset{opacity=1.0}\n')
         return out
 
 
 
 class Function(DrawableObject, Described):
 
     def __init__(self, f):
         self.description = {}
         self.read_input(f)
 
     def read_input(self, f):
         self.code='def plotfunction(x):\n'
         iscode=False
         for line in f:
             if is_end_marker(line, 'FUNCTION'):
                 break
             elif is_comment(line):
                 continue
             else:
                 m = pat_property.match(line)
                 if iscode:
                     self.code+='    '+line
                 elif m:
                     prop, value = m.group(1,2)
                     if prop=='Code':
                         iscode=True
                     else:
                         self.description[prop] = value
         if not iscode:
             print '++++++++++ ERROR: No code in function'
         else:
             foo = compile(self.code, '<string>', 'exec')
             exec(foo)
             self.plotfunction = plotfunction
 
 
     def draw(self,coors):
         out = ""
         out += self.startclip()
         out += self.startpsset()
         xmin = coors.xmin()
         if self.description.has_key('XMin') and self.description['XMin']:
             xmin = float(self.description['XMin'])
         xmax=coors.xmax()
         if self.description.has_key('XMax') and self.description['XMax']:
             xmax=float(self.description['XMax'])
         # TODO: Space sample points logarithmically if LogX=1
         dx = (xmax-xmin)/500.
         x = xmin-dx
         out += '\\pscurve'
         if self.description.has_key('FillStyle') and self.description['FillStyle']!='none':
             out += '(%s,%s)\n' % (coors.strphys2frameX(xmin),coors.strphys2frameY(coors.ymin()))
         while x < (xmax+2*dx):
             y = self.plotfunction(x)
             out += ('(%s,%s)\n' % (coors.strphys2frameX(x), coors.strphys2frameY(y)))
             x += dx
         if self.description.has_key('FillStyle') and self.description['FillStyle']!='none':
             out += '(%s,%s)\n' % (coors.strphys2frameX(xmax),coors.strphys2frameY(coors.ymin()))
         out += self.stoppsset()
         out += self.stopclip()
         return out
 
 
 class BinData(object):
     """\
     Store bin edge and value+error(s) data for a 1D or 2D bin.
 
     TODO: generalise/alias the attr names to avoid mention of x and y
     """
 
     def __init__(self, low, high, val, err):
         #print "@", low, high, val, err
         self.low = floatify(low)
         self.high = floatify(high)
         self.val = float(val)
         self.err = floatpair(err)
 
     @property
     def is2D(self):
         return hasattr(self.low, "__len__") and hasattr(self.high, "__len__")
 
     @property
     def isValid(self):
         invalid_val = (isnan(self.val) or isnan(self.err[0]) or isnan(self.err[1]))
         if invalid_val:
             return False
         if self.is2D:
             invalid_low = any(isnan(x) for x in self.low)
             invalid_high = any(isnan(x) for x in self.high)
         else:
             invalid_low, invalid_high = isnan(self.low), isnan(self.high)
         return not (invalid_low or invalid_high)
 
     @property
     def xmin(self):
         return self.low
     @xmin.setter
     def xmin(self,x):
         self.low = x
 
     @property
     def xmax(self):
         return self.high
     @xmax.setter
     def xmax(self,x):
         self.high = x
 
     @property
     def xmid(self):
         # TODO: Generalise to 2D
         return (self.xmin + self.xmax) / 2.0
 
     @property
     def xwidth(self):
         # TODO: Generalise to 2D
         assert self.xmin <= self.xmax
         return self.xmax - self.xmin
 
     @property
     def y(self):
         return self.val
     @y.setter
     def y(self, x):
         self.val = x
 
     @property
     def ey(self):
         return self.err
     @ey.setter
     def ey(self, x):
         self.err = x
 
     @property
     def ymin(self):
         return self.y - self.ey[0]
 
     @property
     def ymax(self):
         return self.y + self.ey[1]
 
     def __getitem__(self, key):
         "dict-like access for backward compatibility"
         if key in ("LowEdge"):
             return self.xmin
         elif key == ("UpEdge", "HighEdge"):
             return self.xmax
         elif key == "Content":
             return self.y
         elif key == "Errors":
             return self.ey
 
 
 class Histogram(DrawableObject, Described):
 
     def __init__(self, f, p=None):
         self.description = {}
         self.is2dim = False
         self.data = []
         self.read_input_data(f)
         self.sigmabinvalue = None
         self.meanbinvalue = None
         self.path = p
 
     def read_input_data(self, f):
         for line in f:
             if is_end_marker(line, 'HISTOGRAM'):
                 break
             elif is_comment(line):
                 continue
             else:
                 line = line.rstrip()
                 m = pat_property.match(line)
                 if m:
                     prop, value = m.group(1,2)
                     self.description[prop] = value
                 else:
                     ## Detect symm errs
                     linearray = line.split()
                     if len(linearray) == 4:
                         self.data.append(BinData(*linearray))
                     ## Detect asymm errs
                     elif len(linearray) == 5:
                         self.data.append(BinData(linearray[0], linearray[1], linearray[2], [linearray[3],linearray[4]]))
                     ## Detect two-dimensionality
                     elif len(linearray) in [6,7]:
                         self.is2dim = True
                         # If asymm z error, use the max or average of +- error
                         err = float(linearray[5])
                         if len(linearray) == 7:
                             if self.description.get("ShowMaxZErr", 1):
                                 err = max(err, float(linearray[6]))
                             else:
                                 err = 0.5 * (err + float(linearray[6]))
                         self.data.append(BinData([linearray[0], linearray[2]], [linearray[1], linearray[3]], linearray[4], err))
                     ## Unknown histo format
                     else:
                         raise RuntimeError("Unknown HISTOGRAM data line format with %d entries" % len(linearray))
 
 
     def mangle_input(self):
         norm2int = self.attr_bool("NormalizeToIntegral", False)
         norm2sum = self.attr_bool("NormalizeToSum", False)
         if norm2int or norm2sum:
             if norm2int and norm2sum:
                 print "Can't normalize to Integral and to Sum at the same time. Will normalize to the Sum."
             foo = 0
             # TODO: change to "in self.data"?
             for i in range(len(self.data)):
                 if norm2sum:
                     foo += self.data[i].val
                 else:
                     foo += self.data[i].val*(self.data[i].xmax-self.data[i].xmin)
 
             # TODO: change to "in self.data"?
             if foo != 0:
                 for i in range(len(self.data)):
                     self.data[i].val /= foo
                     self.data[i].err[0] /= foo
                     self.data[i].err[1] /= foo
         scale = self.attr_float('Scale', 1.0)
         if scale != 1.0:
             # TODO: change to "in self.data"?
             for i in range(len(self.data)):
                 self.data[i].val *= scale
                 self.data[i].err[0] *= scale
                 self.data[i].err[1] *= scale
         if self.attr_int("Rebin", 1) > 1:
             rebin = self.attr_int("Rebin", 1)
             errortype = self.attr("ErrorType", "stat")
             newdata = []
             for i in range(0, (len(self.data)//rebin)*rebin, rebin):
                 foo = 0.
                 barl = 0.
                 baru = 0.
                 for j in range(rebin):
                     binwidth = self.data[i+j].xwidth
                     foo += self.data[i+j].val * binwidth
                     if errortype == "stat":
                         barl += (binwidth * self.data[i+j].err[0])**2
                         baru += (binwidth * self.data[i+j].err[1])**2
                     elif errortype == "env":
                         barl += self.data[i+j].ymin * binwidth
                         baru += self.data[i+j].ymax * binwidth
                     else:
                         logging.error("Rebinning for ErrorType not implemented.")
                         sys.exit(1)
                 newbinwidth = self.data[i+rebin-1].xmax - self.data[i].xmin
                 newcentral = foo/newbinwidth
                 if errortype == "stat":
                     newerror = [sqrt(barl)/newbinwidth, sqrt(baru)/newbinwidth]
                 elif errortype == "env":
                     newerror = [(foo-barl)/newbinwidth, (baru-foo)/newbinwidth]
                 newdata.append(BinData(self.data[i].xmin, self.data[i+rebin-1].xmax, newcentral, newerror))
             self.data = newdata
 
     def add(self, name):
         if len(self.data) != len(name.data):
             print '+++ Error in Histogram.add() for %s: different numbers of bins' % self.path
         for i in range(len(self.data)):
             if fuzzyeq(self.data[i].xmin, name.data[i].xmin) and \
                fuzzyeq(self.data[i].xmax, name.data[i].xmax):
                 self.data[i].val += name.data[i].val
                 self.data[i].err[0] = sqrt(self.data[i].err[0]**2 + name.data[i].err[0]**2)
                 self.data[i].err[1] = sqrt(self.data[i].err[1]**2 + name.data[i].err[1]**2)
             else:
                 print '+++ Error in Histogram.add() for %s: binning of histograms differs' % self.path
 
     def divide(self, name):
         #print name.path, self.path
         if len(self.data) != len(name.data):
             print '+++ Error in Histogram.divide() for %s: different numbers of bins' % self.path
         for i in range(len(self.data)):
             if fuzzyeq(self.data[i].xmin, name.data[i].xmin) and \
                fuzzyeq(self.data[i].xmax, name.data[i].xmax):
                 try:
                     self.data[i].err[0] /= name.data[i].val
                 except ZeroDivisionError:
                     self.data[i].err[0]=0.
                 try:
                     self.data[i].err[1] /= name.data[i].val
                 except ZeroDivisionError:
                     self.data[i].err[1]=0.
                 try:
                     self.data[i].val /= name.data[i].val
                 except ZeroDivisionError:
                     self.data[i].val=1.
 #                self.data[i].err[0] = sqrt(self.data[i].err[0]**2 + name.data[i].err[0]**2)
 #                self.data[i].err[1] = sqrt(self.data[i].err[1]**2 + name.data[i].err[1]**2)
             else:
                 print '+++ Error in Histogram.divide() for %s: binning of histograms differs' % self.path
 
     def dividereverse(self, name):
         if len(self.data) != len(name.data):
             print '+++ Error in Histogram.dividereverse() for %s: different numbers of bins' % self.path
         for i in range(len(self.data)):
             if fuzzyeq(self.data[i].xmin, name.data[i].xmin) and \
                fuzzyeq(self.data[i].xmax, name.data[i].xmax):
                 try:
                     self.data[i].err[0] = name.data[i].err[0]/self.data[i].val
                 except ZeroDivisionError:
                     self.data[i].err[0]=0.
                 try:
                     self.data[i].err[1] = name.data[i].err[1]/self.data[i].val
                 except ZeroDivisionError:
                     self.data[i].err[1]=0.
                 try:
                     self.data[i].val = name.data[i].val/self.data[i].val
                 except ZeroDivisionError:
                     self.data[i].val=1.
             else:
                 print '+++ Error in Histogram.dividereverse(): binning of histograms differs'
 
     def deviation(self, name):
         if len(self.data) != len(name.data):
             print '+++ Error in Histogram.deviation() for %s: different numbers of bins' % self.path
         for i in range(len(self.data)):
             if fuzzyeq(self.data[i].xmin, name.data[i].xmin) and \
                fuzzyeq(self.data[i].xmax, name.data[i].xmax):
                 self.data[i].val -= name.data[i].val
                 try:
                     self.data[i].val /= 0.5*sqrt((name.data[i].err[0] + name.data[i].err[1])**2 + \
                                                         (self.data[i].err[0] + self.data[i].err[1])**2)
                 except ZeroDivisionError:
                     self.data[i].val = 0.0
                 try:
                     self.data[i].err[0] /= name.data[i].err[0]
                 except ZeroDivisionError:
                     self.data[i].err[0] = 0.0
                 try:
                     self.data[i].err[1] /= name.data[i].err[1]
                 except ZeroDivisionError:
                     self.data[i].err[1] = 0.0
             else:
                 print '+++ Error in Histogram.deviation() for %s: binning of histograms differs' % self.path
 
     def getChi2(self, name):
         chi2 = 0.
         for i in range(len(self.data)):
             if fuzzyeq(self.data[i].xmin, name.data[i].xmin) and \
                fuzzyeq(self.data[i].xmax, name.data[i].xmax):
                 try:
                     chi2 += (self.data[i].val-name.data[i].val)**2/((0.5*self.data[i].err[0]+0.5*self.data[i].err[1])**2 + (0.5*name.data[i].err[0]+0.5*name.data[i].err[1])**2)
                 except ZeroDivisionError:
                     pass
             else:
                 print '+++ Error in Histogram.getChi2() for %s: binning of histograms differs' % self.path
         return chi2/len(self.data)
 
     def getSigmaBinValue(self):
         if self.sigmabinvalue==None:
             self.sigmabinvalue = 0.
             sumofweights = 0.
             for i in range(len(self.data)):
                 if self.is2dim:
                     binwidth = abs( (self.data[i].xmax[0] - self.data[i].xmin[0])
                                    *(self.data[i].xmax[1] - self.data[i].xmin[1]))
                 else:
                     binwidth = abs(self.data[i].xmax - self.data[i].xmin)
                 self.sigmabinvalue += binwidth*(self.data[i].val-self.getMeanBinValue())**2
                 sumofweights += binwidth
             self.sigmabinvalue = sqrt(self.sigmabinvalue/sumofweights)
         return self.sigmabinvalue
 
     def getMeanBinValue(self):
         if self.meanbinvalue==None:
             self.meanbinvalue = 0.
             sumofweights = 0.
             for i in range(len(self.data)):
                 if self.is2dim:
                     binwidth = abs( (self.data[i].xmax[0] - self.data[i].xmin[0])
                                    *(self.data[i].xmax[1] - self.data[i].xmin[1]))
                 else:
                     binwidth = abs(self.data[i].xmax - self.data[i].xmin)
                 self.meanbinvalue += binwidth*self.data[i].val
                 sumofweights += binwidth
             self.meanbinvalue /= sumofweights
         return self.meanbinvalue
 
     def getCorrelation(self, name):
         correlation = 0.
         sumofweights = 0.
         for i in range(len(self.data)):
             if fuzzyeq(self.data[i].xmin, name.data[i].xmin) and \
                fuzzyeq(self.data[i].xmax, name.data[i].xmax):
                 if self.is2dim:
                     binwidth = abs( (self.data[i].xmax[0] - self.data[i].xmin[0])
                                   * (self.data[i].xmax[1] - self.data[i].xmin[1]) )
                 else:
                     binwidth = abs(self.data[i].xmax - self.data[i].xmin)
                 correlation += binwidth * ( self.data[i].val - self.getMeanBinValue() ) \
                                         * ( name.data[i].val - name.getMeanBinValue() )
                 sumofweights += binwidth
             else:
                 print '+++ Error in Histogram.getCorrelation(): binning of histograms differs' % self.path
         correlation /= sumofweights
         try:
             correlation /= self.getSigmaBinValue()*name.getSigmaBinValue()
         except ZeroDivisionError:
             correlation = 0
         return correlation
 
     def getRMSdistance(self,name):
         distance = 0.
         sumofweights = 0.
         for i in range(len(self.data)):
             if fuzzyeq(self.data[i].xmin, name.data[i].xmin) and \
                fuzzyeq(self.data[i].xmax, name.data[i].xmax):
                 if self.is2dim:
                     binwidth = abs( (self.data[i].xmax[0] - self.data[i].xmin[0])
                                   * (self.data[i].xmax[1] - self.data[i].xmin[1]) )
                 else:
                     binwidth = abs(self.data[i].xmax - self.data[i].xmin)
                 distance += binwidth * ( (self.data[i].val - self.getMeanBinValue())
                                         -(name.data[i].val - name.getMeanBinValue()))**2
                 sumofweights += binwidth
             else:
                 print '+++ Error in Histogram.getRMSdistance() for %s: binning of histograms differs' % self.path
         distance = sqrt(distance/sumofweights)
         return distance
 
     def draw(self,coors):
         seen_nan = False
         out = ""
         out += self.startclip()
         out += self.startpsset()
         if any(b.isValid for b in self.data):
             out += "% START DATA\n"
             if self.is2dim:
                 for b in self.data:
                     out += ('\\psframe')
                     color = int(129*coors.phys2frameZ(b.val))
                     if b.val > coors.zmax():
                         color = 129
                     if b.val < coors.zmin():
                         color = 0
                     if b.val <= coors.zmin():
                         out += ('[linewidth=0pt, linestyle=none, fillstyle=solid, fillcolor=white]')
                     else:
                         out += ('[linewidth=0pt, linestyle=none, fillstyle=solid, fillcolor={gradientcolors!!['+str(color)+']}]')
                     out += ('(' + coors.strphys2frameX(b.low[0]) + ', ' \
                                 + coors.strphys2frameY(b.low[1]) + ')(' \
                                 + coors.strphys2frameX(b.high[0])  + ', ' \
                                 + coors.strphys2frameY(b.high[1])  + ')\n')
             else:
                 if self.getErrorBands():
                     self.description['SmoothLine'] = 0
                     for b in self.data:
                         out += ('\\psframe[dimen=inner,linewidth=0pt,linestyle=none,fillstyle=solid,fillcolor=%s,opacity=%s]' % (self.getErrorBandColor(),self.getErrorBandOpacity()))
                         out += ('(' + coors.strphys2frameX(b.xmin) + ', ' \
                                     + coors.strphys2frameY(b.val - b.err[0]) + ')(' \
                                     + coors.strphys2frameX(b.xmax)  + ', ' \
                                     + coors.strphys2frameY(b.val + b.err[1]) + ')\n')
                 if self.getErrorBars():
                     for b in self.data:
                         if isnan(b.val) or isnan(b.err[0]) or isnan(b.err[1]):
                             seen_nan = True
                             continue
                         if b.val == 0. and b.err == [0.,0.]:
                             continue
                         out += ('\\psline')
                         out += ('(' + coors.strphys2frameX(b.xmin) + ', ' \
                                     + coors.strphys2frameY(b.val) + ')(' \
                                     + coors.strphys2frameX(b.xmax)  + ', ' \
                                     + coors.strphys2frameY(b.val) + ')\n')
                         out += ('\\psline')
                         bincenter = coors.strphys2frameX(.5*(b.xmin+b.xmax))
                         out += ('(' + bincenter + ', ' \
                                     + coors.strphys2frameY(b.val-b.err[0]) + ')(' \
                                     + bincenter + ', ' \
                                     + coors.strphys2frameY(b.val+b.err[1]) + ')\n')
                 if self.getSmoothLine():
                     out += '\\psbezier'
                 else:
                     out += '\\psline'
                 if self.getFillStyle() != 'none':   # make sure that filled areas go all the way down to the x-axis
                     if coors.phys2frameX(self.data[0].xmin) > 1e-4:
                         out += '(' + coors.strphys2frameX(self.data[0].xmin) + ', -0.1)\n'
                     else:
                         out += '(-0.1, -0.1)\n'
                 for i, b in enumerate(self.data):
                     if isnan(b.val):
                         seen_nan = True
                         continue
                     if self.getSmoothLine():
                         out += ('(' + coors.strphys2frameX(0.5*(b.xmin+b.xmax)) + ', ' \
                                     + coors.strphys2frameY(b.val) + ')\n')
                     else:
                         out += ('(' + coors.strphys2frameX(b.xmin) + ', ' \
                                     + coors.strphys2frameY(b.val) + ')(' \
                                     + coors.strphys2frameX(b.xmax)  + ', ' \
                                     + coors.strphys2frameY(b.val) + ')\n')
                         ## Join/separate data points, with vertical/diagonal lines
                         if i+1 < len(self.data): #< If this is not the last point
                             if self.description.get('ConnectBins', '1') != '1':
                                 out += ('\\psline')
                             else:
                                 ## If bins are joined, but there is a gap in binning, choose whether to fill the gap
                                 if (abs(coors.phys2frameX(b.xmax) - coors.phys2frameX(self.data[i+1].xmin)) > 1e-4):
                                     if self.description.get('ConnectGaps', '0') != '1':
                                         out += ('\\psline')
                                         # TODO: Perhaps use a new dashed line to fill the gap?
                 if self.getFillStyle() != 'none':  # make sure that filled areas go all the way down to the x-axis
                     if (coors.phys2frameX(self.data[-1].xmax) < 1-1e-4):
                         out += '(' + coors.strphys2frameX(self.data[-1].xmax) + ', -0.1)\n'
                     else:
                         out += '(1.1, -0.1)\n'
             #
             if self.getPolyMarker() != '':
                 for b in self.data:
                     if isnan(b.val):
                         seen_nan = True
                         continue
                     if b.val == 0. and b.err == [0.,0.]:
                         continue
                     out += ('\\psdot[dotstyle=%s,dotsize=%s,dotscale=%s](' % (self.getPolyMarker(),self.getDotSize(),self.getDotScale()) \
                                 + coors.strphys2frameX(.5*(b.xmin+b.xmax)) + ', ' \
                                 + coors.strphys2frameY(b.val) + ')\n')
 
             out += "% END DATA\n"
         else:
             print "WARNING: No valid bin value/errors/edges to plot!"
             out += "% NO DATA!\n"
 
         out += self.stoppsset()
         out += self.stopclip()
         if seen_nan:
             print "WARNING: NaN-valued value or error bar!"
         return out
 
     # def is2dimensional(self):
     #     return self.is2dim
 
     def getXMin(self):
         if not self.data:
             return 0
         elif self.is2dim:
             return min(b.low[0] for b in self.data)
         else:
             return min(b.xmin for b in self.data)
 
     def getXMax(self):
         if not self.data:
             return 1
         elif self.is2dim:
             return max(b.high[0] for b in self.data)
         else:
             return max(b.xmax for b in self.data)
 
     def getYMin(self, xmin, xmax, logy):
         if not self.data:
             return 0
         elif self.is2dim:
             return min(b.low[1] for b in self.data)
         else:
             yvalues = []
             for b in self.data:
                 if (b.xmax > xmin or b.xmin >= xmin) and (b.xmin < xmax or b.xmax <= xmax):
                     foo = b.val
                     if self.getErrorBars() or self.getErrorBands():
                         foo -= b.err[0]
                     if not isnan(foo) and (not logy or foo > 0):
                         yvalues.append(foo)
             return min(yvalues) if yvalues else self.data[0].val
 
     def getYMax(self, xmin, xmax):
         if not self.data:
             return 1
         elif self.is2dim:
             return max(b.high[1] for b in self.data)
         else:
             yvalues = []
             for b in self.data:
                 if (b.xmax > xmin or b.xmin >= xmin) and (b.xmin < xmax or b.xmax <= xmax):
                     foo = b.val
                     if self.getErrorBars() or self.getErrorBands():
                         foo += b.err[1]
                     if not isnan(foo): # and (not logy or foo > 0):
                         yvalues.append(foo)
             return max(yvalues) if yvalues else self.data[0].val
 
     def getZMin(self, xmin, xmax, ymin, ymax):
         if not self.is2dim:
             return 0
         zvalues = []
         for b in self.data:
             if (b.xmax[0] > xmin and b.xmin[0] < xmax) and (b.xmax[1] > ymin and b.xmin[1] < ymax):
                 zvalues.append(b.val)
         return min(zvalues)
 
     def getZMax(self, xmin, xmax, ymin, ymax):
         if not self.is2dim:
             return 0
         zvalues = []
         for b in self.data:
             if (b.xmax[0] > xmin and b.xmin[0] < xmax) and (b.xmax[1] > ymin and b.xmin[1] < ymax):
                 zvalues.append(b.val)
         return max(zvalues)
 
 
 
+class Value(Histogram):
+
+    def read_input_data(self, f):
+        for line in f:
+            if is_end_marker(line, 'VALUE'):
+                break
+            elif is_comment(line):
+                continue
+            else:
+                line = line.rstrip()
+                m = pat_property.match(line)
+                if m:
+                    prop, value = m.group(1,2)
+                    self.description[prop] = value
+                else:
+                    linearray = line.split()
+                    if len(linearray) == 3:
+                        self.data.append(BinData(0.0, 1.0, linearray[0], [ linearray[1], linearray[2] ])) # dummy x-values
+                    else:
+                        raise Exception('Value does not have the expected number of columns. ' + line)
+
+    # TODO: specialise draw() here
+
+
+class Counter(Histogram):
+
+    def read_input_data(self, f):
+        for line in f:
+            if is_end_marker(line, 'COUNTER'):
+                break
+            elif is_comment(line):
+                continue
+            else:
+                line = line.rstrip()
+                m = pat_property.match(line)
+                if m:
+                    prop, value = m.group(1,2)
+                    self.description[prop] = value
+                else:
+                    linearray = line.split()
+                    if len(linearray) == 2:
+                        self.data.append(BinData(0.0, 1.0, linearray[0], [ linearray[1], linearray[1] ])) # dummy x-values
+                    else:
+                        raise Exception('Counter does not have the expected number of columns. ' + line)
+
+    # TODO: specialise draw() here
+
+
 class Histo1D(Histogram):
 
     def read_input_data(self, f):
         for line in f:
             if is_end_marker(line, 'HISTO1D'):
                 break
             elif is_comment(line):
                 continue
             else:
                 line = line.rstrip()
                 m = pat_property.match(line)
                 if m:
                     prop, value = m.group(1,2)
                     self.description[prop] = value
                 else:
                     linearray = line.split()
                     ## Detect symm errs
                     # TODO: Not sure what the 8-param version is for... auto-compatibility with YODA format?
                     if len(linearray) in [4,8]:
                         self.data.append(BinData(linearray[0], linearray[1], linearray[2], linearray[3]))
                     ## Detect asymm errs
                     elif len(linearray) == 5:
                         self.data.append(BinData(linearray[0], linearray[1], linearray[2], [linearray[3],linearray[4]]))
                     else:
                         raise Exception('Histo1D does not have the expected number of columns. ' + line)
 
     # TODO: specialise draw() here
 
 
 class Histo2D(Histogram):
 
     def read_input_data(self, f):
         self.is2dim = True #< Should really be done in a constructor, but this is easier for now...
 
         for line in f:
             if is_end_marker(line, 'HISTO2D'):
                 break
             elif is_comment(line):
                 continue
             else:
                 line = line.rstrip()
                 m = pat_property.match(line)
                 if m:
                     prop, value = m.group(1,2)
                     self.description[prop] = value
                 else:
                     linearray = line.split()
                     if len(linearray) in [6,7]:
                         # If asymm z error, use the max or average of +- error
                         err = float(linearray[5])
                         if len(linearray) == 7:
                             if self.description.get("ShowMaxZErr", 1):
                                 err = max(err, float(linearray[6]))
                             else:
                                 err = 0.5 * (err + float(linearray[6]))
                         self.data.append(BinData([linearray[0], linearray[2]], [linearray[1], linearray[3]], float(linearray[4]), err))
                     else:
                         raise Exception('Histo2D does not have the expected number of columns. '+line)
 
     # TODO: specialise draw() here
 
 
 
 #############################
 
 
 
 class Frame(object):
 
     def __init__(self):
         self.framelinewidth = '0.3pt'
 
     def draw(self,inputdata):
         out = ('\n%\n% Frame\n%\n')
         if inputdata.description.has_key('FrameColor') and inputdata.description['FrameColor']!=None:
             color = inputdata.description['FrameColor']
             # We want to draw this frame only once, so set it to False for next time:
             inputdata.description['FrameColor']=None
 
             # Calculate how high and wide the overall plot is
             height = [0,0]
             width  = inputdata.attr('PlotSizeX')
             if inputdata.attr_bool('RatioPlot', False):
                 height[1] = -inputdata.description['RatioPlotSizeY']
             if not inputdata.attr_bool('MainPlot', True):
                 height[0] = inputdata.description['PlotSizeY']
             else:
                 height[0] = -height[1]
                 height[1] = 0
 
             # Get the margin widths
             left = inputdata.description['LeftMargin']+0.1
             right = inputdata.description['RightMargin']+0.1
             top = inputdata.description['TopMargin']+0.1
             bottom = inputdata.description['BottomMargin']+0.1
 
             #
             out += ('\\rput(0,1){\\psline[linewidth=%scm,linecolor=%s](%scm,%scm)(%scm,%scm)}\n' %(top, color, -left, top/2, width+right, top/2))
             out += ('\\rput(0,%scm){\\psline[linewidth=%scm,linecolor=%s](%scm,%scm)(%scm,%scm)}\n' %(height[1], bottom, color, -left, -bottom/2, width+right, -bottom/2))
             out += ('\\rput(0,0){\\psline[linewidth=%scm,linecolor=%s](%scm,%scm)(%scm,%scm)}\n' %(left, color, -left/2, height[1]-0.05, -left/2, height[0]+0.05))
             out += ('\\rput(1,0){\\psline[linewidth=%scm,linecolor=%s](%scm,%scm)(%scm,%scm)}\n' %(right, color, right/2, height[1]-0.05, right/2, height[0]+0.05))
 
 
         out += ('\\psframe[linewidth='+self.framelinewidth+',dimen=middle](0,0)(1,1)\n')
         return out
 
 
 
 class Ticks(object):
 
     def __init__(self, description, coors):
         self.majorticklinewidth = '0.3pt'
         self.minorticklinewidth = '0.3pt'
         self.majorticklength    = '9pt'
         self.minorticklength    = '4pt'
         self.description = description
         self.coors = coors
 
     def draw_ticks(self, vmin, vmax, plotlog=False, custommajorticks=None, customminorticks=None, custommajortickmarks=-1, customminortickmarks=-1, drawlabels=True, twosided=False):
         out = ""
         if plotlog:
             if vmin <= 0 or vmax <= 0:
                 raise Exception("Cannot place log axis min or max tick <= 0")
             if custommajorticks is None:
                 x = int(log10(vmin))
                 n_labels = 0
                 while x < log10(vmax) + 1:
                     if 10**x >= vmin:
                         ticklabel = 10**x
                         if ticklabel > vmin and ticklabel < vmax:
                             out += self.draw_majortick(ticklabel,twosided)
                             if drawlabels:
                                 out += self.draw_majorticklabel(ticklabel)
                                 n_labels += 1
                         if ticklabel == vmin or ticklabel == vmax:
                             if drawlabels:
                                 out += self.draw_majorticklabel(ticklabel)
                                 n_labels+=1
                         for i in range(2,10):
                             ticklabel = i*10**(x-1)
                             if ticklabel > vmin and ticklabel < vmax:
                                 out += self.draw_minortick(ticklabel,twosided)
                                 if drawlabels and n_labels == 0:
                                     if (i+1)*10**(x-1) < vmax: # some special care for the last minor tick
                                         out += self.draw_minorticklabel(ticklabel)
                                     else:
                                         out += self.draw_minorticklabel(ticklabel, last=True)
                     x += 1
             else:
                 print "Warning: custom major ticks not currently supported on log axes -- please contact the developers to request!"
         elif custommajorticks is not None or customminorticks is not None:
             if custommajorticks:
                 for i in range(len(custommajorticks)):
                     value = custommajorticks[i]['Value']
                     label = custommajorticks[i]['Label']
                     if value >= vmin and value <= vmax:
                         out += self.draw_majortick(value,twosided)
                     if drawlabels:
                         out += self.draw_majorticklabel(value, label=label)
             if customminorticks:
                 for i in range(len(customminorticks)):
                     value = customminorticks[i]['Value']
                     if value >= vmin and value <= vmax:
                         out += self.draw_minortick(value,twosided)
         else:
             vrange = vmax - vmin
             if isnan(vrange):
                 vrange, vmin, vmax = 1, 1, 2
             digits = int(log10(vrange))+1
             if vrange <= 1:
                 digits -= 1
             foo = int(vrange/(10**(digits-1)))
             if foo/9. > 0.5:
                 tickmarks = 10
             elif foo/9. > 0.2:
                 tickmarks = 5
             elif foo/9. > 0.1:
                 tickmarks = 2
 
             if custommajortickmarks > -1:
                 if custommajortickmarks not in [1, 2, 5, 10, 20]:
                     print '+++ Error in Ticks.draw_ticks(): MajorTickMarks must be in [1, 2, 5, 10, 20]'
                 else:
                     tickmarks = custommajortickmarks
 
             if tickmarks == 2 or tickmarks == 20:
                 minortickmarks = 3
             else:
                 minortickmarks = 4
             if customminortickmarks > -1:
                 minortickmarks = customminortickmarks
             #
             x = 0
             while x > vmin*10**digits:
                 x -= tickmarks*100**(digits-1)
             while x <= vmax*10**digits:
                 if x >= vmin*10**digits - tickmarks*100**(digits-1):
                     ticklabel = 1.*x/10**digits
                     if int(ticklabel) == ticklabel:
                         ticklabel = int(ticklabel)
                     if float(ticklabel-vmin)/vrange >= -1e-5:
                         if abs(ticklabel-vmin)/vrange > 1e-5 and abs(ticklabel-vmax)/vrange > 1e-5:
                             out += self.draw_majortick(ticklabel,twosided)
                         if drawlabels:
                             out += self.draw_majorticklabel(ticklabel)
 
                     xminor = x
                     for i in range(minortickmarks):
                         xminor += 1.*tickmarks*100**(digits-1)/(minortickmarks+1)
                         ticklabel = 1.*xminor/10**digits
                         if ticklabel > vmin and ticklabel < vmax:
                             if abs(ticklabel-vmin)/vrange > 1e-5 and abs(ticklabel-vmax)/vrange > 1e-5:
                                 out += self.draw_minortick(ticklabel,twosided)
                 x += tickmarks*100**(digits-1)
         return out
 
     def draw(self):
         pass
 
     def draw_minortick(self, ticklabel, twosided):
         pass
 
     def draw_majortick(self, ticklabel, twosided):
         pass
 
     def draw_majorticklabel(self, ticklabel):
         pass
 
     def draw_minorticklabel(self, value, label='', last=False):
         return ''
 
     def get_ticklabel(self, value, plotlog=False, minor=False, lastminor=False):
         label=''
         prefix = ''
         if plotlog:
             bar = int(log10(value))
 	    if bar < 0:
 	        sign='-'
 	    else:
 	        sign='\\,'
             if minor: # The power of ten is only to be added to the last minor tick label
                 if lastminor:
                     label = str(int(value/(10**bar))) + "\\cdot" + '10$^{'+sign+'\\text{'+str(abs(bar))+'}}$'
                 else:
                     label = str(int(value/(10**bar))) # The naked prefactor
             else:
                 if bar==0:
                     label = '1'
                 else:
                     label = '10$^{'+sign+'\\text{'+str(abs(bar))+'}}$'
         else:
             if fabs(value) < 1e-10:
                 value = 0
             label = str(value)
             if "e" in label:
                 a, b = label.split("e")
                 astr = "%2.1f" % float(a)
                 bstr = str(int(b))
                 label = "\\smaller{%s $\\!\\cdot 10^{%s} $}" % (astr, bstr)
         return label
 
 
 
 class XTicks(Ticks):
 
     def draw(self, custommajorticks=None, customminorticks=None, custommajortickmarks=-1, customminortickmarks=-1,drawlabels=True):
         twosided = bool(int(self.description.get('XTwosidedTicks', '0')))
         out = ""
         out += ('\n%\n% X-Ticks\n%\n')
         out += ('\\def\\majortickmarkx{\\psline[linewidth='+self.majorticklinewidth+'](0,0)(0,'+self.majorticklength+')}%\n')
         out += ('\\def\\minortickmarkx{\\psline[linewidth='+self.minorticklinewidth+'](0,0)(0,'+self.minorticklength+')}%\n')
         uselog = self.description['LogX'] and (self.coors.xmin() > 0 and self.coors.xmax() > 0)
         out += self.draw_ticks(self.coors.xmin(), self.coors.xmax(),\
                                    plotlog=uselog,\
                                    custommajorticks=custommajorticks,\
                                    customminorticks=customminorticks,\
                                    custommajortickmarks=custommajortickmarks,\
                                    customminortickmarks=customminortickmarks,\
                                    drawlabels=drawlabels,\
                                    twosided=twosided)
         return out
 
     def draw_minortick(self, ticklabel, twosided):
         out = ''
         out += '\\rput('+self.coors.strphys2frameX(ticklabel)+', 0){\\minortickmarkx}\n'
         if twosided:
             out += '\\rput{180}('+self.coors.strphys2frameX(ticklabel)+', 1){\\minortickmarkx}\n'
         return out
 
     def draw_minorticklabel(self, value, label='', last=False):
         if not label:
             label=self.get_ticklabel(value, int(self.description['LogX']), minor=True, lastminor=last)
         if last: # Some more indentation for the last minor label
             return ('\\rput('+self.coors.strphys2frameX(value)+', 0){\\rput[B](1.9\\labelsep,-2.3\\labelsep){\\strut{}'+label+'}}\n')
         else:
             return ('\\rput('+self.coors.strphys2frameX(value)+', 0){\\rput[B](0,-2.3\\labelsep){\\strut{}'+label+'}}\n')
 
     def draw_majortick(self, ticklabel, twosided):
         out = ''
         out += '\\rput('+self.coors.strphys2frameX(ticklabel)+', 0){\\majortickmarkx}\n'
         if twosided:
             out += '\\rput{180}('+self.coors.strphys2frameX(ticklabel)+', 1){\\majortickmarkx}\n'
         return out
 
     def draw_majorticklabel(self, value, label=''):
         if not label:
             label = self.get_ticklabel(value, int(self.description['LogX']) and self.coors.xmin() > 0 and self.coors.xmax() > 0)
         labelparts = label.split("\\n")
         labelcode = label if len(labelparts) == 1 else ("\\shortstack{" + "\\\\ ".join(labelparts) +  "}")
         rtn = "\\rput(" + self.coors.strphys2frameX(value) + ", 0){\\rput[t](0,-\\labelsep){" + labelcode + "}}\n"
         return rtn
 
 
 
 class YTicks(Ticks):
 
     def draw(self, custommajorticks=None, customminorticks=None, custommajortickmarks=-1, customminortickmarks=-1, drawlabels=True):
         twosided = bool(int(self.description.get('YTwosidedTicks', '0')))
         out = ""
         out += ('\n%\n% Y-Ticks\n%\n')
         out += ('\\def\\majortickmarky{\\psline[linewidth=%s](0,0)(%s,0)}%%\n' % (self.majorticklinewidth, self.majorticklength))
         out += ('\\def\\minortickmarky{\\psline[linewidth=%s](0,0)(%s,0)}%%\n' % (self.minorticklinewidth, self.minorticklength))
         uselog = self.description['LogY'] and self.coors.ymin() > 0 and self.coors.ymax() > 0
         out += self.draw_ticks(self.coors.ymin(), self.coors.ymax(),
                                plotlog=uselog,
                                custommajorticks=custommajorticks,
                                customminorticks=customminorticks,
                                custommajortickmarks=custommajortickmarks,
                                customminortickmarks=customminortickmarks,
                                twosided=twosided,
                                drawlabels=drawlabels)
         return out
 
     def draw_minortick(self, ticklabel, twosided):
         out = ''
         out += '\\rput(0, '+self.coors.strphys2frameY(ticklabel)+'){\\minortickmarky}\n'
         if twosided:
             out += '\\rput{180}(1, '+self.coors.strphys2frameY(ticklabel)+'){\\minortickmarky}\n'
         return out
 
     def draw_majortick(self, ticklabel, twosided):
         out = ''
         out += '\\rput(0, '+self.coors.strphys2frameY(ticklabel)+'){\\majortickmarky}\n'
         if twosided:
             out += '\\rput{180}(1, '+self.coors.strphys2frameY(ticklabel)+'){\\majortickmarky}\n'
         return out
 
     def draw_majorticklabel(self, value, label=''):
         if not label:
             label = self.get_ticklabel(value, int(self.description['LogY']) and self.coors.ymin() > 0 and self.coors.ymax() > 0)
         if self.description.has_key('RatioPlotMode') and self.description['RatioPlotMode'] == 'deviation' and \
            self.description.has_key('RatioPlotStage') and self.description['RatioPlotStage']:
             rtn = '\\uput[180]{0}(0, '+self.coors.strphys2frameY(value)+'){\\strut{}'+label+'\\,$\\sigma$}\n'
         else:
             labelparts = label.split("\\n")
             labelcode = label if len(labelparts) == 1 else ("\\shortstack{" + "\\\\ ".join(labelparts) +  "}")
             rtn = "\\rput(0, " + self.coors.strphys2frameY(value) + "){\\rput[r](-\\labelsep,0){" + labelcode + "}}\n"
         return rtn
 
 
 
 class ZTicks(Ticks):
 
     def __init__(self, description, coors):
         self.majorticklinewidth = '0.3pt'
         self.minorticklinewidth = '0.3pt'
         self.majorticklength    = '6pt'
         self.minorticklength    = '2.6pt'
         self.description = description
         self.coors = coors
 
     def draw(self, custommajorticks=None, customminorticks=None, custommajortickmarks=-1, customminortickmarks=-1, drawlabels=True):
         out = ""
         out += ('\n%\n% Z-Ticks\n%\n')
         out += ('\\def\\majortickmarkz{\\psline[linewidth='+self.majorticklinewidth+'](0,0)('+self.majorticklength+',0)}%\n')
         out += ('\\def\\minortickmarkz{\\psline[linewidth='+self.minorticklinewidth+'](0,0)('+self.minorticklength+',0)}%\n')
         out += self.draw_ticks(self.coors.zmin(), self.coors.zmax(),\
                                    plotlog=self.description['LogZ'],\
                                    custommajorticks=custommajorticks,\
                                    customminorticks=customminorticks,\
                                    custommajortickmarks=custommajortickmarks,\
                                    customminortickmarks=customminortickmarks,\
                                    twosided=False,\
                                    drawlabels=drawlabels)
         return out
 
     def draw_minortick(self, ticklabel, twosided):
         return '\\rput{180}(1, '+self.coors.strphys2frameZ(ticklabel)+'){\\minortickmarkz}\n'
 
     def draw_majortick(self, ticklabel, twosided):
         return '\\rput{180}(1, '+self.coors.strphys2frameZ(ticklabel)+'){\\majortickmarkz}\n'
 
     def draw_majorticklabel(self, value, label=''):
         if label=='':
             label = self.get_ticklabel(value, int(self.description['LogZ']))
         if self.description.has_key('RatioPlotMode') and self.description['RatioPlotMode']=='deviation' \
                 and self.description.has_key('RatioPlotStage') and self.description['RatioPlotStage']:
             return ('\\uput[0]{0}(1, '+self.coors.strphys2frameZ(value)+'){\\strut{}'+label+'\\,$\\sigma$}\n')
         else:
             return ('\\uput[0]{0}(1, '+self.coors.strphys2frameZ(value)+'){\\strut{}'+label+'}\n')
 
 
 
 class Coordinates(object):
 
     def __init__(self, inputdata):
         self.description = inputdata.description
 
     def phys2frameX(self, x):
         if self.description['LogX']:
             if x>0:
                 result = 1.*(log10(x)-log10(self.xmin()))/(log10(self.xmax())-log10(self.xmin()))
             else:
                 return -10
         else:
             result = 1.*(x-self.xmin())/(self.xmax()-self.xmin())
         if (fabs(result) < 1e-4):
             return 0
         else:
             return min(max(result,-10),10)
 
     def phys2frameY(self, y):
         if self.description['LogY']:
             if y > 0 and self.ymin() > 0 and self.ymax() > 0:
                 result = 1.*(log10(y)-log10(self.ymin()))/(log10(self.ymax())-log10(self.ymin()))
             else:
                 return -10
         else:
             result = 1.*(y-self.ymin())/(self.ymax()-self.ymin())
         if (fabs(result) < 1e-4):
             return 0
         else:
             return min(max(result,-10),10)
 
     def phys2frameZ(self, z):
         if self.description['LogZ']:
             if z>0:
                 result = 1.*(log10(z)-log10(self.zmin()))/(log10(self.zmax())-log10(self.zmin()))
             else:
                 return -10
         else:
             result = 1.*(z-self.zmin())/(self.zmax()-self.zmin())
         if (fabs(result) < 1e-4):
             return 0
         else:
             return min(max(result,-10),10)
 
     # TODO: Add frame2phys functions (to allow linear function sampling in the frame space rather than the physical space)
 
     def strphys2frameX(self, x):
         return str(self.phys2frameX(x))
 
     def strphys2frameY(self, y):
         return str(self.phys2frameY(y))
 
     def strphys2frameZ(self, z):
         return str(self.phys2frameZ(z))
 
     def xmin(self):
         return self.description['Borders'][0]
 
     def xmax(self):
         return self.description['Borders'][1]
 
     def ymin(self):
         return self.description['Borders'][2]
 
     def ymax(self):
         return self.description['Borders'][3]
 
     def zmin(self):
         return self.description['Borders'][4]
 
     def zmax(self):
         return self.description['Borders'][5]
 
 
 ####################
 
 
 def try_cmd(args):
     "Run the given command + args and return True/False if it succeeds or not"
     import subprocess
     try:
         subprocess.check_output(args, stderr=subprocess.STDOUT)
         return True
     except:
         return False
 
 def have_cmd(cmd):
     return try_cmd(["which", cmd])
 
 
 import shutil, subprocess
 def process_datfile(datfile):
     global opts
     if not os.access(datfile, os.R_OK):
         raise Exception("Could not read data file '%s'" % datfile)
 
-    dirname = os.path.dirname(datfile)
-    datfile = os.path.basename(datfile)
+    datpath = os.path.abspath(datfile)
+    datfile = os.path.basename(datpath)
+    datdir = os.path.dirname(datpath)
+    outdir = opts.OUTPUT_DIR if opts.OUTPUT_DIR else datdir
     filename = datfile.replace('.dat','')
 
     ## Create a temporary directory
-    cwd = os.getcwd()
-    datpath = os.path.join(cwd, dirname, datfile)
+    # cwd = os.getcwd()
     tempdir = tempfile.mkdtemp('.make-plots')
     tempdatpath = os.path.join(tempdir, datfile)
     shutil.copy(datpath, tempdir)
     if opts.NO_CLEANUP:
         logging.info('Keeping temp-files in %s' % tempdir)
 
     ## Make TeX file
-    inputdata = InputData(os.path.join(dirname,filename))
+    inputdata = InputData(datpath)
     texpath = os.path.join(tempdir, '%s.tex' % filename)
     texfile = open(texpath, 'w')
     p = Plot(inputdata)
     texfile.write(p.write_header(inputdata))
     if inputdata.attr_bool("MainPlot", True):
         mp = MainPlot(inputdata)
         texfile.write(mp.draw(inputdata))
     if not inputdata.attr_bool("is2dim", False) and inputdata.attr_bool("RatioPlot", True) and inputdata.attr("RatioPlotReference"): # is not None:
         rp = RatioPlot(inputdata)
         texfile.write(rp.draw(inputdata))
     texfile.write(p.write_footer())
     texfile.close()
 
     if opts.OUTPUT_FORMAT != ["TEX"]:
 
         ## Check for the required programs
         latexavailable = have_cmd("latex")
         dvipsavailable = have_cmd("dvips")
         convertavailable = have_cmd("convert")
         ps2pnmavailable = have_cmd("ps2pnm")
         pnm2pngavailable = have_cmd("pnm2png")
 
         # TODO: It'd be nice to be able to control the size of the PNG between thumb and full-size...
         #   currently defaults (and is used below) to a size suitable for thumbnails
         def mkpngcmd(infile, outfile, outsize=450, density=300):
             if convertavailable:
                 pngcmd = ["convert",
                           "-flatten",
                           "-density", str(density),
                           infile,
                           "-quality", "100",
                           "-resize", "{size:d}x{size:d}>".format(size=outsize),
                           #"-sharpen", "0x1.0",
                           outfile]
                 #logging.debug(" ".join(pngcmd))
                 #pngproc = subprocess.Popen(pngcmd, stdout=subprocess.PIPE, cwd=tempdir)
                 #pngproc.wait()
                 return pngcmd
             else:
                 raise Exception("Required PNG maker program (convert) not found")
             # elif ps2pnmavailable and pnm2pngavailable:
             #     pstopnm = "pstopnm -stdout -xsize=461 -ysize=422 -xborder=0.01 -yborder=0.01 -portrait " + infile
             #     p1 = subprocess.Popen(pstopnm.split(), stdout=subprocess.PIPE, stderr=open("/dev/null", "w"), cwd=tempdir)
             #     p2 = subprocess.Popen(["pnmtopng"], stdin=p1.stdout, stdout=open("%s/%s.png" % (tempdir, outfile), "w"), stderr=open("/dev/null", "w"), cwd=tempdir)
             #     p2.wait()
             # else:
             #     raise Exception("Required PNG maker programs (convert, or ps2pnm and pnm2png) not found")
 
         ## Run LaTeX (in no-stop mode)
         logging.debug(os.listdir(tempdir))
         texcmd = ["latex", "\scrollmode\input", texpath]
         logging.debug("TeX command: " + " ".join(texcmd))
         texproc = subprocess.Popen(texcmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=tempdir)
         logging.debug(texproc.communicate()[0])
         logging.debug(os.listdir(tempdir))
 
         ## Run dvips
         dvcmd = ["dvips", filename]
         if not logging.getLogger().isEnabledFor(logging.DEBUG):
             dvcmd.append("-q")
         ## Handle Minion Font
         if opts.OUTPUT_FONT == "MINION":
             dvcmd.append('-Pminion')
 
         ## Choose format
         # TODO: Rationalise... this is a mess! Maybe we can use tex2pix?
         if "PS" in opts.OUTPUT_FORMAT:
             dvcmd += ["-o", "%s.ps" % filename]
             logging.debug(" ".join(dvcmd))
             dvproc = subprocess.Popen(dvcmd, stdout=subprocess.PIPE, cwd=tempdir)
             dvproc.wait()
         if "PDF" in opts.OUTPUT_FORMAT:
             dvcmd.append("-f")
             logging.debug(" ".join(dvcmd))
             dvproc = subprocess.Popen(dvcmd, stdout=subprocess.PIPE, cwd=tempdir)
             cnvproc = subprocess.Popen(["ps2pdf", "-"], stdin=dvproc.stdout, stdout=subprocess.PIPE, cwd=tempdir)
             f = open(os.path.join(tempdir, "%s.pdf" % filename), "w")
             f.write(cnvproc.communicate()[0])
             f.close()
         if "EPS" in opts.OUTPUT_FORMAT:
             dvcmd.append("-f")
             logging.debug(" ".join(dvcmd))
             dvproc = subprocess.Popen(dvcmd, stdout=subprocess.PIPE, cwd=tempdir)
             cnvproc = subprocess.Popen(["ps2eps"], stdin=dvproc.stdout, stderr=subprocess.PIPE, stdout=subprocess.PIPE, cwd=tempdir)
             f = open(os.path.join(tempdir, "%s.eps" % filename), "w")
             f.write(cnvproc.communicate()[0])
             f.close()
         if "PNG" in opts.OUTPUT_FORMAT:
             dvcmd.append("-f")
             logging.debug(" ".join(dvcmd))
             dvproc = subprocess.Popen(dvcmd, stdout=subprocess.PIPE, cwd=tempdir)
             #pngcmd = ["convert", "-flatten", "-density", "110", "-", "-quality", "100", "-sharpen", "0x1.0", "%s.png" % filename]
             pngcmd = mkpngcmd("-", "%s.png" % filename)
             logging.debug(" ".join(pngcmd))
             pngproc = subprocess.Popen(pngcmd, stdin=dvproc.stdout, stdout=subprocess.PIPE, cwd=tempdir)
             pngproc.wait()
         logging.debug(os.listdir(tempdir))
 
     ## Copy results back to main dir
     for fmt in opts.OUTPUT_FORMAT:
         outname = "%s.%s" % (filename, fmt.lower())
         outpath = os.path.join(tempdir, outname)
         if os.path.exists(outpath):
-            shutil.copy(outpath, os.path.join(cwd,dirname))
+            shutil.copy(outpath, outdir)
         else:
             logging.error("No output file '%s' from processing %s" % (outname, datfile))
 
     ## Clean up
     if not opts.NO_CLEANUP:
         shutil.rmtree(tempdir, ignore_errors=True)
 
 
 ####################
 
 
 if __name__ == '__main__':
 
     ## Try to rename the process on Linux
     try:
         import ctypes
         libc = ctypes.cdll.LoadLibrary('libc.so.6')
         libc.prctl(15, 'make-plots', 0, 0, 0)
     except Exception:
         pass
 
     ## Try to use Psyco optimiser
     try:
         import psyco
         psyco.full()
     except ImportError:
         pass
 
     ## Find number of (virtual) processing units
     import multiprocessing
     try:
         numcores = multiprocessing.cpu_count()
     except:
         numcores = 1
 
     ## Parse command line options
     from optparse import OptionParser, OptionGroup
     parser = OptionParser(usage=__doc__)
-    parser.add_option("-n", "-j", "--num-threads", dest="NUM_THREADS", type="int",
+    parser.add_option("-j", "-n", "--num-threads", dest="NUM_THREADS", type="int",
                       default=numcores, help="max number of threads to be used [%s]" % numcores)
+    parser.add_option("-o", "--outdir", dest="OUTPUT_DIR", default=None,
+                      help="choose the output directory (default = .dat dir)")
     parser.add_option("--font", dest="OUTPUT_FONT", choices="palatino,cm,times,helvetica,minion".split(","),
                       default="palatino", help="choose the font to be used in the plots")
     parser.add_option("--palatino", dest="OUTPUT_FONT", action="store_const", const="palatino", default="palatino",
                       help="use Palatino as font (default). DEPRECATED: Use --font")
     parser.add_option("--cm", dest="OUTPUT_FONT", action="store_const", const="cm", default="palatino",
                       help="use Computer Modern as font. DEPRECATED: Use --font")
     parser.add_option("--times", dest="OUTPUT_FONT", action="store_const", const="times", default="palatino",
                       help="use Times as font. DEPRECATED: Use --font")
     parser.add_option("--minion", dest="OUTPUT_FONT", action="store_const", const="minion", default="palatino",
                       help="use Adobe Minion Pro as font. Note: You need to set TEXMFHOME first. DEPRECATED: Use --font")
     parser.add_option("--helvetica", dest="OUTPUT_FONT", action="store_const", const="helvetica", default="palatino",
                       help="use Helvetica as font. DEPRECATED: Use --font")
     parser.add_option("--format", dest="OUTPUT_FORMAT", default="PDF",
                       help="choose plot format, perhaps multiple comma-separated formats e.g. 'pdf' or 'tex,pdf,png' (default = PDF).")
     parser.add_option("--ps", dest="OUTPUT_FORMAT", action="store_const", const="PS", default="PDF",
                       help="create PostScript output (default). DEPRECATED")
     parser.add_option("--pdf", dest="OUTPUT_FORMAT", action="store_const", const="PDF", default="PDF",
                       help="create PDF output. DEPRECATED")
     parser.add_option("--eps", dest="OUTPUT_FORMAT", action="store_const", const="EPS", default="PDF",
                       help="create Encapsulated PostScript output. DEPRECATED")
     parser.add_option("--png", dest="OUTPUT_FORMAT", action="store_const", const="PNG", default="PDF",
                      help="create PNG output. DEPRECATED")
     parser.add_option("--pspng", dest="OUTPUT_FORMAT", action="store_const", const="PS,PNG", default="PDF",
                      help="create PS and PNG output. DEPRECATED")
     parser.add_option("--pdfpng", dest="OUTPUT_FORMAT", action="store_const", const="PDF,PNG", default="PDF",
                      help="create PDF and PNG output. DEPRECATED")
     parser.add_option("--epspng", dest="OUTPUT_FORMAT", action="store_const", const="EPS,PNG", default="PDF",
                      help="create EPS and PNG output. DEPRECATED")
     parser.add_option("--tex", dest="OUTPUT_FORMAT", action="store_const", const="TEX", default="PDF",
                       help="create TeX/LaTeX output.")
     parser.add_option("--no-cleanup", dest="NO_CLEANUP", action="store_true", default=False,
                       help="keep temporary directory and print its filename.")
     parser.add_option("--no-subproc", dest="NO_SUBPROC", action="store_true", default=False,
                       help="don't use subprocesses to render the plots in parallel -- useful for debugging.")
     parser.add_option("--full-range", dest="FULL_RANGE", action="store_true", default=False,
-                      help="plot full y range in LogY plots.")
+                      help="plot full y range in log-y plots.")
     parser.add_option("-c", "--config", dest="CONFIGFILES", action="append", default=None,
                       help="plot config file to be used. Overrides internal config blocks.")
     verbgroup = OptionGroup(parser, "Verbosity control")
     verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL",
                          default=logging.INFO, help="print debug (very verbose) messages")
     verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL",
                          default=logging.INFO, help="be very quiet")
     parser.add_option_group(verbgroup)
-
     opts, args = parser.parse_args()
+
+    ## Tweak the opts output
     logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s")
     opts.OUTPUT_FONT = opts.OUTPUT_FONT.upper()
     opts.OUTPUT_FORMAT = opts.OUTPUT_FORMAT.upper().split(",")
+    if opts.NUM_THREADS == 1:
+        opts.NO_SUBPROC = True
 
     ## Check for no args
     if len(args) == 0:
         logging.error(parser.get_usage())
         sys.exit(2)
 
     ## Check that the files exist
     for f in args:
         if not os.access(f, os.R_OK):
             print "Error: cannot read from %s" % f
             sys.exit(1)
 
     ## Test for external programs (kpsewhich, latex, dvips, ps2pdf/ps2eps, and convert)
     opts.LATEXPKGS = []
     if opts.OUTPUT_FORMAT != ["TEX"]:
         try:
             ## latex
             if not have_cmd("latex"):
                 logging.error("ERROR: required program 'latex' could not be found. Exiting...")
                 sys.exit(1)
             ## dvips
             if not have_cmd("dvips"):
                 logging.error("ERROR: required program 'dvips' could not be found. Exiting...")
                 sys.exit(1)
 
             ## ps2pdf / ps2eps
             if "PDF" in opts.OUTPUT_FORMAT:
                 if not have_cmd("ps2pdf"):
                     logging.error("ERROR: required program 'ps2pdf' (for PDF output) could not be found. Exiting...")
                     sys.exit(1)
             elif "EPS" in opts.OUTPUT_FORMAT:
                 if not have_cmd("ps2eps"):
                     logging.error("ERROR: required program 'ps2eps' (for EPS output) could not be found. Exiting...")
                     sys.exit(1)
             ## PNG output converter
             if "PNG" in opts.OUTPUT_FORMAT:
                 if not have_cmd("convert"):
                     logging.error("ERROR: required program 'convert' (for PNG output) could not be found. Exiting...")
                     sys.exit(1)
 
             ## kpsewhich: required for LaTeX package testing
             if not have_cmd("kpsewhich"):
                 logging.warning("WARNING: required program 'kpsewhich' (for LaTeX package checks) could not be found")
             else:
                 ## Check minion font
                 if opts.OUTPUT_FONT == "MINION":
                     p = subprocess.Popen(["kpsewhich", "minion.sty"], stdout=subprocess.PIPE)
                     p.wait()
                     if p.returncode != 0:
                         logging.warning('Warning: Using "--minion" requires minion.sty to be installed. Ignoring it.')
                         opts.OUTPUT_FONT = "PALATINO"
 
                 ## Check for HEP LaTeX packages
                 # TODO: remove HEP-specifics/non-standards?
                 for pkg in ["hepnames", "hepunits", "underscore"]:
                     p = subprocess.Popen(["kpsewhich", "%s.sty" % pkg], stdout=subprocess.PIPE)
                     p.wait()
                     if p.returncode == 0:
                         opts.LATEXPKGS.append(pkg)
 
                 ## Check for Palatino old style figures and small caps
                 if opts.OUTPUT_FONT == "PALATINO":
                     p = subprocess.Popen(["kpsewhich", "ot1pplx.fd"], stdout=subprocess.PIPE)
                     p.wait()
                     if p.returncode == 0:
                         opts.OUTPUT_FONT = "PALATINO_OSF"
         except Exception, e:
             logging.warning("Problem while testing for external packages. I'm going to try and continue without testing, but don't hold your breath...")
 
     def init_worker():
         import signal
         signal.signal(signal.SIGINT, signal.SIG_IGN)
 
     ## Run rendering jobs
     datfiles = args
     plotword = "plots" if len(datfiles) > 1 else "plot"
     logging.info("Making %d %s" % (len(datfiles), plotword))
     if opts.NO_SUBPROC:
         init_worker()
         for i, df in enumerate(datfiles):
             logging.info("Plotting %s (%d/%d remaining)" % (df, len(datfiles)-i, len(datfiles)))
             process_datfile(df)
     else:
         pool = multiprocessing.Pool(opts.NUM_THREADS, init_worker)
         try:
             for i, _ in enumerate(pool.imap(process_datfile, datfiles)):
                 logging.info("Plotting %s (%d/%d remaining)" % (datfiles[i], len(datfiles)-i, len(datfiles)))
             pool.close()
         except KeyboardInterrupt:
             print "Caught KeyboardInterrupt, terminating workers"
             pool.terminate()
         pool.join()
diff --git a/bin/make-plots-fast b/bin/make-plots-fast
--- a/bin/make-plots-fast
+++ b/bin/make-plots-fast
@@ -1,2762 +1,2839 @@
 #! /usr/bin/env python
 
 """\
 Usage: %prog [options] file.dat [file2.dat ...]
 
 TODO
  * Optimise output for e.g. lots of same-height bins in a row
  * Add a RatioFullRange directive to show the full range of error bars + MC envelope in the ratio
  * Tidy LaTeX-writing code -- faster to compile one doc only, then split it?
  * Handle boolean values flexibly (yes, no, true, false, etc. as well as 1, 0)
 """
 
 ##
 ## This program is copyright by Hendrik Hoeth <hoeth@linta.de> and
 ## the Rivet team https://rivet.hepforge.org. It may be used
 ## for scientific and private purposes. Patches are welcome, but please don't
 ## redistribute changed versions yourself.
 ##
 
 ## Check the Python version
 import sys
 if sys.version_info[:3] < (2,6,0):
     print "make-plots requires Python version >= 2.6.0... exiting"
     sys.exit(1)
 
 ## Try to rename the process on Linux
 try:
     import ctypes
     libc = ctypes.cdll.LoadLibrary('libc.so.6')
     libc.prctl(15, 'make-plots', 0, 0, 0)
 except Exception, e:
     pass
 
 
 import os, logging, re
 import tempfile
 import getopt
 import string
 from math import *
 
 
 ## Regex patterns
 pat_begin_block = re.compile(r'^#+\s*BEGIN ([A-Z0-9_]+) ?(\S+)?')
 pat_end_block =   re.compile('^#+\s*END ([A-Z0-9_]+)')
 pat_comment = re.compile('^#|^\s*$')
 pat_property = re.compile('^(\w+?)=(.*)$')
 pat_path_property  = re.compile('^(\S+?)::(\w+?)=(.*)$')
 
 
 def fuzzyeq(a, b, tolerance=1e-6):
     "Fuzzy equality comparison function for floats, with given fractional tolerance"
     # if type(a) is not float or type(a) is not float:
     #     print a, b
     if (a == 0 and abs(b) < 1e-12) or (b == 0 and abs(a) < 1e-12):
         return True
     return 2.0*abs(a-b)/abs(a+b) < tolerance
 
 def inrange(x, a, b):
     return x >= a and x < b
 
 def floatify(x):
     if type(x) is str:
         x = x.split()
     if not hasattr(x, "__len__"):
         x = [x]
     x = [float(a) for a in x]
     return x[0] if len(x) == 1 else x
 
 def floatpair(x):
     if type(x) is str:
         x = x.split()
     if hasattr(x, "__len__"):
         assert len(x) == 2
         return [float(a) for a in x]
     return [float(x), float(x)]
 
 
 def is_end_marker(line, blockname):
     m = pat_end_block.match(line)
     return m and m.group(1) == blockname
 
 def is_comment(line):
     return pat_comment.match(line) is not None
 
 
 
 class Described(object):
     "Inherited functionality for objects holding a 'description' dictionary"
 
     def __init__(self):
         pass
 
     def has_attr(self, key):
         return self.description.has_key(key)
 
     def set_attr(self, key, val):
         self.description[key] = val
 
     def attr(self, key, default=None):
         return self.description.get(key, default)
 
     def attr_bool(self, key, default=None):
         x = self.attr(key, default)
         if x is None: return None
         if str(x).lower() in ["1", "true", "yes", "on"]: return True
         if str(x).lower() in ["0", "false", "no", "off"]: return False
         return None
 
     def attr_int(self, key, default=None):
         x = self.attr(key, default)
         try:
             x = int(x)
         except:
             x = None
         return x
 
     def attr_float(self, key, default=None):
         x = self.attr(key, default)
         try:
             x = float(x)
         except:
             x = None
         return x
 
 
 
 class InputData(Described):
 
     def __init__(self, filename):
-        self.filename = filename+".dat"
+        self.filename = filename
+        if not self.filename.endswith(".dat"):
+            self.filename += ".dat"
         self.histos = {}
         self.special = {}
         self.functions = {}
 
         self.description = {}
         self.pathdescriptions = []
 
         self.is2dim = False
         f = open(self.filename)
         for line in f:
             m = pat_begin_block.match(line)
             if m:
                 name, path = m.group(1,2)
                 if path is None and name != 'PLOT':
                     raise Exception('BEGIN sections need a path name.')
 
                 ## Pass the reading of the block to separate functions
                 if name == 'PLOT':
                     self.read_input(f);
                 elif name == 'SPECIAL':
                     self.special[path] = Special(f)
                 elif name == 'HISTOGRAM' or name == 'HISTOGRAM2D':
                     self.histos[path] = Histogram(f, p=path)
                     # self.histos[path].path = path
                     self.description['is2dim'] = self.histos[path].is2dim
                 elif name == 'HISTO1D':
                     self.histos[path] = Histo1D(f, p=path)
                 elif name == 'HISTO2D':
                     self.histos[path] = Histo2D(f, p=path)
                     self.description['is2dim'] = True
+                elif name == 'COUNTER':
+                    self.histos[path] = Counter(f, p=path)
+                elif name == 'VALUE':
+                    self.histos[path] = Value(f, p=path)
                 elif name == 'FUNCTION':
                     self.functions[path] = Function(f)
 #            elif is_comment(line):
 #                continue
 #            else:
 #                self.read_path_based_input(line)
         f.close()
 
         self.apply_config_files(opts.CONFIGFILES)
 
         ## Plot (and subplot) sizing
         # TODO: Use attr functions and bools properly
         self.description.setdefault('PlotSizeX', 10.)
         if self.description['is2dim']:
             self.description['PlotSizeX'] -= 1.7
             self.description['MainPlot'] = '1'
             self.description['RatioPlot'] = '0'
 
         if self.description.has_key('PlotSize') and self.description['PlotSize']!='':
             plotsizes = self.description['PlotSize'].split(',')
             self.description['PlotSizeX'] = float(plotsizes[0])
             self.description['PlotSizeY'] = float(plotsizes[1])
             if len(plotsizes) == 3:
                 self.description['RatioPlotSizeY'] = float(plotsizes[2])
             del self.description['PlotSize']
 
         if self.description.get('MainPlot', '1') == '0':
             ## Ratio, no main
             self.description['RatioPlot'] = '1' #< don't allow both to be zero!
             self.description['PlotSizeY'] = 0.
             self.description.setdefault('RatioPlotSizeY', 9.)
         else:
             if self.description.get('RatioPlot', '0') == '1':
                 ## Main and ratio
                 self.description.setdefault('PlotSizeY', 6.)
                 self.description.setdefault('RatioPlotSizeY', self.description.get('RatioPlotYSize', 3.))
             else:
                 ## Main, no ratio
                 self.description.setdefault('PlotSizeY', self.description.get('PlotYSize', 9.))
                 self.description['RatioPlotSizeY'] = 0.
 
         ## Ensure numbers, not strings
         self.description['PlotSizeX'] = float(self.description['PlotSizeX'])
         self.description['PlotSizeY'] = float(self.description['PlotSizeY'])
         self.description['RatioPlotSizeY'] = float(self.description['RatioPlotSizeY'])
         # self.description['TopMargin'] = float(self.description['TopMargin'])
         # self.description['BottomMargin'] = float(self.description['BottomMargin'])
 
-        self.description['LogX'] = self.description.has_key('LogX') and self.description['LogX']=='1'
-        self.description['LogY'] = self.description.has_key('LogY') and self.description['LogY']=='1'
-        self.description['LogZ'] = self.description.has_key('LogZ') and self.description['LogZ']=='1'
+        self.description['LogX'] = str(self.description.get('LogX', 0)) in ["1", "yes", "true"]
+        self.description['LogY'] = str(self.description.get('LogY', 0)) in ["1", "yes", "true"]
+        self.description['LogZ'] = str(self.description.get('LogZ', 0)) in ["1", "yes", "true"]
         if self.description.has_key('Rebin'):
             for i in self.histos:
                 self.histos[i].description['Rebin'] = self.description['Rebin']
 
         histoordermap = {}
         histolist = self.histos.keys()
         if self.description.has_key('DrawOnly'):
             histolist = filter(self.histos.keys().count, self.description['DrawOnly'].strip().split())
         for histo in histolist:
             order = 0
             if self.histos[histo].description.has_key('PlotOrder'):
                 order = int(self.histos[histo].description['PlotOrder'])
             if not order in histoordermap:
                 histoordermap[order] = []
             histoordermap[order].append(histo)
         sortedhistolist = []
         for i in sorted(histoordermap.keys()):
             sortedhistolist.extend(histoordermap[i])
         self.description['DrawOnly'] = sortedhistolist
 
 
         ## Inherit various values from histograms if not explicitly set
         for k in ['LogX', 'LogY', 'LogZ',
                   'XLabel', 'YLabel', 'ZLabel',
                   'XCustomMajorTicks', 'YCustomMajorTicks', 'ZCustomMajorTicks']:
             self.inherit_from_histos(k)
 
         return
 
 
     @property
     def is2dim(self):
         return self.attr_bool("is2dim", False)
     @is2dim.setter
     def is2dim(self, val):
         self.set_attr("is2dim", val)
 
 
     @property
     def drawonly(self):
         x = self.attr("DrawOnly")
         if type(x) is str:
             self.drawonly = x #< use setter to listify
         return x if x else []
     @drawonly.setter
     def drawonly(self, val):
         if type(val) is str:
             val = val.strip().split()
         self.set_attr("DrawOnly", val)
 
 
     @property
     def stacklist(self):
         x = self.attr("Stack")
         if type(x) is str:
             self.stacklist = x #< use setter to listify
         return x if x else []
     @stacklist.setter
     def stacklist(self, val):
         if type(val) is str:
             val = val.strip().split()
         self.set_attr("Stack", val)
 
 
     @property
     def plotorder(self):
         x = self.attr("PlotOrder")
         if type(x) is str:
             self.plotorder = x #< use setter to listify
         return x if x else []
     @plotorder.setter
     def plotorder(self, val):
         if type(val) is str:
             val = val.strip().split()
         self.set_attr("PlotOrder", val)
 
 
     @property
     def plotsizex(self):
         return self.attr_float("PlotSizeX")
     @plotsizex.setter
     def plotsizex(self, val):
         self.set_attr("PlotSizeX", val)
 
     @property
     def plotsizey(self):
         return self.attr_float("PlotSizeY")
     @plotsizey.setter
     def plotsizey(self, val):
         self.set_attr("PlotSizeY", val)
 
     @property
     def plotsize(self):
         return [self.plotsizex, self.plotsizey]
     @plotsize.setter
     def plotsize(self, val):
         if type(val) is str:
             val = [float(x) for x in val.split(",")]
         assert len(val) == 2
         self.plotsizex = val[0]
         self.plotsizey = val[1]
 
     @property
     def ratiosizey(self):
         return self.attr_float("RatioPlotSizeY")
     @ratiosizey.setter
     def ratiosizey(self, val):
         self.set_attr("RatioPlotSizeY", val)
 
 
     @property
     def scale(self):
         return self.attr_float("Scale")
     @scale.setter
     def scale(self, val):
         self.set_attr("Scale", val)
 
 
     @property
     def xmin(self):
         return self.attr_float("XMin")
     @xmin.setter
     def xmin(self, val):
         self.set_attr("XMin", val)
 
     @property
     def xmax(self):
         return self.attr_float("XMax")
     @xmax.setter
     def xmax(self, val):
         self.set_attr("XMax", val)
 
     @property
     def xrange(self):
         return [self.xmin, self.xmax]
     @xrange.setter
     def xrange(self, val):
         if type(val) is str:
             val = [float(x) for x in val.split(",")]
         assert len(val) == 2
         self.xmin = val[0]
         self.xmax = val[1]
 
 
     @property
     def ymin(self):
         return self.attr_float("YMin")
     @ymin.setter
     def ymin(self, val):
         self.set_attr("YMin", val)
 
     @property
     def ymax(self):
         return self.attr_float("YMax")
     @ymax.setter
     def ymax(self, val):
         self.set_attr("YMax", val)
 
     @property
     def yrange(self):
         return [self.ymin, self.ymax]
     @yrange.setter
     def yrange(self, val):
         if type(val) is str:
             val = [float(y) for y in val.split(",")]
         assert len(val) == 2
         self.ymin = val[0]
         self.ymax = val[1]
 
 
     # TODO: add more rw properties for plotsize(x,y), ratiosize(y),
     #   show_mainplot, show_ratioplot, show_legend, log(x,y,z), rebin,
     #   drawonly, legendonly, plotorder, stack,
     #   label(x,y,z), majorticks(x,y,z), minorticks(x,y,z),
     #   min(x,y,z), max(x,y,z), range(x,y,z)
 
 
     def inherit_from_histos(self, k):
         """Note: this will inherit the key from a random histogram:
         only use if you're sure all histograms have this key!"""
         if not self.description.has_key(k):
             h = list(self.histos.itervalues())[0]
             if h.description.has_key(k):
                 self.description[k] = h.description[k]
 
 
     def read_input(self, f):
         for line in f:
             if is_end_marker(line, 'PLOT'):
                 break
             elif is_comment(line):
                 continue
             m = pat_property.match(line)
             if m:
                 prop, value = m.group(1,2)
                 if prop in self.description:
                     logging.debug("Overwriting property %s = %s -> %s" % (prop, self.description[prop], value))
                 ## Use strip here to deal with DOS newlines containing \r
                 self.description[prop.strip()] = value.strip()
 
 
     def apply_config_files(self, conffiles):
         if conffiles is not None:
             for filename in conffiles:
                 cf = open(filename,'r')
                 lines = cf.readlines()
                 for i in range(0, len(lines)):
                     ## First evaluate PLOT sections
                     m = pat_begin_block.match(lines[i])
                     if m and m.group(1) == 'PLOT' and re.match(m.group(2),self.filename):
                         while i<len(lines)-1:
                             i = i+1
                             if is_end_marker(lines[i], 'PLOT'):
                                 break
                             elif is_comment(lines[i]):
                                 continue
                             m = pat_property.match(lines[i])
                             if m:
                                 prop, value = m.group(1,2)
                                 if prop in self.description:
                                     logging.debug("Overwriting from conffile property %s = %s -> %s" % (prop, self.description[prop], value))
                                 ## Use strip here to deal with DOS newlines containing \r
                                 self.description[prop.strip()] = value.strip()
                     elif is_comment(lines[i]):
                         continue
                     else:
                         ## Then evaluate path-based settings, e.g. for HISTOGRAMs
                         m = pat_path_property.match(lines[i])
                         if m:
                             regex, prop, value = m.group(1,2,3)
                             for obj_dict in [self.special, self.histos, self.functions]:
                                 for path, obj in obj_dict.iteritems():
                                     if re.match(regex, path):
                                         ## Use strip here to deal with DOS newlines containing \r
                                         obj.description.update({prop.strip() : value.strip()})
                 cf.close()
 
 
 
 class Plot(object):
 
     def __init__(self, inputdata):
         pass
 
     def set_normalization(self,inputdata):
         for method in ['NormalizeToIntegral', 'NormalizeToSum']:
             if inputdata.description.has_key(method):
                 for i in inputdata.drawonly:
                     if not inputdata.histos[i].has_attr(method):
                         inputdata.histos[i].set_attr(method, inputdata.attr(method))
         if inputdata.scale:
             for i in inputdata.drawonly:
                 inputdata.histos[i].scale = inputdata.scale
         for i in inputdata.drawonly:
             inputdata.histos[i].mangle_input()
 
     def stack_histograms(self,inputdata):
         if inputdata.description.has_key('Stack'):
             stackhists = [h for h in inputdata.attr('Stack').strip().split() if h in inputdata.histos]
             previous = ''
             for i in stackhists:
                 if previous != '':
                     inputdata.histos[i].add(inputdata.histos[previous])
                 previous = i
 
     def set_histo_options(self,inputdata):
         if inputdata.description.has_key('ConnectGaps'):
             for i in inputdata.histos.keys():
                 if not inputdata.histos[i].description.has_key('ConnectGaps'):
                     inputdata.histos[i].description['ConnectGaps'] = inputdata.description['ConnectGaps']
+        # Counter and Value only have dummy x-axis, ticks wouldn't make sense here, so suppress them:
+        if 'Value object' in str(inputdata.histos) or 'Counter object' in str(inputdata.histos):
+          inputdata.description['XCustomMajorTicks'] = ''
+          inputdata.description['XCustomMinorTicks'] = ''
 
     def set_borders(self, inputdata):
         self.set_xmax(inputdata)
         self.set_xmin(inputdata)
         self.set_ymax(inputdata)
         self.set_ymin(inputdata)
         self.set_zmax(inputdata)
         self.set_zmin(inputdata)
         inputdata.description['Borders'] = (self.xmin, self.xmax, self.ymin, self.ymax, self.zmin, self.zmax)
 
     def set_xmin(self, inputdata):
         self.xmin = inputdata.xmin
         if self.xmin is None:
-            self.xmin = min(inputdata.histos[h].getXMin() for h in inputdata.description['DrawOnly'])
+            xmins = [inputdata.histos[h].getXMin() for h in inputdata.description['DrawOnly']]
+            self.xmin = min(xmins) if xmins else 0.0
 
     def set_xmax(self,inputdata):
         self.xmax = inputdata.xmax
         if self.xmax is None:
-            self.xmax = min(inputdata.histos[h].getXMax() for h in inputdata.description['DrawOnly'])
+            xmaxs = [inputdata.histos[h].getXMax() for h in inputdata.description['DrawOnly']]
+            self.xmax = min(xmaxs) if xmaxs else 1.0
+
 
     def set_ymin(self,inputdata):
         if inputdata.ymin is not None:
             self.ymin = inputdata.ymin
         else:
             ymins = [inputdata.histos[i].getYMin(self.xmin, self.xmax, inputdata.description['LogY']) for i in inputdata.attr('DrawOnly')]
-            minymin = min(ymins)
+            minymin = min(ymins) if ymins else 0.0
             if inputdata.description['is2dim']:
                 self.ymin = minymin
             else:
                 showzero = inputdata.attr_bool("ShowZero", True)
                 if showzero:
                     self.ymin = 0. if minymin > -1e-4 else 1.1*minymin
                 else:
                     self.ymin = 1.1*minymin if minymin < -1e-4 else 0 if minymin < 1e-4 else 0.9*minymin
                 if inputdata.description['LogY']:
                     ymins = [ymin for ymin in ymins if ymin > 0.0]
                     if not ymins:
                         if self.ymax == 0:
                             self.ymax = 1
                         ymins.append(2e-7*self.ymax)
                     minymin = min(ymins)
                     fullrange = opts.FULL_RANGE
                     if inputdata.has_attr('FullRange'):
                         fullrange = inputdata.attr_bool('FullRange')
                     self.ymin = minymin/1.7 if fullrange else max(minymin/1.7, 2e-7*self.ymax)
 
                 if self.ymin == self.ymax:
                     self.ymin -= 1
                     self.ymax += 1
 
     def set_ymax(self,inputdata):
         if inputdata.has_attr('YMax'):
             self.ymax = inputdata.attr_float('YMax')
         else:
-            self.ymax = max(inputdata.histos[h].getYMax(self.xmin, self.xmax) for h in inputdata.attr('DrawOnly'))
+            ymaxs = [inputdata.histos[h].getYMax(self.xmin, self.xmax) for h in inputdata.attr('DrawOnly')]
+            self.ymax = max(ymaxs) if ymaxs else 1.0
             if not inputdata.is2dim:
                 self.ymax *= (1.7 if inputdata.attr_bool('LogY') else 1.1)
 
     def set_zmin(self,inputdata):
         if inputdata.has_attr('ZMin'):
             self.zmin = inputdata.attr_float('ZMin')
         else:
             zmins = [inputdata.histos[i].getZMin(self.xmin, self.xmax, self.ymin, self.ymax) for i in inputdata.attr('DrawOnly')]
-            minzmin = min(zmins)
+            minzmin = min(zmins) if zmins else 0.0
             self.zmin = minzmin
             if zmins:
                 showzero = inputdata.attr_bool('ShowZero', True)
                 if showzero:
                     self.zmin = 0 if minzmin > -1e-4 else 1.1*minzmin
                 else:
                     self.zmin = 1.1*minzmin if minzmin < -1e-4 else 0. if minzmin < 1e-4 else 0.9*minzmin
                 if inputdata.attr_bool('LogZ', False):
                     zmins = [zmin for zmin in zmins if zmin > 0]
                     if not zmins:
                         if self.zmax == 0:
                             self.zmax = 1
                         zmins.append(2e-7*self.zmax)
                     minzmin = min(zmins)
                     fullrange = inputdata.attr_bool("FullRange", opts.FULL_RANGE)
                     self.zmin = minzmin/1.7 if fullrange else max(minzmin/1.7, 2e-7*self.zmax)
 
                 if self.zmin == self.zmax:
                     self.zmin -= 1
                     self.zmax += 1
 
     def set_zmax(self,inputdata):
         self.zmax = inputdata.attr_float('ZMax')
         if self.zmax is None:
             zmaxs = [inputdata.histos[h].getZMax(self.xmin, self.xmax, self.ymin, self.ymax) for h in inputdata.attr('DrawOnly')]
-            self.zmax = max(zmaxs) if zmaxs else 1
+            self.zmax = max(zmaxs) if zmaxs else 1.0
 
 
     def draw(self):
         pass
 
 
     def write_header(self,inputdata):
         out = '\\begin{multipage}\n'
         out += '\\begin{pspicture}(0,0)(0,0)\n'
         out += '\\psset{xunit=%scm}\n' %(inputdata.description['PlotSizeX'])
         if inputdata.description['is2dim']:
             colorseries = '{hsb}{grad}[rgb]{0,0,1}{-.700,0,0}'
             if inputdata.description.has_key('ColorSeries') and inputdata.description['ColorSeries']!='':
                 colorseries = inputdata.description['ColorSeries']
             out += '\\definecolorseries{gradientcolors}%s\n' % colorseries
             out += '\\resetcolorseries[130]{gradientcolors}\n'
         return out
 
     def write_footer(self):
         out = '\\end{pspicture}\n'
         out += '\\end{multipage}\n'
         out += '%\n%\n'
         return out
 
 
 
 class MainPlot(Plot):
 
     def __init__(self, inputdata):
         self.set_normalization(inputdata)
         self.stack_histograms(inputdata)
         if (inputdata.description.has_key('GofLegend')  and inputdata.description['GofLegend']=='1') or \
            (inputdata.description.has_key('GofFrame')   and inputdata.description['GofFrame']!='') and not \
            (inputdata.description.has_key('TaylorPlot') and inputdata.description['TaylorPlot']=='1'):
             self.calculate_gof(inputdata)
         self.set_histo_options(inputdata)
         self.set_borders(inputdata)
         self.yoffset = inputdata.description['PlotSizeY']
         self.coors = Coordinates(inputdata)
 
     def draw(self, inputdata):
         out = ""
         out += ('\n%\n% MainPlot\n%\n')
         out += ('\\psset{yunit=%scm}\n' %(self.yoffset))
         out += ('\\rput(0,-1){%\n')
         out += ('\\psset{yunit=%scm}\n' %(inputdata.description['PlotSizeY']))
         out += self._draw(inputdata)
         out += ('}\n')
         return out
 
     def _draw(self, inputdata):
         out = ""
 
         # TODO: do this more compactly, e.g. by assigning sorting keys!
         if inputdata.attr_bool('DrawSpecialFirst', False):
-            for s in inputdata.special:
+            for s in inputdata.special.values():
                 out += s.draw(self.coors)
             if inputdata.attr_bool('DrawFunctionFirst', False):
-                for f in inputdata.functions:
+                for f in inputdata.functions.values():
                     out += f.draw(self.coors)
                 for i in inputdata.description['DrawOnly']:
                     out += inputdata.histos[i].draw(self.coors)
             else:
                 for i in inputdata.description['DrawOnly']:
                     out += inputdata.histos[i].draw(self.coors)
-                for f in inputdata.functions:
+                for f in inputdata.functions.values():
                     out += f.draw(self.coors)
         else:
             if inputdata.attr_bool('DrawFunctionFirst', False):
-                for f in inputdata.functions:
+                for f in inputdata.functions.values():
                     out += f.draw(self.coors)
                 for i in inputdata.description['DrawOnly']:
                     out += inputdata.histos[i].draw(self.coors)
             else:
                 for i in inputdata.description['DrawOnly']:
                     out += inputdata.histos[i].draw(self.coors)
-                for f in inputdata.functions:
+                for f in inputdata.functions.values():
                     out += f.draw(self.coors)
-            for i in inputdata.special.keys():
-                out += inputdata.special[i].draw(self.coors)
+            for s in inputdata.special.values():
+                out += s.draw(self.coors)
 
         if inputdata.attr_bool('Legend', False):
             legend = Legend(inputdata.description,inputdata.histos,inputdata.functions)
             out += legend.draw()
         if inputdata.description['is2dim']:
             colorscale = ColorScale(inputdata.description, self.coors)
             out += colorscale.draw()
         frame = Frame()
         out += frame.draw(inputdata)
 
         xcustommajortickmarks = inputdata.attr_int('XMajorTickMarks', -1)
         xcustomminortickmarks = inputdata.attr_int('XMinorTickMarks', -1)
 
         xcustommajorticks = xcustomminorticks = None
         if inputdata.attr('XCustomMajorTicks'):
             xcustommajorticks = []
             x_label_pairs = inputdata.attr('XCustomMajorTicks').strip().split() #'\t')
             if len(x_label_pairs) % 2 == 0:
                 for i in range(0, len(x_label_pairs), 2):
                     xcustommajorticks.append({'Value': float(x_label_pairs[i]), 'Label': x_label_pairs[i+1]})
             else:
                 print "Warning: XCustomMajorTicks requires an even number of alternating pos/label entries"
 
         if inputdata.attr('XCustomMinorTicks'):
             xs = inputdata.attr('XCustomMinorTicks').strip().split() #'\t')
             xcustomminorticks = [{'Value': float(x)} for x in xs]
 
         xticks = XTicks(inputdata.description, self.coors)
         drawxlabels = inputdata.attr_bool('PlotXTickLabels', True) and not inputdata.attr_bool('RatioPlot', False)
 
         out += xticks.draw(custommajortickmarks=xcustommajortickmarks,
                            customminortickmarks=xcustomminortickmarks,
                            custommajorticks=xcustommajorticks,
                            customminorticks=xcustomminorticks,
                            drawlabels=drawxlabels)
 
         ycustommajortickmarks = inputdata.attr_int('YMajorTickMarks', -1)
         ycustomminortickmarks = inputdata.attr_int('YMinorTickMarks', -1)
 
         ycustommajorticks = ycustomminorticks = None
         if inputdata.description.has_key('YCustomMajorTicks'):
             ycustommajorticks = []
             y_label_pairs = inputdata.description['YCustomMajorTicks'].strip().split() #'\t')
             if len(y_label_pairs) % 2 == 0:
                 for i in range(0, len(y_label_pairs), 2):
                     ycustommajorticks.append({'Value': float(y_label_pairs[i]), 'Label': y_label_pairs[i+1]})
             else:
                 print "Warning: YCustomMajorTicks requires an even number of alternating pos/label entries"
 
         if inputdata.has_attr('YCustomMinorTicks'):
             ys = inputdata.attr('YCustomMinorTicks').strip().split() #'\t')
             ycustomminorticks = [{'Value': float(y)} for y in ys]
 
         yticks = YTicks(inputdata.description, self.coors)
         drawylabels = inputdata.attr_bool('PlotYTickLabels', True)
 
         out += yticks.draw(custommajortickmarks=ycustommajortickmarks,
                            customminortickmarks=ycustomminortickmarks,
                            custommajorticks=ycustommajorticks,
                            customminorticks=ycustomminorticks,
                            drawlabels=drawylabels)
 
         labels = Labels(inputdata.description)
         if inputdata.attr_bool('RatioPlot', False):
             olab = labels.draw(['Title','YLabel'])
         else:
             if not inputdata.description['is2dim']:
                 olab = labels.draw(['Title','XLabel','YLabel'])
             else:
                 olab = labels.draw(['Title','XLabel','YLabel','ZLabel'])
         out += olab
         return out
 
 
     def calculate_gof(self, inputdata):
         refdata = inputdata.description.get('GofReference')
         if refdata is None:
             refdata = inputdata.description.get('RatioPlotReference')
 
         if refdata is None:
             inputdata.description['GofLegend'] = '0'
             inputdata.description['GofFrame'] = ''
             return
 
         def pickcolor(gof):
             color = None
             colordefs = {}
             for i in inputdata.description.setdefault('GofFrameColor', '0:green 3:yellow 6:red!70').strip().split():
                 foo = i.split(':')
                 if len(foo) != 2:
                     continue
                 colordefs[float(foo[0])] = foo[1]
             for i in sorted(colordefs.keys()):
                 if gof>=i:
                     color=colordefs[i]
             return color
 
         inputdata.description.setdefault('GofLegend', '0')
         inputdata.description.setdefault('GofFrame', '')
         inputdata.description.setdefault('FrameColor', None)
 
         for i in inputdata.description['DrawOnly']:
             if i == refdata:
                 continue
             if inputdata.description['GofLegend']!='1' and i!=inputdata.description['GofFrame']:
                 continue
 
             if inputdata.description.has_key('GofType') and inputdata.description['GofType']!='chi2':
                 return
             gof = inputdata.histos[i].getChi2(inputdata.histos[refdata])
             if i == inputdata.description['GofFrame'] and inputdata.description['FrameColor'] is None:
                 inputdata.description['FrameColor'] = pickcolor(gof)
             if inputdata.histos[i].description.setdefault('Title', '') != '':
                 inputdata.histos[i].description['Title'] += ', '
             inputdata.histos[i].description['Title'] += '$\\chi^2/n={}$%1.2f' %gof
 
 
 
 class TaylorPlot(Plot):
 
     def __init__(self, inputdata):
         self.refdata = inputdata.description['TaylorPlotReference']
         self.calculate_taylorcoordinates(inputdata)
 
     def calculate_taylorcoordinates(self,inputdata):
         foo = inputdata.description['DrawOnly'].pop(inputdata.description['DrawOnly'].index(self.refdata))
         inputdata.description['DrawOnly'].append(foo)
         for i in inputdata.description['DrawOnly']:
             print i
             print 'meanbinval  = ', inputdata.histos[i].getMeanBinValue()
             print 'sigmabinval = ', inputdata.histos[i].getSigmaBinValue()
             print 'chi2/nbins  = ', inputdata.histos[i].getChi2(inputdata.histos[self.refdata])
             print 'correlation = ', inputdata.histos[i].getCorrelation(inputdata.histos[self.refdata])
             print 'distance    = ', inputdata.histos[i].getRMSdistance(inputdata.histos[self.refdata])
 
 
 
 class RatioPlot(Plot):
 
     def __init__(self, inputdata):
 
         self.refdata = inputdata.description['RatioPlotReference']
         self.yoffset = inputdata.description['PlotSizeY'] + inputdata.description['RatioPlotSizeY']
 
         inputdata.description['RatioPlotStage'] = True
         inputdata.description['PlotSizeY'] = inputdata.description['RatioPlotSizeY']
-        inputdata.description['LogY'] = False
+        inputdata.description['LogY'] = False  # TODO: actually, log ratio plots could be useful...
 
         # TODO: It'd be nice it this wasn't so MC-specific
         if inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode']=='deviation':
             inputdata.description['YLabel'] = '$(\\text{MC}-\\text{data})$'
             inputdata.description['YMin'] = -3.5
             inputdata.description['YMax'] = 3.5
         elif inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode']=='datamc':
             inputdata.description['YLabel'] = 'Data/MC'
             inputdata.description['YMin'] = 0.5
             inputdata.description['YMax'] = 1.5
         else:
             inputdata.description['YLabel'] = 'MC/Data'
             inputdata.description['YMin'] = 0.5
             inputdata.description['YMax'] = 1.5
 
         if inputdata.description.has_key('RatioPlotYLabel'):
             inputdata.description['YLabel'] = inputdata.description['RatioPlotYLabel']
         inputdata.description['YLabel']='\\rput(-%s,0){%s}'%(0.5*inputdata.description['PlotSizeY']/inputdata.description['PlotSizeX'],inputdata.description['YLabel'])
 
         if inputdata.description.has_key('RatioPlotYMin'):
             inputdata.description['YMin'] = inputdata.description['RatioPlotYMin']
         if inputdata.description.has_key('RatioPlotYMax'):
             inputdata.description['YMax'] = inputdata.description['RatioPlotYMax']
 
         if not inputdata.description.has_key('RatioPlotErrorBandColor'):
             inputdata.description['RatioPlotErrorBandColor'] = 'yellow'
         if not inputdata.description.has_key('RatioPlotSameStyle') or inputdata.description['RatioPlotSameStyle'] == '0':
             inputdata.histos[self.refdata].description['ErrorBandColor'] = inputdata.description['RatioPlotErrorBandColor']
             inputdata.histos[self.refdata].description['ErrorBands'] = '1'
             inputdata.histos[self.refdata].description['ErrorBars'] = '0'
             inputdata.histos[self.refdata].description['LineStyle'] = 'solid'
             inputdata.histos[self.refdata].description['LineColor'] = 'black'
             inputdata.histos[self.refdata].description['LineWidth'] = '0.3pt'
             inputdata.histos[self.refdata].description['PolyMarker'] = ''
             inputdata.histos[self.refdata].description['ConnectGaps'] = '1'
 
         self.calculate_ratios(inputdata)
         self.set_borders(inputdata)
         self.coors = Coordinates(inputdata)
 
     def draw(self, inputdata):
         out = ""
         out += ('\n%\n% RatioPlot\n%\n')
         out += ('\\psset{yunit=%scm}\n' %(self.yoffset))
         out += ('\\rput(0,-1){%\n')
         out += ('\\psset{yunit=%scm}\n' %(inputdata.description['PlotSizeY']))
         out += self._draw(inputdata)
         out += ('}\n')
         return out
 
     def calculate_ratios(self, inputdata):
         foo = inputdata.description['DrawOnly'].pop(inputdata.description['DrawOnly'].index(self.refdata))
         if inputdata.histos[self.refdata].description.has_key('ErrorBands') and inputdata.histos[self.refdata].description['ErrorBands']=='1':
             inputdata.description['DrawOnly'].insert(0,foo)
         else:
             inputdata.description['DrawOnly'].append(foo)
         for i in inputdata.description['DrawOnly']:
             if i != self.refdata:
                 if inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode'] == 'deviation':
                     inputdata.histos[i].deviation(inputdata.histos[self.refdata])
                 elif inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode'] == 'datamc':
                     inputdata.histos[i].dividereverse(inputdata.histos[self.refdata])
                     inputdata.histos[i].description['ErrorBars'] = '1'
                 else:
                     inputdata.histos[i].divide(inputdata.histos[self.refdata])
         if inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode'] == 'deviation':
             inputdata.histos[self.refdata].deviation(inputdata.histos[self.refdata])
         elif inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode'] == 'datamc':
             inputdata.histos[self.refdata].dividereverse(inputdata.histos[self.refdata])
         else:
             inputdata.histos[self.refdata].divide(inputdata.histos[self.refdata])
 
     def _draw(self, inputdata):
         out = ""
         for i in inputdata.description['DrawOnly']:
             if inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode'] == 'datamc':
                 if i != self.refdata:
                     out += inputdata.histos[i].draw(self.coors)
             else:
                 out += inputdata.histos[i].draw(self.coors)
 
         frame = Frame()
         out += frame.draw(inputdata)
 
         # TODO: so much duplication with MainPlot... yuck!
         if inputdata.description.has_key('XMajorTickMarks') and inputdata.description['XMajorTickMarks'] != '':
             xcustommajortickmarks = int(inputdata.description['XMajorTickMarks'])
         else:
             xcustommajortickmarks = -1
         if inputdata.description.has_key('XMinorTickMarks') and inputdata.description['XMinorTickMarks'] != '':
             xcustomminortickmarks = int(inputdata.description['XMinorTickMarks'])
         else:
             xcustomminortickmarks =- 1
 
         xcustommajorticks = None
         if inputdata.description.has_key('XCustomMajorTicks'): # and inputdata.description['XCustomMajorTicks']!='':
             xcustommajorticks = []
             tickstr = inputdata.description['XCustomMajorTicks'].strip().split() #'\t')
             if not len(tickstr) % 2:
                 for i in range(0, len(tickstr), 2):
                     xcustommajorticks.append({'Value': float(tickstr[i]), 'Label': tickstr[i+1]})
 
         xcustomminorticks = None
         if inputdata.description.has_key('XCustomMinorTicks'): # and inputdata.description['XCustomMinorTicks']!='':
             xcustomminorticks = []
             tickstr = inputdata.description['XCustomMinorTicks'].strip().split() #'\t')
             for i in range(len(tickstr)):
                 xcustomminorticks.append({'Value': float(tickstr[i])})
 
         xticks = XTicks(inputdata.description, self.coors)
         drawlabels = not (inputdata.description.has_key('RatioPlotTickLabels') and inputdata.description['RatioPlotTickLabels']=='0')
         out += xticks.draw(custommajortickmarks=xcustommajortickmarks,
                            customminortickmarks=xcustomminortickmarks,
                            custommajorticks=xcustommajorticks,
                            customminorticks=xcustomminorticks,
                            drawlabels=drawlabels)
 
 
         ycustommajortickmarks = inputdata.attr('YMajorTickMarks', '')
         ycustommajortickmarks = int(ycustommajortickmarks) if ycustommajortickmarks else -1
 
         ycustomminortickmarks = inputdata.attr('YMinorTickMarks', '')
         ycustomminortickmarks = int(ycustomminortickmarks) if ycustomminortickmarks else -1
 
         ycustommajorticks = None
         if inputdata.description.has_key('YCustomMajorTicks'):
             ycustommajorticks = []
             tickstr = inputdata.description['YCustomMajorTicks'].strip().split() #'\t')
             if not len(tickstr) % 2:
                 for i in range(0, len(tickstr), 2):
                     ycustommajorticks.append({'Value': float(tickstr[i]), 'Label': tickstr[i+1]})
 
         ycustomminorticks = None
         if inputdata.description.has_key('YCustomMinorTicks'):
             ycustomminorticks = []
             tickstr = inputdata.description['YCustomMinorTicks'].strip().split() #'\t')
             for i in range(len(tickstr)):
                 ycustomminorticks.append({'Value': float(tickstr[i])})
 
         yticks = YTicks(inputdata.description, self.coors)
         out += yticks.draw(custommajortickmarks=ycustommajortickmarks,
                            customminortickmarks=ycustomminortickmarks,
                            custommajorticks=ycustommajorticks,
                            customminorticks=ycustomminorticks)
 
-        if not inputdata.attr_bool('MainPlot', True) and not inputdata.attr_bool('Legend', False):
+        if not inputdata.attr_bool('MainPlot', True) and inputdata.attr_bool('Legend', False):
             legend = Legend(inputdata.description, inputdata.histos, inputdata.functions)
             out += legend.draw()
 
         labels = Labels(inputdata.description)
         lnames = ['XLabel','YLabel']
         if not inputdata.attr_bool('MainPlot', True):
             lnames.append("Title")
         out += labels.draw(lnames)
         return out
 
 
 
 class Legend(Described):
 
     def __init__(self, description, histos, functions):
         self.histos = histos
         self.functions = functions
         self.description = description
 
     def draw(self):
         out = ""
         out += '\n%\n% Legend\n%\n'
         out += '\\rput[tr](%s,%s){%%\n' % (self.getLegendXPos(), self.getLegendYPos())
         ypos = -0.05*6/self.description['PlotSizeY']
 
         legendordermap = {}
         legendlist = self.description['DrawOnly']+self.functions.keys()
         if self.description.has_key('LegendOnly'):
             legendlist = []
             for legend in self.description['LegendOnly'].strip().split():
                 if legend in self.histos.keys() or legend in self.functions.keys():
                     legendlist.append(legend)
         for legend in legendlist:
             order = 0
             if self.histos.has_key(legend) and self.histos[legend].description.has_key('LegendOrder'):
                 order = int(self.histos[legend].description['LegendOrder'])
             if self.functions.has_key(legend) and self.functions[legend].description.has_key('LegendOrder'):
                 order = int(self.functions[legend].description['LegendOrder'])
             if not order in legendordermap:
                 legendordermap[order] = []
             legendordermap[order].append(legend)
         foo=[]
         for i in sorted(legendordermap.keys()):
             foo.extend(legendordermap[i])
 
         rel_xpos_sign = 1.0
         if self.getLegendAlign()=='r':
             rel_xpos_sign = -1.0
         xpos1 = -0.10*rel_xpos_sign
         xpos2 = -0.02*rel_xpos_sign
 
         for i in foo:
             if self.histos.has_key(i):
                 drawobject=self.histos[i]
             elif self.functions.has_key(i):
                 drawobject=self.functions[i]
             else:
                 continue
             title = drawobject.getTitle()
             if title == '':
                 continue
             else:
                 out += ('\\rput[B%s](%s,%s){%s}\n' %(self.getLegendAlign(),rel_xpos_sign*0.1,ypos,title))
                 out += ('\\rput[B%s](%s,%s){%s\n' %(self.getLegendAlign(),rel_xpos_sign*0.1,ypos,'%'))
                 if drawobject.getErrorBands():
                     out += ('\\psframe[linewidth=0pt,linestyle=none,fillstyle=solid,fillcolor=%s,opacity=%s]' %(drawobject.getErrorBandColor(),drawobject.getErrorBandOpacity()))
                     out += ('(%s, 0.033)(%s, 0.001)\n' %(xpos1, xpos2))
                 out += ('\\psline[linestyle=' + drawobject.getLineStyle() \
                             + ', linecolor=' + drawobject.getLineColor() \
                             + ', linewidth=' + drawobject.getLineWidth() \
                             + ', strokeopacity=' + drawobject.getLineOpacity() \
                             + ', opacity=' + drawobject.getFillOpacity())
                 if drawobject.getLineDash() != '':
                     out += (', dash=' + drawobject.getLineDash())
                 if drawobject.getFillStyle()!='none':
                     out += (', fillstyle=' + drawobject.getFillStyle() \
                                 + ', fillcolor='  + drawobject.getFillColor() \
                                 + ', hatchcolor=' + drawobject.getHatchColor() \
                                 + ']{C-C}(%s, 0.030)(%s, 0.030)(%s, 0.004)(%s, 0.004)(%s, 0.030)\n' \
                                 %(xpos1, xpos2, xpos2, xpos1, xpos1))
                 else:
                     out += ('](%s, 0.016)(%s, 0.016)\n' %(xpos1, xpos2))
                 if drawobject.getPolyMarker() != '':
                     out += ('  \\psdot[dotstyle=' + drawobject.getPolyMarker() \
                                 + ', dotsize='    + drawobject.getDotSize()   \
                                 + ', dotscale='   + drawobject.getDotScale()  \
                                 + ', linecolor='  + drawobject.getLineColor() \
                                 + ', linewidth='  + drawobject.getLineWidth() \
                                 + ', linestyle='  + drawobject.getLineStyle() \
                                 + ', fillstyle='  + drawobject.getFillStyle() \
                                 + ', fillcolor='  + drawobject.getFillColor() \
                                 + ', strokeopacity=' + drawobject.getLineOpacity() \
                                 + ', opacity=' + drawobject.getFillOpacity() \
                                 + ', hatchcolor=' + drawobject.getHatchColor())
                     if drawobject.getFillStyle()!='none':
                         out += ('](%s, 0.028)\n' % (rel_xpos_sign*-0.06))
                     else:
                         out += ('](%s, 0.016)\n' % (rel_xpos_sign*-0.06))
                 out += ('}\n')
                 ypos -= 0.075*6/self.description['PlotSizeY']
         if self.description.has_key('CustomLegend'):
             for i in self.description['CustomLegend'].strip().split('\\\\'):
                 out += ('\\rput[B%s](%s,%s){%s}\n' %(self.getLegendAlign(),rel_xpos_sign*0.1,ypos,i))
                 ypos -= 0.075*6/self.description['PlotSizeY']
         out += ('}\n')
         return out
 
     def getLegendXPos(self):
         if self.description.has_key('LegendXPos'):
             return self.description['LegendXPos']
         else:
             if self.getLegendAlign()=='r':
                 return '0.95'
             else:
                 return '0.53'
 
     def getLegendYPos(self):
         if self.description.has_key('LegendYPos'):
             return self.description['LegendYPos']
         else:
             return '0.93'
 
     def getLegendAlign(self):
         if self.description.has_key('LegendAlign'):
             return self.description['LegendAlign']
         else:
             return 'l'
 
 
 class ColorScale(Described):
 
     def __init__(self, description, coors):
         self.description = description
         self.coors = coors
 
     def draw(self):
         out = ''
         out += '\n%\n% ColorScale\n%\n'
         out += '\\rput(1,0){\n'
         out += '  \\psset{xunit=4mm}\n'
         out += '  \\rput(0.5,0){\n'
         out += '    \\psset{yunit=0.0076923, linestyle=none, fillstyle=solid}\n'
         out += '    \\multido{\\ic=0+1,\\id=1+1}{130}{\n'
         out += '      \\psframe[fillcolor={gradientcolors!![\\ic]},dimen=inner,linewidth=0.1pt](0, \\ic)(1, \\id)\n'
         out += '    }\n'
         out += '  }\n'
         out += '  \\rput(0.5,0){\n'
         out += '    \\psframe[linewidth=0.3pt,dimen=middle](0,0)(1,1)\n'
 
         zcustommajortickmarks = self.attr_int('ZMajorTickMarks', -1)
         zcustomminortickmarks = self.attr_int('ZMinorTickMarks', -1)
 
         zcustommajorticks = zcustomminorticks = None
         if self.attr('ZCustomMajorTicks'):
             zcustommajorticks = []
-            z_label_pairs = inputdata.attr('ZCustomMajorTicks').strip().split() #'\t')
+            z_label_pairs = self.attr('ZCustomMajorTicks').strip().split() #'\t')
             if len(z_label_pairs) % 2 == 0:
                 for i in range(0, len(z_label_pairs), 2):
                     zcustommajorticks.append({'Value': float(x_label_pairs[i]), 'Label': x_label_pairs[i+1]})
             else:
                 print "Warning: ZCustomMajorTicks requires an even number of alternating pos/label entries"
 
-        if inputdata.attr('ZCustomMinorTicks'):
-            zs = inputdata.attr('ZCustomMinorTicks').strip().split() #'\t')
+        if self.attr('ZCustomMinorTicks'):
+            zs = self.attr('ZCustomMinorTicks').strip().split() #'\t')
             zcustomminorticks = [{'Value': float(x)} for x in xs]
 
-        drawzlabels = self.description.attr_bool('PlotZTickLabels', True)
+        drawzlabels = self.attr_bool('PlotZTickLabels', True)
 
         zticks = ZTicks(self.description, self.coors)
         out += zticks.draw(custommajortickmarks=zcustommajortickmarks,\
                            customminortickmarks=zcustomminortickmarks,\
                            custommajorticks=zcustommajorticks,\
                            customminorticks=zcustomminorticks,
                            drawlabels=drawzlabels)
         out += '  }\n'
         out += '}\n'
         return out
 
 
 
 class Labels(Described):
 
     def __init__(self, description):
         self.description = description
 
     def draw(self, axis=[]):
         out = ""
         out += ('\n%\n% Labels\n%\n')
         if self.description.has_key('Title') and (axis.count('Title') or axis==[]):
             out += ('\\rput(0,1){\\rput[lB](0, 1.7\\labelsep){\\normalsize '+self.description['Title']+'}}\n')
         if self.description.has_key('XLabel') and (axis.count('XLabel') or axis==[]):
             xlabelsep=4.7
             if self.description.has_key('XLabelSep'):
                 xlabelsep=float(self.description['XLabelSep'])
             out += ('\\rput(1,0){\\rput[rB](0,-%4.3f\\labelsep){\\normalsize '%(xlabelsep) +self.description['XLabel']+'}}\n')
         if self.description.has_key('YLabel') and (axis.count('YLabel') or axis==[]):
             ylabelsep=6.5
             if self.description.has_key('YLabelSep'):
                 ylabelsep=float(self.description['YLabelSep'])
             out += ('\\rput(0,1){\\rput[rB]{90}(-%4.3f\\labelsep,0){\\normalsize '%(ylabelsep) +self.description['YLabel']+'}}\n')
         if self.description.has_key('ZLabel') and (axis.count('ZLabel') or axis==[]):
             zlabelsep=5.3
             if self.description.has_key('ZLabelSep'):
                 zlabelsep=float(self.description['ZLabelSep'])
             out += ('\\rput(1,1){\\rput(%4.3f\\labelsep,0){\\psset{xunit=4mm}\\rput[lB]{270}(1.5,0){\\normalsize '%(zlabelsep) +self.description['ZLabel']+'}}}\n')
         return out
 
 
 
 class Special(Described):
 
     def __init__(self, f):
         self.description = {}
         self.data = []
         self.read_input(f)
 
     def read_input(self, f):
         for line in f:
             if is_end_marker(line, 'SPECIAL'):
                 break
             elif is_comment(line):
                 continue
             else:
                 self.data.append(line)
 
     def draw(self, coors):
         out = ""
         out += ('\n%\n% Special\n%\n')
         import re
         regex = re.compile(r'^(.*?)(\\physics[xy]?coor)\(\s?([0-9\.eE+-]+)\s?,\s?([0-9\.eE+-]+)\s?\)(.*)')
         # TODO: More precise number string matching, something like this:
         # num = r"-?[0-9]*(?:\.[0-9]*)(?:[eE][+-]?\d+]"
         # regex = re.compile(r'^(.*?)(\\physics[xy]?coor)\(\s?(' + num + ')\s?,\s?(' + num + ')\s?\)(.*)')
         for l in self.data:
             while regex.search(l):
                 match = regex.search(l)
                 xcoor, ycoor = float(match.group(3)), float(match.group(4))
                 if match.group(2)[1:] in ["physicscoor", "physicsxcoor"]:
                     xcoor = coors.phys2frameX(xcoor)
                 if match.group(2)[1:] in ["physicscoor", "physicsycoor"]:
                     ycoor = coors.phys2frameY(ycoor)
                 line = "%s(%f, %f)%s" % (match.group(1), xcoor, ycoor, match.group(5))
                 l = line
             out += l + "\n"
         return out
 
 
 
 class DrawableObject(Described):
 
     def __init__(self, f):
         pass
 
     def getTitle(self):
         return self.description.get("Title", "")
 
     def getLineStyle(self):
         if self.description.has_key('LineStyle'):
             ## I normally like there to be "only one way to do it", but providing
             ## this dashdotted/dotdashed synonym just seems humane ;-)
             if self.description['LineStyle'] in ('dashdotted', 'dotdashed'):
                 self.description['LineStyle']='dashed'
                 self.description['LineDash']='3pt 3pt .8pt 3pt'
             return self.description['LineStyle']
         else:
             return 'solid'
 
     def getLineDash(self):
         if self.description.has_key('LineDash'):
             # Check if LineStyle=='dashdotted' before returning something
             self.getLineStyle()
             return self.description['LineDash']
         else:
             return ''
 
     def getLineWidth(self):
         return self.description.get("LineWidth", "0.8pt")
 
     def getLineColor(self):
         return self.description.get("LineColor", "black")
 
     def getLineOpacity(self):
         return self.description.get("LineOpacity", "1.0")
 
     def getFillColor(self):
         return self.description.get("FillColor", "white")
 
     def getFillOpacity(self):
         return self.description.get("FillOpacity", "1.0")
 
     def getHatchColor(self):
         return self.description.get("HatchColor", "black")
 
     def getFillStyle(self):
         return self.description.get("FillStyle", "none")
 
     def getPolyMarker(self):
         return self.description.get("PolyMarker", "")
 
     def getDotSize(self):
         return self.description.get("DotSize", "2pt 2")
 
     def getDotScale(self):
         return self.description.get("DotScale", "1")
 
     def getErrorBars(self):
         return bool(int(self.description.get("ErrorBars", "0")))
 
     def getErrorBands(self):
         return bool(int(self.description.get("ErrorBands", "0")))
 
     def getErrorBandColor(self):
         return self.description.get("ErrorBandColor", "yellow")
 
     def getErrorBandOpacity(self):
         return self.description.get("ErrorBandOpacity", "1.0")
 
     def getSmoothLine(self):
         return bool(int(self.description.get("SmoothLine", "0")))
 
     def startclip(self):
         return '\\psclip{\\psframe[linewidth=0, linestyle=none](0,0)(1,1)}\n'
 
     def stopclip(self):
         return '\\endpsclip\n'
 
     def startpsset(self):
         out = ""
         out += ('\\psset{linecolor='+self.getLineColor()+'}\n')
         out += ('\\psset{linewidth='+self.getLineWidth()+'}\n')
         out += ('\\psset{linestyle='+self.getLineStyle()+'}\n')
         out += ('\\psset{fillstyle='+self.getFillStyle()+'}\n')
         out += ('\\psset{fillcolor='+self.getFillColor()+'}\n')
         out += ('\\psset{hatchcolor='+self.getHatchColor()+'}\n')
         out += ('\\psset{strokeopacity='+self.getLineOpacity()+'}\n')
         out += ('\\psset{opacity='+self.getFillOpacity()+'}\n')
         if self.getLineDash()!='':
             out += ('\\psset{dash='+self.getLineDash()+'}\n')
         return out
 
     def stoppsset(self):
         out = ""
         out += ('\\psset{linecolor=black}\n')
         out += ('\\psset{linewidth=0.8pt}\n')
         out += ('\\psset{linestyle=solid}\n')
         out += ('\\psset{fillstyle=none}\n')
         out += ('\\psset{fillcolor=white}\n')
         out += ('\\psset{hatchcolor=black}\n')
         out += ('\\psset{strokeopacity=1.0}\n')
         out += ('\\psset{opacity=1.0}\n')
         return out
 
 
 
 class Function(DrawableObject, Described):
 
     def __init__(self, f):
         self.description = {}
         self.read_input(f)
 
     def read_input(self, f):
         self.code='def plotfunction(x):\n'
         iscode=False
         for line in f:
             if is_end_marker(line, 'FUNCTION'):
                 break
             elif is_comment(line):
                 continue
             else:
                 m = pat_property.match(line)
                 if iscode:
                     self.code+='    '+line
                 elif m:
                     prop, value = m.group(1,2)
                     if prop=='Code':
                         iscode=True
                     else:
                         self.description[prop] = value
         if not iscode:
             print '++++++++++ ERROR: No code in function'
         else:
             foo = compile(self.code, '<string>', 'exec')
             exec(foo)
             self.plotfunction = plotfunction
 
 
     def draw(self,coors):
         out = ""
         out += self.startclip()
         out += self.startpsset()
         xmin = coors.xmin()
         if self.description.has_key('XMin') and self.description['XMin']:
             xmin = float(self.description['XMin'])
         xmax=coors.xmax()
         if self.description.has_key('XMax') and self.description['XMax']:
             xmax=float(self.description['XMax'])
         # TODO: Space sample points logarithmically if LogX=1
         dx = (xmax-xmin)/500.
         x = xmin-dx
         out += '\\pscurve'
         if self.description.has_key('FillStyle') and self.description['FillStyle']!='none':
             out += '(%s,%s)\n' % (coors.strphys2frameX(xmin),coors.strphys2frameY(coors.ymin()))
         while x < (xmax+2*dx):
             y = self.plotfunction(x)
             out += ('(%s,%s)\n' % (coors.strphys2frameX(x), coors.strphys2frameY(y)))
             x += dx
         if self.description.has_key('FillStyle') and self.description['FillStyle']!='none':
             out += '(%s,%s)\n' % (coors.strphys2frameX(xmax),coors.strphys2frameY(coors.ymin()))
         out += self.stoppsset()
         out += self.stopclip()
         return out
 
 
 class BinData(object):
     """\
     Store bin edge and value+error(s) data for a 1D or 2D bin.
 
     TODO: generalise/alias the attr names to avoid mention of x and y
     """
 
     def __init__(self, low, high, val, err):
         #print "@", low, high, val, err
         self.low = floatify(low)
         self.high = floatify(high)
         self.val = float(val)
         self.err = floatpair(err)
 
     @property
     def is2D(self):
         return hasattr(self.low, "__len__") and hasattr(self.high, "__len__")
 
     @property
     def isValid(self):
         invalid_val = (isnan(self.val) or isnan(self.err[0]) or isnan(self.err[1]))
         if invalid_val:
             return False
         if self.is2D:
             invalid_low = any(isnan(x) for x in self.low)
             invalid_high = any(isnan(x) for x in self.high)
         else:
             invalid_low, invalid_high = isnan(self.low), isnan(self.high)
         return not (invalid_low or invalid_high)
 
     @property
     def xmin(self):
         return self.low
     @xmin.setter
     def xmin(self,x):
         self.low = x
 
     @property
     def xmax(self):
         return self.high
     @xmax.setter
     def xmax(self,x):
         self.high = x
 
     @property
     def xmid(self):
         # TODO: Generalise to 2D
         return (self.xmin + self.xmax) / 2.0
 
     @property
     def xwidth(self):
         # TODO: Generalise to 2D
         assert self.xmin <= self.xmax
         return self.xmax - self.xmin
 
     @property
     def y(self):
         return self.val
     @y.setter
     def y(self, x):
         self.val = x
 
     @property
     def ey(self):
         return self.err
     @ey.setter
     def ey(self, x):
         self.err = x
 
     @property
     def ymin(self):
         return self.y - self.ey[0]
 
     @property
     def ymax(self):
         return self.y + self.ey[1]
 
     def __getitem__(self, key):
         "dict-like access for backward compatibility"
         if key in ("LowEdge"):
             return self.xmin
         elif key == ("UpEdge", "HighEdge"):
             return self.xmax
         elif key == "Content":
             return self.y
         elif key == "Errors":
             return self.ey
 
 
 class Histogram(DrawableObject, Described):
 
     def __init__(self, f, p=None):
         self.description = {}
         self.is2dim = False
         self.data = []
         self.read_input_data(f)
         self.sigmabinvalue = None
         self.meanbinvalue = None
         self.path = p
 
     def read_input_data(self, f):
         for line in f:
             if is_end_marker(line, 'HISTOGRAM'):
                 break
             elif is_comment(line):
                 continue
             else:
                 line = line.rstrip()
                 m = pat_property.match(line)
                 if m:
                     prop, value = m.group(1,2)
                     self.description[prop] = value
                 else:
                     ## Detect symm errs
                     linearray = line.split()
                     if len(linearray) == 4:
                         self.data.append(BinData(*linearray))
                     ## Detect asymm errs
                     elif len(linearray) == 5:
                         self.data.append(BinData(linearray[0], linearray[1], linearray[2], [linearray[3],linearray[4]]))
                     ## Detect two-dimensionality
                     elif len(linearray) in [6,7]:
                         self.is2dim = True
                         # If asymm z error, use the max or average of +- error
                         err = float(linearray[5])
                         if len(linearray) == 7:
                             if self.description.get("ShowMaxZErr", 1):
                                 err = max(err, float(linearray[6]))
                             else:
                                 err = 0.5 * (err + float(linearray[6]))
                         self.data.append(BinData([linearray[0], linearray[2]], [linearray[1], linearray[3]], linearray[4], err))
                     ## Unknown histo format
                     else:
                         raise RuntimeError("Unknown HISTOGRAM data line format with %d entries" % len(linearray))
 
 
     def mangle_input(self):
         norm2int = self.attr_bool("NormalizeToIntegral", False)
         norm2sum = self.attr_bool("NormalizeToSum", False)
         if norm2int or norm2sum:
             if norm2int and norm2sum:
                 print "Can't normalize to Integral and to Sum at the same time. Will normalize to the Sum."
             foo = 0
             # TODO: change to "in self.data"?
             for i in range(len(self.data)):
                 if norm2sum:
                     foo += self.data[i].val
                 else:
                     foo += self.data[i].val*(self.data[i].xmax-self.data[i].xmin)
 
             # TODO: change to "in self.data"?
             if foo != 0:
                 for i in range(len(self.data)):
                     self.data[i].val /= foo
                     self.data[i].err[0] /= foo
                     self.data[i].err[1] /= foo
         scale = self.attr_float('Scale', 1.0)
         if scale != 1.0:
             # TODO: change to "in self.data"?
             for i in range(len(self.data)):
                 self.data[i].val *= scale
                 self.data[i].err[0] *= scale
                 self.data[i].err[1] *= scale
         if self.attr_int("Rebin", 1) > 1:
             rebin = self.attr_int("Rebin", 1)
             errortype = self.attr("ErrorType", "stat")
             newdata = []
             for i in range(0, (len(self.data)//rebin)*rebin, rebin):
                 foo = 0.
                 barl = 0.
                 baru = 0.
                 for j in range(rebin):
                     binwidth = self.data[i+j].xwidth
                     foo += self.data[i+j].val * binwidth
                     if errortype == "stat":
                         barl += (binwidth * self.data[i+j].err[0])**2
                         baru += (binwidth * self.data[i+j].err[1])**2
                     elif errortype == "env":
                         barl += self.data[i+j].ymin * binwidth
                         baru += self.data[i+j].ymax * binwidth
                     else:
                         logging.error("Rebinning for ErrorType not implemented.")
                         sys.exit(1)
                 newbinwidth = self.data[i+rebin-1].xmax - self.data[i].xmin
                 newcentral = foo/newbinwidth
                 if errortype == "stat":
                     newerror = [sqrt(barl)/newbinwidth, sqrt(baru)/newbinwidth]
                 elif errortype == "env":
                     newerror = [(foo-barl)/newbinwidth, (baru-foo)/newbinwidth]
                 newdata.append(BinData(self.data[i].xmin, self.data[i+rebin-1].xmax, newcentral, newerror))
             self.data = newdata
 
     def add(self, name):
         if len(self.data) != len(name.data):
             print '+++ Error in Histogram.add() for %s: different numbers of bins' % self.path
         for i in range(len(self.data)):
             if fuzzyeq(self.data[i].xmin, name.data[i].xmin) and \
                fuzzyeq(self.data[i].xmax, name.data[i].xmax):
                 self.data[i].val += name.data[i].val
                 self.data[i].err[0] = sqrt(self.data[i].err[0]**2 + name.data[i].err[0]**2)
                 self.data[i].err[1] = sqrt(self.data[i].err[1]**2 + name.data[i].err[1]**2)
             else:
                 print '+++ Error in Histogram.add() for %s: binning of histograms differs' % self.path
 
     def divide(self, name):
         #print name.path, self.path
         if len(self.data) != len(name.data):
             print '+++ Error in Histogram.divide() for %s: different numbers of bins' % self.path
         for i in range(len(self.data)):
             if fuzzyeq(self.data[i].xmin, name.data[i].xmin) and \
                fuzzyeq(self.data[i].xmax, name.data[i].xmax):
                 try:
                     self.data[i].err[0] /= name.data[i].val
                 except ZeroDivisionError:
                     self.data[i].err[0]=0.
                 try:
                     self.data[i].err[1] /= name.data[i].val
                 except ZeroDivisionError:
                     self.data[i].err[1]=0.
                 try:
                     self.data[i].val /= name.data[i].val
                 except ZeroDivisionError:
                     self.data[i].val=1.
 #                self.data[i].err[0] = sqrt(self.data[i].err[0]**2 + name.data[i].err[0]**2)
 #                self.data[i].err[1] = sqrt(self.data[i].err[1]**2 + name.data[i].err[1]**2)
             else:
                 print '+++ Error in Histogram.divide() for %s: binning of histograms differs' % self.path
 
     def dividereverse(self, name):
         if len(self.data) != len(name.data):
             print '+++ Error in Histogram.dividereverse() for %s: different numbers of bins' % self.path
         for i in range(len(self.data)):
             if fuzzyeq(self.data[i].xmin, name.data[i].xmin) and \
                fuzzyeq(self.data[i].xmax, name.data[i].xmax):
                 try:
                     self.data[i].err[0] = name.data[i].err[0]/self.data[i].val
                 except ZeroDivisionError:
                     self.data[i].err[0]=0.
                 try:
                     self.data[i].err[1] = name.data[i].err[1]/self.data[i].val
                 except ZeroDivisionError:
                     self.data[i].err[1]=0.
                 try:
                     self.data[i].val = name.data[i].val/self.data[i].val
                 except ZeroDivisionError:
                     self.data[i].val=1.
             else:
                 print '+++ Error in Histogram.dividereverse(): binning of histograms differs'
 
     def deviation(self, name):
         if len(self.data) != len(name.data):
             print '+++ Error in Histogram.deviation() for %s: different numbers of bins' % self.path
         for i in range(len(self.data)):
             if fuzzyeq(self.data[i].xmin, name.data[i].xmin) and \
                fuzzyeq(self.data[i].xmax, name.data[i].xmax):
                 self.data[i].val -= name.data[i].val
                 try:
                     self.data[i].val /= 0.5*sqrt((name.data[i].err[0] + name.data[i].err[1])**2 + \
                                                         (self.data[i].err[0] + self.data[i].err[1])**2)
                 except ZeroDivisionError:
                     self.data[i].val = 0.0
                 try:
                     self.data[i].err[0] /= name.data[i].err[0]
                 except ZeroDivisionError:
                     self.data[i].err[0] = 0.0
                 try:
                     self.data[i].err[1] /= name.data[i].err[1]
                 except ZeroDivisionError:
                     self.data[i].err[1] = 0.0
             else:
                 print '+++ Error in Histogram.deviation() for %s: binning of histograms differs' % self.path
 
     def getChi2(self, name):
         chi2 = 0.
         for i in range(len(self.data)):
             if fuzzyeq(self.data[i].xmin, name.data[i].xmin) and \
                fuzzyeq(self.data[i].xmax, name.data[i].xmax):
                 try:
                     chi2 += (self.data[i].val-name.data[i].val)**2/((0.5*self.data[i].err[0]+0.5*self.data[i].err[1])**2 + (0.5*name.data[i].err[0]+0.5*name.data[i].err[1])**2)
                 except ZeroDivisionError:
                     pass
             else:
                 print '+++ Error in Histogram.getChi2() for %s: binning of histograms differs' % self.path
         return chi2/len(self.data)
 
     def getSigmaBinValue(self):
         if self.sigmabinvalue==None:
             self.sigmabinvalue = 0.
             sumofweights = 0.
             for i in range(len(self.data)):
                 if self.is2dim:
                     binwidth = abs( (self.data[i].xmax[0] - self.data[i].xmin[0])
                                    *(self.data[i].xmax[1] - self.data[i].xmin[1]))
                 else:
                     binwidth = abs(self.data[i].xmax - self.data[i].xmin)
                 self.sigmabinvalue += binwidth*(self.data[i].val-self.getMeanBinValue())**2
                 sumofweights += binwidth
             self.sigmabinvalue = sqrt(self.sigmabinvalue/sumofweights)
         return self.sigmabinvalue
 
     def getMeanBinValue(self):
         if self.meanbinvalue==None:
             self.meanbinvalue = 0.
             sumofweights = 0.
             for i in range(len(self.data)):
                 if self.is2dim:
                     binwidth = abs( (self.data[i].xmax[0] - self.data[i].xmin[0])
                                    *(self.data[i].xmax[1] - self.data[i].xmin[1]))
                 else:
                     binwidth = abs(self.data[i].xmax - self.data[i].xmin)
                 self.meanbinvalue += binwidth*self.data[i].val
                 sumofweights += binwidth
             self.meanbinvalue /= sumofweights
         return self.meanbinvalue
 
     def getCorrelation(self, name):
         correlation = 0.
         sumofweights = 0.
         for i in range(len(self.data)):
             if fuzzyeq(self.data[i].xmin, name.data[i].xmin) and \
                fuzzyeq(self.data[i].xmax, name.data[i].xmax):
                 if self.is2dim:
                     binwidth = abs( (self.data[i].xmax[0] - self.data[i].xmin[0])
                                   * (self.data[i].xmax[1] - self.data[i].xmin[1]) )
                 else:
                     binwidth = abs(self.data[i].xmax - self.data[i].xmin)
                 correlation += binwidth * ( self.data[i].val - self.getMeanBinValue() ) \
                                         * ( name.data[i].val - name.getMeanBinValue() )
                 sumofweights += binwidth
             else:
                 print '+++ Error in Histogram.getCorrelation(): binning of histograms differs' % self.path
         correlation /= sumofweights
         try:
             correlation /= self.getSigmaBinValue()*name.getSigmaBinValue()
         except ZeroDivisionError:
             correlation = 0
         return correlation
 
     def getRMSdistance(self,name):
         distance = 0.
         sumofweights = 0.
         for i in range(len(self.data)):
             if fuzzyeq(self.data[i].xmin, name.data[i].xmin) and \
                fuzzyeq(self.data[i].xmax, name.data[i].xmax):
                 if self.is2dim:
                     binwidth = abs( (self.data[i].xmax[0] - self.data[i].xmin[0])
                                   * (self.data[i].xmax[1] - self.data[i].xmin[1]) )
                 else:
                     binwidth = abs(self.data[i].xmax - self.data[i].xmin)
                 distance += binwidth * ( (self.data[i].val - self.getMeanBinValue())
                                         -(name.data[i].val - name.getMeanBinValue()))**2
                 sumofweights += binwidth
             else:
                 print '+++ Error in Histogram.getRMSdistance() for %s: binning of histograms differs' % self.path
         distance = sqrt(distance/sumofweights)
         return distance
 
     def draw(self,coors):
         seen_nan = False
         out = ""
         out += self.startclip()
         out += self.startpsset()
         if any(b.isValid for b in self.data):
             out += "% START DATA\n"
             if self.is2dim:
                 for b in self.data:
                     out += ('\\psframe')
                     color = int(129*coors.phys2frameZ(b.val))
                     if b.val > coors.zmax():
                         color = 129
                     if b.val < coors.zmin():
                         color = 0
                     if b.val <= coors.zmin():
                         out += ('[linewidth=0pt, linestyle=none, fillstyle=solid, fillcolor=white]')
                     else:
                         out += ('[linewidth=0pt, linestyle=none, fillstyle=solid, fillcolor={gradientcolors!!['+str(color)+']}]')
                     out += ('(' + coors.strphys2frameX(b.low[0]) + ', ' \
                                 + coors.strphys2frameY(b.low[1]) + ')(' \
                                 + coors.strphys2frameX(b.high[0])  + ', ' \
                                 + coors.strphys2frameY(b.high[1])  + ')\n')
             else:
                 if self.getErrorBands():
                     self.description['SmoothLine'] = 0
                     for b in self.data:
                         out += ('\\psframe[dimen=inner,linewidth=0pt,linestyle=none,fillstyle=solid,fillcolor=%s,opacity=%s]' % (self.getErrorBandColor(),self.getErrorBandOpacity()))
                         out += ('(' + coors.strphys2frameX(b.xmin) + ', ' \
                                     + coors.strphys2frameY(b.val - b.err[0]) + ')(' \
                                     + coors.strphys2frameX(b.xmax)  + ', ' \
                                     + coors.strphys2frameY(b.val + b.err[1]) + ')\n')
                 if self.getErrorBars():
                     for b in self.data:
                         if isnan(b.val) or isnan(b.err[0]) or isnan(b.err[1]):
                             seen_nan = True
                             continue
                         if b.val == 0. and b.err == [0.,0.]:
                             continue
                         out += ('\\psline')
                         out += ('(' + coors.strphys2frameX(b.xmin) + ', ' \
                                     + coors.strphys2frameY(b.val) + ')(' \
                                     + coors.strphys2frameX(b.xmax)  + ', ' \
                                     + coors.strphys2frameY(b.val) + ')\n')
                         out += ('\\psline')
                         bincenter = coors.strphys2frameX(.5*(b.xmin+b.xmax))
                         out += ('(' + bincenter + ', ' \
                                     + coors.strphys2frameY(b.val-b.err[0]) + ')(' \
                                     + bincenter + ', ' \
                                     + coors.strphys2frameY(b.val+b.err[1]) + ')\n')
                 if self.getSmoothLine():
                     out += '\\psbezier'
                 else:
                     out += '\\psline'
                 if self.getFillStyle() != 'none':   # make sure that filled areas go all the way down to the x-axis
                     if coors.phys2frameX(self.data[0].xmin) > 1e-4:
                         out += '(' + coors.strphys2frameX(self.data[0].xmin) + ', -0.1)\n'
                     else:
                         out += '(-0.1, -0.1)\n'
                 for i, b in enumerate(self.data):
                     if isnan(b.val):
                         seen_nan = True
                         continue
                     if self.getSmoothLine():
                         out += ('(' + coors.strphys2frameX(0.5*(b.xmin+b.xmax)) + ', ' \
                                     + coors.strphys2frameY(b.val) + ')\n')
                     else:
                         out += ('(' + coors.strphys2frameX(b.xmin) + ', ' \
                                     + coors.strphys2frameY(b.val) + ')(' \
                                     + coors.strphys2frameX(b.xmax)  + ', ' \
                                     + coors.strphys2frameY(b.val) + ')\n')
                         ## Join/separate data points, with vertical/diagonal lines
                         if i+1 < len(self.data): #< If this is not the last point
                             if self.description.get('ConnectBins', '1') != '1':
                                 out += ('\\psline')
                             else:
                                 ## If bins are joined, but there is a gap in binning, choose whether to fill the gap
                                 if (abs(coors.phys2frameX(b.xmax) - coors.phys2frameX(self.data[i+1].xmin)) > 1e-4):
                                     if self.description.get('ConnectGaps', '0') != '1':
                                         out += ('\\psline')
                                         # TODO: Perhaps use a new dashed line to fill the gap?
-                    if self.getFillStyle() != 'none':  # make sure that filled areas go all the way down to the x-axis
-                        if (coors.phys2frameX(self.data[-1].xmax) < 1-1e-4):
-                            out += '(' + coors.strphys2frameX(self.data[-1].xmax) + ', -0.1)\n'
-                        else:
-                            out += '(1.1, -0.1)\n'
+                if self.getFillStyle() != 'none':  # make sure that filled areas go all the way down to the x-axis
+                    if (coors.phys2frameX(self.data[-1].xmax) < 1-1e-4):
+                        out += '(' + coors.strphys2frameX(self.data[-1].xmax) + ', -0.1)\n'
+                    else:
+                        out += '(1.1, -0.1)\n'
             #
             if self.getPolyMarker() != '':
                 for b in self.data:
                     if isnan(b.val):
                         seen_nan = True
                         continue
                     if b.val == 0. and b.err == [0.,0.]:
                         continue
                     out += ('\\psdot[dotstyle=%s,dotsize=%s,dotscale=%s](' % (self.getPolyMarker(),self.getDotSize(),self.getDotScale()) \
                                 + coors.strphys2frameX(.5*(b.xmin+b.xmax)) + ', ' \
                                 + coors.strphys2frameY(b.val) + ')\n')
 
             out += "% END DATA\n"
         else:
             print "WARNING: No valid bin value/errors/edges to plot!"
             out += "% NO DATA!\n"
 
         out += self.stoppsset()
         out += self.stopclip()
         if seen_nan:
             print "WARNING: NaN-valued value or error bar!"
         return out
 
     # def is2dimensional(self):
     #     return self.is2dim
 
     def getXMin(self):
         if not self.data:
             return 0
         elif self.is2dim:
             return min(b.low[0] for b in self.data)
         else:
             return min(b.xmin for b in self.data)
 
     def getXMax(self):
         if not self.data:
             return 1
         elif self.is2dim:
             return max(b.high[0] for b in self.data)
         else:
             return max(b.xmax for b in self.data)
 
     def getYMin(self, xmin, xmax, logy):
         if not self.data:
             return 0
         elif self.is2dim:
             return min(b.low[1] for b in self.data)
         else:
             yvalues = []
             for b in self.data:
                 if (b.xmax > xmin or b.xmin >= xmin) and (b.xmin < xmax or b.xmax <= xmax):
                     foo = b.val
                     if self.getErrorBars() or self.getErrorBands():
                         foo -= b.err[0]
                     if not isnan(foo) and (not logy or foo > 0):
                         yvalues.append(foo)
             return min(yvalues) if yvalues else self.data[0].val
 
     def getYMax(self, xmin, xmax):
         if not self.data:
             return 1
         elif self.is2dim:
             return max(b.high[1] for b in self.data)
         else:
             yvalues = []
             for b in self.data:
                 if (b.xmax > xmin or b.xmin >= xmin) and (b.xmin < xmax or b.xmax <= xmax):
                     foo = b.val
                     if self.getErrorBars() or self.getErrorBands():
                         foo += b.err[1]
                     if not isnan(foo): # and (not logy or foo > 0):
                         yvalues.append(foo)
             return max(yvalues) if yvalues else self.data[0].val
 
     def getZMin(self, xmin, xmax, ymin, ymax):
         if not self.is2dim:
             return 0
         zvalues = []
         for b in self.data:
             if (b.xmax[0] > xmin and b.xmin[0] < xmax) and (b.xmax[1] > ymin and b.xmin[1] < ymax):
                 zvalues.append(b.val)
         return min(zvalues)
 
     def getZMax(self, xmin, xmax, ymin, ymax):
         if not self.is2dim:
             return 0
         zvalues = []
         for b in self.data:
             if (b.xmax[0] > xmin and b.xmin[0] < xmax) and (b.xmax[1] > ymin and b.xmin[1] < ymax):
                 zvalues.append(b.val)
         return max(zvalues)
 
 
 
+class Value(Histogram):
+
+    def read_input_data(self, f):
+        for line in f:
+            if is_end_marker(line, 'VALUE'):
+                break
+            elif is_comment(line):
+                continue
+            else:
+                line = line.rstrip()
+                m = pat_property.match(line)
+                if m:
+                    prop, value = m.group(1,2)
+                    self.description[prop] = value
+                else:
+                    linearray = line.split()
+                    if len(linearray) == 3:
+                        self.data.append(BinData(0.0, 1.0, linearray[0], [ linearray[1], linearray[2] ])) # dummy x-values
+                    else:
+                        raise Exception('Value does not have the expected number of columns. ' + line)
+
+    # TODO: specialise draw() here
+
+
+class Counter(Histogram):
+
+    def read_input_data(self, f):
+        for line in f:
+            if is_end_marker(line, 'COUNTER'):
+                break
+            elif is_comment(line):
+                continue
+            else:
+                line = line.rstrip()
+                m = pat_property.match(line)
+                if m:
+                    prop, value = m.group(1,2)
+                    self.description[prop] = value
+                else:
+                    linearray = line.split()
+                    if len(linearray) == 2:
+                        self.data.append(BinData(0.0, 1.0, linearray[0], [ linearray[1], linearray[1] ])) # dummy x-values
+                    else:
+                        raise Exception('Counter does not have the expected number of columns. ' + line)
+
+    # TODO: specialise draw() here
+
+
 class Histo1D(Histogram):
 
     def read_input_data(self, f):
         for line in f:
             if is_end_marker(line, 'HISTO1D'):
                 break
             elif is_comment(line):
                 continue
             else:
                 line = line.rstrip()
                 m = pat_property.match(line)
                 if m:
                     prop, value = m.group(1,2)
                     self.description[prop] = value
                 else:
                     linearray = line.split()
                     ## Detect symm errs
                     # TODO: Not sure what the 8-param version is for... auto-compatibility with YODA format?
                     if len(linearray) in [4,8]:
                         self.data.append(BinData(linearray[0], linearray[1], linearray[2], linearray[3]))
                     ## Detect asymm errs
                     elif len(linearray) == 5:
                         self.data.append(BinData(linearray[0], linearray[1], linearray[2], [linearray[3],linearray[4]]))
                     else:
                         raise Exception('Histo1D does not have the expected number of columns. ' + line)
 
     # TODO: specialise draw() here
 
 
 class Histo2D(Histogram):
 
     def read_input_data(self, f):
         self.is2dim = True #< Should really be done in a constructor, but this is easier for now...
 
         for line in f:
             if is_end_marker(line, 'HISTO2D'):
                 break
             elif is_comment(line):
                 continue
             else:
                 line = line.rstrip()
                 m = pat_property.match(line)
                 if m:
                     prop, value = m.group(1,2)
                     self.description[prop] = value
                 else:
                     linearray = line.split()
                     if len(linearray) in [6,7]:
                         # If asymm z error, use the max or average of +- error
                         err = float(linearray[5])
                         if len(linearray) == 7:
                             if self.description.get("ShowMaxZErr", 1):
                                 err = max(err, float(linearray[6]))
                             else:
                                 err = 0.5 * (err + float(linearray[6]))
                         self.data.append(BinData([linearray[0], linearray[2]], [linearray[1], linearray[3]], float(linearray[4]), err))
                     else:
                         raise Exception('Histo2D does not have the expected number of columns. '+line)
 
     # TODO: specialise draw() here
 
 
 
 #############################
 
 
 
 class Frame(object):
 
     def __init__(self):
         self.framelinewidth = '0.3pt'
 
     def draw(self,inputdata):
         out = ('\n%\n% Frame\n%\n')
         if inputdata.description.has_key('FrameColor') and inputdata.description['FrameColor']!=None:
             color = inputdata.description['FrameColor']
             # We want to draw this frame only once, so set it to False for next time:
             inputdata.description['FrameColor']=None
 
             # Calculate how high and wide the overall plot is
             height = [0,0]
             width  = inputdata.attr('PlotSizeX')
             if inputdata.attr_bool('RatioPlot', False):
                 height[1] = -inputdata.description['RatioPlotSizeY']
             if not inputdata.attr_bool('MainPlot', True):
                 height[0] = inputdata.description['PlotSizeY']
             else:
                 height[0] = -height[1]
                 height[1] = 0
 
             # Get the margin widths
             left = inputdata.description['LeftMargin']+0.1
             right = inputdata.description['RightMargin']+0.1
             top = inputdata.description['TopMargin']+0.1
             bottom = inputdata.description['BottomMargin']+0.1
 
             #
             out += ('\\rput(0,1){\\psline[linewidth=%scm,linecolor=%s](%scm,%scm)(%scm,%scm)}\n' %(top, color, -left, top/2, width+right, top/2))
             out += ('\\rput(0,%scm){\\psline[linewidth=%scm,linecolor=%s](%scm,%scm)(%scm,%scm)}\n' %(height[1], bottom, color, -left, -bottom/2, width+right, -bottom/2))
             out += ('\\rput(0,0){\\psline[linewidth=%scm,linecolor=%s](%scm,%scm)(%scm,%scm)}\n' %(left, color, -left/2, height[1]-0.05, -left/2, height[0]+0.05))
             out += ('\\rput(1,0){\\psline[linewidth=%scm,linecolor=%s](%scm,%scm)(%scm,%scm)}\n' %(right, color, right/2, height[1]-0.05, right/2, height[0]+0.05))
 
 
         out += ('\\psframe[linewidth='+self.framelinewidth+',dimen=middle](0,0)(1,1)\n')
         return out
 
 
 
 class Ticks(object):
 
     def __init__(self, description, coors):
         self.majorticklinewidth = '0.3pt'
         self.minorticklinewidth = '0.3pt'
         self.majorticklength    = '9pt'
         self.minorticklength    = '4pt'
         self.description = description
         self.coors = coors
 
     def draw_ticks(self, vmin, vmax, plotlog=False, custommajorticks=None, customminorticks=None, custommajortickmarks=-1, customminortickmarks=-1, drawlabels=True, twosided=False):
         out = ""
         if plotlog:
             if vmin <= 0 or vmax <= 0:
                 raise Exception("Cannot place log axis min or max tick <= 0")
             if custommajorticks is None:
                 x = int(log10(vmin))
                 n_labels = 0
                 while x < log10(vmax) + 1:
                     if 10**x >= vmin:
                         ticklabel = 10**x
                         if ticklabel > vmin and ticklabel < vmax:
                             out += self.draw_majortick(ticklabel,twosided)
                             if drawlabels:
                                 out += self.draw_majorticklabel(ticklabel)
                                 n_labels += 1
                         if ticklabel == vmin or ticklabel == vmax:
                             if drawlabels:
                                 out += self.draw_majorticklabel(ticklabel)
                                 n_labels+=1
                         for i in range(2,10):
                             ticklabel = i*10**(x-1)
                             if ticklabel > vmin and ticklabel < vmax:
                                 out += self.draw_minortick(ticklabel,twosided)
                                 if drawlabels and n_labels == 0:
                                     if (i+1)*10**(x-1) < vmax: # some special care for the last minor tick
                                         out += self.draw_minorticklabel(ticklabel)
                                     else:
                                         out += self.draw_minorticklabel(ticklabel, last=True)
                     x += 1
             else:
                 print "Warning: custom major ticks not currently supported on log axes -- please contact the developers to request!"
         elif custommajorticks is not None or customminorticks is not None:
             if custommajorticks:
                 for i in range(len(custommajorticks)):
                     value = custommajorticks[i]['Value']
                     label = custommajorticks[i]['Label']
                     if value >= vmin and value <= vmax:
                         out += self.draw_majortick(value,twosided)
                     if drawlabels:
                         out += self.draw_majorticklabel(value, label=label)
             if customminorticks:
                 for i in range(len(customminorticks)):
                     value = customminorticks[i]['Value']
                     if value >= vmin and value <= vmax:
                         out += self.draw_minortick(value,twosided)
         else:
             vrange = vmax - vmin
             if isnan(vrange):
                 vrange, vmin, vmax = 1, 1, 2
             digits = int(log10(vrange))+1
             if vrange <= 1:
                 digits -= 1
             foo = int(vrange/(10**(digits-1)))
             if foo/9. > 0.5:
                 tickmarks = 10
             elif foo/9. > 0.2:
                 tickmarks = 5
             elif foo/9. > 0.1:
                 tickmarks = 2
 
             if custommajortickmarks > -1:
                 if custommajortickmarks not in [1, 2, 5, 10, 20]:
                     print '+++ Error in Ticks.draw_ticks(): MajorTickMarks must be in [1, 2, 5, 10, 20]'
                 else:
                     tickmarks = custommajortickmarks
 
             if tickmarks == 2 or tickmarks == 20:
                 minortickmarks = 3
             else:
                 minortickmarks = 4
             if customminortickmarks > -1:
                 minortickmarks = customminortickmarks
             #
             x = 0
             while x > vmin*10**digits:
                 x -= tickmarks*100**(digits-1)
             while x <= vmax*10**digits:
                 if x >= vmin*10**digits - tickmarks*100**(digits-1):
                     ticklabel = 1.*x/10**digits
                     if int(ticklabel) == ticklabel:
                         ticklabel = int(ticklabel)
                     if float(ticklabel-vmin)/vrange >= -1e-5:
                         if abs(ticklabel-vmin)/vrange > 1e-5 and abs(ticklabel-vmax)/vrange > 1e-5:
                             out += self.draw_majortick(ticklabel,twosided)
                         if drawlabels:
                             out += self.draw_majorticklabel(ticklabel)
 
                     xminor = x
                     for i in range(minortickmarks):
                         xminor += 1.*tickmarks*100**(digits-1)/(minortickmarks+1)
                         ticklabel = 1.*xminor/10**digits
                         if ticklabel > vmin and ticklabel < vmax:
                             if abs(ticklabel-vmin)/vrange > 1e-5 and abs(ticklabel-vmax)/vrange > 1e-5:
                                 out += self.draw_minortick(ticklabel,twosided)
                 x += tickmarks*100**(digits-1)
         return out
 
     def draw(self):
         pass
 
     def draw_minortick(self, ticklabel, twosided):
         pass
 
     def draw_majortick(self, ticklabel, twosided):
         pass
 
     def draw_majorticklabel(self, ticklabel):
         pass
 
     def draw_minorticklabel(self, value, label='', last=False):
         return ''
 
     def get_ticklabel(self, value, plotlog=False, minor=False, lastminor=False):
         label=''
         prefix = ''
         if plotlog:
             bar = int(log10(value))
 	    if bar < 0:
 	        sign='-'
 	    else:
 	        sign='\\,'
             if minor: # The power of ten is only to be added to the last minor tick label
                 if lastminor:
                     label = str(int(value/(10**bar))) + "\\cdot" + '10$^{'+sign+'\\text{'+str(abs(bar))+'}}$'
                 else:
                     label = str(int(value/(10**bar))) # The naked prefactor
             else:
                 if bar==0:
                     label = '1'
                 else:
                     label = '10$^{'+sign+'\\text{'+str(abs(bar))+'}}$'
         else:
             if fabs(value) < 1e-10:
                 value = 0
             label = str(value)
             if "e" in label:
                 a, b = label.split("e")
                 astr = "%2.1f" % float(a)
                 bstr = str(int(b))
                 label = "\\smaller{%s $\\!\\cdot 10^{%s} $}" % (astr, bstr)
         return label
 
 
 
 class XTicks(Ticks):
 
     def draw(self, custommajorticks=None, customminorticks=None, custommajortickmarks=-1, customminortickmarks=-1,drawlabels=True):
         twosided = bool(int(self.description.get('XTwosidedTicks', '0')))
         out = ""
         out += ('\n%\n% X-Ticks\n%\n')
         out += ('\\def\\majortickmarkx{\\psline[linewidth='+self.majorticklinewidth+'](0,0)(0,'+self.majorticklength+')}%\n')
         out += ('\\def\\minortickmarkx{\\psline[linewidth='+self.minorticklinewidth+'](0,0)(0,'+self.minorticklength+')}%\n')
         uselog = self.description['LogX'] and (self.coors.xmin() > 0 and self.coors.xmax() > 0)
         out += self.draw_ticks(self.coors.xmin(), self.coors.xmax(),\
                                    plotlog=uselog,\
                                    custommajorticks=custommajorticks,\
                                    customminorticks=customminorticks,\
                                    custommajortickmarks=custommajortickmarks,\
                                    customminortickmarks=customminortickmarks,\
                                    drawlabels=drawlabels,\
                                    twosided=twosided)
         return out
 
     def draw_minortick(self, ticklabel, twosided):
         out = ''
         out += '\\rput('+self.coors.strphys2frameX(ticklabel)+', 0){\\minortickmarkx}\n'
         if twosided:
             out += '\\rput{180}('+self.coors.strphys2frameX(ticklabel)+', 1){\\minortickmarkx}\n'
         return out
 
     def draw_minorticklabel(self, value, label='', last=False):
         if not label:
             label=self.get_ticklabel(value, int(self.description['LogX']), minor=True, lastminor=last)
         if last: # Some more indentation for the last minor label
             return ('\\rput('+self.coors.strphys2frameX(value)+', 0){\\rput[B](1.9\\labelsep,-2.3\\labelsep){\\strut{}'+label+'}}\n')
         else:
             return ('\\rput('+self.coors.strphys2frameX(value)+', 0){\\rput[B](0,-2.3\\labelsep){\\strut{}'+label+'}}\n')
 
     def draw_majortick(self, ticklabel, twosided):
         out = ''
         out += '\\rput('+self.coors.strphys2frameX(ticklabel)+', 0){\\majortickmarkx}\n'
         if twosided:
             out += '\\rput{180}('+self.coors.strphys2frameX(ticklabel)+', 1){\\majortickmarkx}\n'
         return out
 
     def draw_majorticklabel(self, value, label=''):
         if not label:
             label = self.get_ticklabel(value, int(self.description['LogX']) and self.coors.xmin() > 0 and self.coors.xmax() > 0)
         labelparts = label.split("\\n")
         labelcode = label if len(labelparts) == 1 else ("\\shortstack{" + "\\\\ ".join(labelparts) +  "}")
         rtn = "\\rput(" + self.coors.strphys2frameX(value) + ", 0){\\rput[t](0,-\\labelsep){" + labelcode + "}}\n"
         return rtn
 
 
 
 class YTicks(Ticks):
 
     def draw(self, custommajorticks=None, customminorticks=None, custommajortickmarks=-1, customminortickmarks=-1, drawlabels=True):
         twosided = bool(int(self.description.get('YTwosidedTicks', '0')))
         out = ""
         out += ('\n%\n% Y-Ticks\n%\n')
         out += ('\\def\\majortickmarky{\\psline[linewidth=%s](0,0)(%s,0)}%%\n' % (self.majorticklinewidth, self.majorticklength))
         out += ('\\def\\minortickmarky{\\psline[linewidth=%s](0,0)(%s,0)}%%\n' % (self.minorticklinewidth, self.minorticklength))
         uselog = self.description['LogY'] and self.coors.ymin() > 0 and self.coors.ymax() > 0
         out += self.draw_ticks(self.coors.ymin(), self.coors.ymax(),
                                plotlog=uselog,
                                custommajorticks=custommajorticks,
                                customminorticks=customminorticks,
                                custommajortickmarks=custommajortickmarks,
                                customminortickmarks=customminortickmarks,
                                twosided=twosided,
                                drawlabels=drawlabels)
         return out
 
     def draw_minortick(self, ticklabel, twosided):
         out = ''
         out += '\\rput(0, '+self.coors.strphys2frameY(ticklabel)+'){\\minortickmarky}\n'
         if twosided:
             out += '\\rput{180}(1, '+self.coors.strphys2frameY(ticklabel)+'){\\minortickmarky}\n'
         return out
 
     def draw_majortick(self, ticklabel, twosided):
         out = ''
         out += '\\rput(0, '+self.coors.strphys2frameY(ticklabel)+'){\\majortickmarky}\n'
         if twosided:
             out += '\\rput{180}(1, '+self.coors.strphys2frameY(ticklabel)+'){\\majortickmarky}\n'
         return out
 
     def draw_majorticklabel(self, value, label=''):
         if not label:
             label = self.get_ticklabel(value, int(self.description['LogY']) and self.coors.ymin() > 0 and self.coors.ymax() > 0)
         if self.description.has_key('RatioPlotMode') and self.description['RatioPlotMode'] == 'deviation' and \
            self.description.has_key('RatioPlotStage') and self.description['RatioPlotStage']:
             rtn = '\\uput[180]{0}(0, '+self.coors.strphys2frameY(value)+'){\\strut{}'+label+'\\,$\\sigma$}\n'
         else:
             labelparts = label.split("\\n")
             labelcode = label if len(labelparts) == 1 else ("\\shortstack{" + "\\\\ ".join(labelparts) +  "}")
             rtn = "\\rput(0, " + self.coors.strphys2frameY(value) + "){\\rput[r](-\\labelsep,0){" + labelcode + "}}\n"
         return rtn
 
 
 
 class ZTicks(Ticks):
 
     def __init__(self, description, coors):
         self.majorticklinewidth = '0.3pt'
         self.minorticklinewidth = '0.3pt'
         self.majorticklength    = '6pt'
         self.minorticklength    = '2.6pt'
         self.description = description
         self.coors = coors
 
     def draw(self, custommajorticks=None, customminorticks=None, custommajortickmarks=-1, customminortickmarks=-1, drawlabels=True):
         out = ""
         out += ('\n%\n% Z-Ticks\n%\n')
         out += ('\\def\\majortickmarkz{\\psline[linewidth='+self.majorticklinewidth+'](0,0)('+self.majorticklength+',0)}%\n')
         out += ('\\def\\minortickmarkz{\\psline[linewidth='+self.minorticklinewidth+'](0,0)('+self.minorticklength+',0)}%\n')
         out += self.draw_ticks(self.coors.zmin(), self.coors.zmax(),\
                                    plotlog=self.description['LogZ'],\
                                    custommajorticks=custommajorticks,\
                                    customminorticks=customminorticks,\
                                    custommajortickmarks=custommajortickmarks,\
                                    customminortickmarks=customminortickmarks,\
                                    twosided=False,\
                                    drawlabels=drawlabels)
         return out
 
     def draw_minortick(self, ticklabel, twosided):
         return '\\rput{180}(1, '+self.coors.strphys2frameZ(ticklabel)+'){\\minortickmarkz}\n'
 
     def draw_majortick(self, ticklabel, twosided):
         return '\\rput{180}(1, '+self.coors.strphys2frameZ(ticklabel)+'){\\majortickmarkz}\n'
 
     def draw_majorticklabel(self, value, label=''):
         if label=='':
             label = self.get_ticklabel(value, int(self.description['LogZ']))
         if self.description.has_key('RatioPlotMode') and self.description['RatioPlotMode']=='deviation' \
                 and self.description.has_key('RatioPlotStage') and self.description['RatioPlotStage']:
             return ('\\uput[0]{0}(1, '+self.coors.strphys2frameZ(value)+'){\\strut{}'+label+'\\,$\\sigma$}\n')
         else:
             return ('\\uput[0]{0}(1, '+self.coors.strphys2frameZ(value)+'){\\strut{}'+label+'}\n')
 
 
 
 class Coordinates(object):
 
     def __init__(self, inputdata):
         self.description = inputdata.description
 
     def phys2frameX(self, x):
         if self.description['LogX']:
             if x>0:
                 result = 1.*(log10(x)-log10(self.xmin()))/(log10(self.xmax())-log10(self.xmin()))
             else:
                 return -10
         else:
             result = 1.*(x-self.xmin())/(self.xmax()-self.xmin())
         if (fabs(result) < 1e-4):
             return 0
         else:
             return min(max(result,-10),10)
 
     def phys2frameY(self, y):
         if self.description['LogY']:
             if y > 0 and self.ymin() > 0 and self.ymax() > 0:
                 result = 1.*(log10(y)-log10(self.ymin()))/(log10(self.ymax())-log10(self.ymin()))
             else:
                 return -10
         else:
             result = 1.*(y-self.ymin())/(self.ymax()-self.ymin())
         if (fabs(result) < 1e-4):
             return 0
         else:
             return min(max(result,-10),10)
 
     def phys2frameZ(self, z):
         if self.description['LogZ']:
             if z>0:
                 result = 1.*(log10(z)-log10(self.zmin()))/(log10(self.zmax())-log10(self.zmin()))
             else:
                 return -10
         else:
             result = 1.*(z-self.zmin())/(self.zmax()-self.zmin())
         if (fabs(result) < 1e-4):
             return 0
         else:
             return min(max(result,-10),10)
 
     # TODO: Add frame2phys functions (to allow linear function sampling in the frame space rather than the physical space)
 
     def strphys2frameX(self, x):
         return str(self.phys2frameX(x))
 
     def strphys2frameY(self, y):
         return str(self.phys2frameY(y))
 
     def strphys2frameZ(self, z):
         return str(self.phys2frameZ(z))
 
     def xmin(self):
         return self.description['Borders'][0]
 
     def xmax(self):
         return self.description['Borders'][1]
 
     def ymin(self):
         return self.description['Borders'][2]
 
     def ymax(self):
         return self.description['Borders'][3]
 
     def zmin(self):
         return self.description['Borders'][4]
 
     def zmax(self):
         return self.description['Borders'][5]
 
 
 ####################
 
 import shutil, subprocess
 
 def try_cmd(args):
     "Run the given command + args and return True/False if it succeeds or not"
     try:
         subprocess.check_output(args, stderr=subprocess.STDOUT)
         return True
     except:
         return False
 
 def have_cmd(cmd):
     return try_cmd(["which", cmd])
 
 
 
 ####################
 
 
-
 if __name__ == '__main__':
 
     ## Try to rename the process on Linux
     try:
         import ctypes
         libc = ctypes.cdll.LoadLibrary('libc.so.6')
         libc.prctl(15, 'make-plots', 0, 0, 0)
     except Exception:
         pass
 
     ## Try to use Psyco optimiser
     try:
         import psyco
         psyco.full()
     except ImportError:
         pass
 
     ## Find number of (virtual) processing units
     import multiprocessing
     try:
         numcores = multiprocessing.cpu_count()
     except:
         numcores = 1
 
     ## Parse command line options
     from optparse import OptionParser, OptionGroup
     parser = OptionParser(usage=__doc__)
-    parser.add_option("-n", "-j", "--num-threads", dest="NUM_THREADS", type="int",
+    parser.add_option("-j", "-n", "--num-threads", dest="NUM_THREADS", type="int",
                       default=numcores, help="max number of threads to be used [%s]" % numcores)
+    parser.add_option("-o", "--outdir", dest="OUTPUT_DIR", default=None,
+                      help="choose the output directory (default = .dat dir)")
     parser.add_option("--font", dest="OUTPUT_FONT", choices="palatino,cm,times,helvetica,minion".split(","),
                       default="palatino", help="choose the font to be used in the plots")
     parser.add_option("--palatino", dest="OUTPUT_FONT", action="store_const", const="palatino", default="palatino",
                       help="use Palatino as font (default). DEPRECATED: Use --font")
     parser.add_option("--cm", dest="OUTPUT_FONT", action="store_const", const="cm", default="palatino",
                       help="use Computer Modern as font. DEPRECATED: Use --font")
     parser.add_option("--times", dest="OUTPUT_FONT", action="store_const", const="times", default="palatino",
                       help="use Times as font. DEPRECATED: Use --font")
     parser.add_option("--minion", dest="OUTPUT_FONT", action="store_const", const="minion", default="palatino",
                       help="use Adobe Minion Pro as font. Note: You need to set TEXMFHOME first. DEPRECATED: Use --font")
     parser.add_option("--helvetica", dest="OUTPUT_FONT", action="store_const", const="helvetica", default="palatino",
                       help="use Helvetica as font. DEPRECATED: Use --font")
-    parser.add_option("--format", dest="OUTPUT_FORMAT", default="PDF",
+    parser.add_option("-f", "--format", dest="OUTPUT_FORMAT", default="PDF",
                       help="choose plot format, perhaps multiple comma-separated formats e.g. 'pdf' or 'tex,pdf,png' (default = PDF).")
     parser.add_option("--ps", dest="OUTPUT_FORMAT", action="store_const", const="PS", default="PDF",
                       help="create PostScript output (default). DEPRECATED")
     parser.add_option("--pdf", dest="OUTPUT_FORMAT", action="store_const", const="PDF", default="PDF",
                       help="create PDF output. DEPRECATED")
     parser.add_option("--eps", dest="OUTPUT_FORMAT", action="store_const", const="EPS", default="PDF",
                       help="create Encapsulated PostScript output. DEPRECATED")
     parser.add_option("--png", dest="OUTPUT_FORMAT", action="store_const", const="PNG", default="PDF",
                      help="create PNG output. DEPRECATED")
     parser.add_option("--pspng", dest="OUTPUT_FORMAT", action="store_const", const="PS,PNG", default="PDF",
                      help="create PS and PNG output. DEPRECATED")
     parser.add_option("--pdfpng", dest="OUTPUT_FORMAT", action="store_const", const="PDF,PNG", default="PDF",
                      help="create PDF and PNG output. DEPRECATED")
     parser.add_option("--epspng", dest="OUTPUT_FORMAT", action="store_const", const="EPS,PNG", default="PDF",
                      help="create EPS and PNG output. DEPRECATED")
     parser.add_option("--tex", dest="OUTPUT_FORMAT", action="store_const", const="TEX", default="PDF",
                       help="create TeX/LaTeX output.")
     parser.add_option("--no-cleanup", dest="NO_CLEANUP", action="store_true", default=False,
                       help="keep temporary directory and print its filename.")
     parser.add_option("--no-subproc", dest="NO_SUBPROC", action="store_true", default=False,
                       help="don't use subprocesses to render the plots in parallel -- useful for debugging.")
     parser.add_option("--full-range", dest="FULL_RANGE", action="store_true", default=False,
-                      help="plot full y range in LogY plots.")
+                      help="plot full y range in log-y plots.")
     parser.add_option("-c", "--config", dest="CONFIGFILES", action="append", default=None,
                       help="plot config file to be used. Overrides internal config blocks.")
     verbgroup = OptionGroup(parser, "Verbosity control")
     verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL",
                          default=logging.INFO, help="print debug (very verbose) messages")
     verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL",
                          default=logging.INFO, help="be very quiet")
     parser.add_option_group(verbgroup)
-
     opts, args = parser.parse_args()
+
+    ## Tweak the opts output
     logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s")
     opts.OUTPUT_FONT = opts.OUTPUT_FONT.upper()
     opts.OUTPUT_FORMAT = opts.OUTPUT_FORMAT.upper().split(",")
+    if opts.NUM_THREADS == 1:
+        opts.NO_SUBPROC = True
 
     ## Check for no args
     if len(args) == 0:
         logging.error(parser.get_usage())
         sys.exit(2)
 
     ## Check that the files exist
     for f in args:
         if not os.access(f, os.R_OK):
             print "Error: cannot read from %s" % f
             sys.exit(1)
 
     ## Test for external programs (kpsewhich, latex, dvips, ps2pdf/ps2eps, and convert)
     opts.LATEXPKGS = []
     if opts.OUTPUT_FORMAT != ["TEX"]:
         try:
             ## latex
             if not have_cmd("pdflatex"):
                 logging.error("ERROR: required program 'latex' could not be found. Exiting...")
                 sys.exit(1)
             # ## dvips
             # if not have_cmd("dvips"):
             #     logging.error("ERROR: required program 'dvips' could not be found. Exiting...")
             #     sys.exit(1)
 
             # ## ps2pdf / ps2eps
             # if "PDF" in opts.OUTPUT_FORMAT:
             #     if not have_cmd("ps2pdf"):
             #         logging.error("ERROR: required program 'ps2pdf' (for PDF output) could not be found. Exiting...")
             #         sys.exit(1)
             # elif "EPS" in opts.OUTPUT_FORMAT:
             #     if not have_cmd("ps2eps"):
             #         logging.error("ERROR: required program 'ps2eps' (for EPS output) could not be found. Exiting...")
             #         sys.exit(1)
 
             ## PNG output converter
             if "PNG" in opts.OUTPUT_FORMAT:
                 if not have_cmd("convert"):
                     logging.error("ERROR: required program 'convert' (for PNG output) could not be found. Exiting...")
                     sys.exit(1)
 
             ## kpsewhich: required for LaTeX package testing
             if not have_cmd("kpsewhich"):
                 logging.warning("WARNING: required program 'kpsewhich' (for LaTeX package checks) could not be found")
             else:
                 ## Check minion font
                 if opts.OUTPUT_FONT == "MINION":
                     p = subprocess.Popen(["kpsewhich", "minion.sty"], stdout=subprocess.PIPE)
                     p.wait()
                     if p.returncode != 0:
                         logging.warning('Warning: Using "--minion" requires minion.sty to be installed. Ignoring it.')
                         opts.OUTPUT_FONT = "PALATINO"
 
                 ## Check for HEP LaTeX packages
                 # TODO: remove HEP-specifics/non-standards?
                 for pkg in ["hepnames", "hepunits", "underscore"]:
                     p = subprocess.Popen(["kpsewhich", "%s.sty" % pkg], stdout=subprocess.PIPE)
                     p.wait()
                     if p.returncode == 0:
                         opts.LATEXPKGS.append(pkg)
 
                 ## Check for Palatino old style figures and small caps
                 if opts.OUTPUT_FONT == "PALATINO":
                     p = subprocess.Popen(["kpsewhich", "ot1pplx.fd"], stdout=subprocess.PIPE)
                     p.wait()
                     if p.returncode == 0:
                         opts.OUTPUT_FONT = "PALATINO_OSF"
         except Exception, e:
             logging.warning("Problem while testing for external packages. I'm going to try and continue without testing, but don't hold your breath...")
 
     # def init_worker():
     #     import signal
     #     signal.signal(signal.SIGINT, signal.SIG_IGN)
 
     ## Run rendering jobs
     datfiles = args
     plotword = "plots" if len(datfiles) > 1 else "plot"
     logging.info("Making %d %s" % (len(datfiles), plotword))
 
     ## Create a temporary directory
     tempdir = tempfile.mkdtemp('.make-plots')
     if opts.NO_CLEANUP:
         logging.info('Keeping temp-files in %s' % tempdir)
 
     ## Create TeX file
     texpath = os.path.join(tempdir, 'plots.tex')
     texfile = open(texpath, 'w')
     # if inputdata.description.has_key('LeftMargin') and inputdata.description['LeftMargin']!='':
     #     inputdata.description['LeftMargin'] = float(inputdata.description['LeftMargin'])
     # else:
     #     inputdata.description['LeftMargin'] = 1.4
     # if inputdata.description.has_key('RightMargin') and inputdata.description['RightMargin']!='':
     #     inputdata.description['RightMargin'] = float(inputdata.description['RightMargin'])
     # else:
     #     inputdata.description['RightMargin'] = 0.35
     # if inputdata.description.has_key('TopMargin') and inputdata.description['TopMargin']!='':
     #     inputdata.description['TopMargin'] = float(inputdata.description['TopMargin'])
     # else:
     #     inputdata.description['TopMargin'] = 0.65
     # if inputdata.description.has_key('BottomMargin') and inputdata.description['BottomMargin']!='':
     #     inputdata.description['BottomMargin'] = float(inputdata.description['BottomMargin'])
     # else:
     #     inputdata.description['BottomMargin'] = 0.95
     # if inputdata.description['is2dim']:
     #     inputdata.description['RightMargin'] += 1.7
     # papersizex = inputdata.description['PlotSizeX'] + 0.1 + \
     #              inputdata.description['LeftMargin'] + inputdata.description['RightMargin']
     # papersizey = inputdata.description['PlotSizeY'] + inputdata.description['RatioPlotSizeY'] + 0.1 + \
     #              inputdata.description['TopMargin'] + inputdata.description['BottomMargin']
-    #
+
     out = ""
     # out += '\\documentclass{article}\n'
     # out += '\\documentclass[pstricks,multi]{standalone}\n'
-    out += '\\documentclass[multi=multipage]{standalone}\n'
+    out += '\\documentclass[multi=multipage,border=5]{standalone}\n'
     if opts.OUTPUT_FONT == "MINION":
         out += ('\\usepackage{minion}\n')
     elif opts.OUTPUT_FONT == "PALATINO_OSF":
         out += ('\\usepackage[osf,sc]{mathpazo}\n')
     elif opts.OUTPUT_FONT == "PALATINO":
         out += ('\\usepackage{mathpazo}\n')
     elif opts.OUTPUT_FONT == "TIMES":
         out += ('\\usepackage{mathptmx}\n')
     elif opts.OUTPUT_FONT == "HELVETICA":
         out += ('\\renewcommand{\\familydefault}{\\sfdefault}\n')
         out += ('\\usepackage{sfmath}\n')
         out += ('\\usepackage{helvet}\n')
         out += ('\\usepackage[symbolgreek]{mathastext}\n')
     for pkg in opts.LATEXPKGS:
         out += ('\\usepackage{%s}\n' % pkg)
     out += ('\\usepackage{pst-all}\n')
     out += ('\\usepackage{xcolor}\n')
     out += ('\\selectcolormodel{rgb}\n')
     out += ('\\definecolor{red}{HTML}{EE3311}\n') # (Google uses 'DC3912')
     out += ('\\definecolor{blue}{HTML}{3366FF}')
     out += ('\\definecolor{green}{HTML}{109618}')
     out += ('\\definecolor{orange}{HTML}{FF9900}')
     out += ('\\definecolor{lilac}{HTML}{990099}')
     out += ('\\usepackage{amsmath}\n')
     out += ('\\usepackage{amssymb}\n')
     out += ('\\usepackage{relsize}\n')
     # out += ('\\usepackage[dvips,\n')
     # out += ('  left=%4.3fcm, right=0cm,\n' % (inputdata.description['LeftMargin']-0.45,))
     # out += ('  top=%4.3fcm,  bottom=0cm,\n' % (inputdata.description['TopMargin']-0.30,))
     # out += ('  paperwidth=%scm,paperheight=%scm\n' % (papersizex,papersizey))
     # out += (']{geometry}\n')
     # out += ('\\usepackage[pdfcrop={--margins 10}]{auto-pst-pdf}\n')
     out += ('\\usepackage{auto-pst-pdf}\n')
     out += '\n'
     out += ('\\begin{document}\n')
     #out += ('\\pagestyle{empty}\n')
     out += ('\\SpecialCoor\n')
     texfile.write(out)
 
     ## Process each datfile into the TeX doc
+    filenames = []
     for i, datfile in enumerate(datfiles):
+        if os.path.splitext(datfile)[1] != ".dat":
+            raise Exception("Data file '%s' is not a make-plots .dat file" % datfile)
         if not os.access(datfile, os.R_OK):
             raise Exception("Could not read data file '%s'" % datfile)
 
-        ## Get std paths and copy datfile into tempdir
-        dirname = os.path.dirname(datfile)
-        datfile = os.path.basename(datfile)
+        ## Get std paths
+        datpath = os.path.abspath(datfile)
+        datfile = os.path.basename(datpath)
+        datdir = os.path.dirname(datpath)
+        outdir = opts.OUTPUT_DIR if opts.OUTPUT_DIR else datdir
         filename = datfile.replace('.dat','')
+        filenames.append(filename)
+
+        ## Copy datfile into tempdir
         cwd = os.getcwd()
-        datpath = os.path.join(cwd, dirname, datfile)
         tempdatpath = os.path.join(tempdir, datfile)
         shutil.copy(datpath, tempdir)
 
         ## Append TeX to file
-        inputdata = InputData(os.path.join(dirname,filename))
+        inputdata = InputData(datpath)
         p = Plot(inputdata)
         texfile.write("\n\n")
         texfile.write(p.write_header(inputdata))
         if inputdata.attr_bool("MainPlot", True):
             mp = MainPlot(inputdata)
             texfile.write(mp.draw(inputdata))
         if not inputdata.attr_bool("is2dim", False) and inputdata.attr_bool("RatioPlot", True) and inputdata.attr("RatioPlotReference"): # is not None:
             rp = RatioPlot(inputdata)
             texfile.write(rp.draw(inputdata))
         texfile.write(p.write_footer())
 
     texfile.write('\\end{document}\n')
     texfile.close()
 
-    filename = "plots" #< TODO: unhack
 
     if opts.OUTPUT_FORMAT != ["TEX"]:
 
+        ## Change into the temp dir
+        os.chdir(tempdir)
+
         ## Check for the required programs
-        latexavailable = have_cmd("latex")
-        dvipsavailable = have_cmd("dvips")
+        pdflatexavailable = have_cmd("pdflatex")
+        pdftkavailable = have_cmd("pdftk")
         convertavailable = have_cmd("convert")
-        ps2pnmavailable = have_cmd("ps2pnm")
-        pnm2pngavailable = have_cmd("pnm2png")
-
-        # TODO: It'd be nice to be able to control the size of the PNG between thumb and full-size...
-        #   currently defaults (and is used below) to a size suitable for thumbnails
-        def mkpng(infile, outfile, density=100):
-            if convertavailable:
-                pngcmd = ["convert", "-flatten", "-density", str(density), infile, "-quality", "100", "-sharpen", "0x1.0", outfile]
-                logging.debug(" ".join(pngcmd))
-                pngproc = subprocess.Popen(pngcmd, stdout=subprocess.PIPE, cwd=tempdir)
-                pngproc.wait()
+
+        def mkpdf(infile, outfile=None):
+            "Run pdfLaTeX (in non-stop mode)"
+            if not pdflatexavailable:
+                raise Exception("Required pdflatex not found")
+            #logging.debug(os.listdir("."))
+            texcmd = ["pdflatex", "-shell-escape", "\scrollmode\input", texpath]
+            logging.debug("TeX command: " + " ".join(texcmd))
+            texproc = subprocess.Popen(texcmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) #, cwd=tempdir)
+            logging.debug(texproc.communicate()[0])
+            #texproc.wait()
+            rawoutfile = infile.replace(".tex", ".pdf")
+            if outfile:
+                logging.debug("Pre-move temp dir contents = ", os.listdir("."))
+                shutil.move(rawoutfile, outfile)
             else:
+                outfile = rawoutfile
+            logging.debug("Temp dir contents = ", os.listdir("."))
+            return outfile
+
+        def splitpdf(infile, outfiles=None):
+            "Split a PDF into a PDF per page, and rename if target names are given"
+            if not pdftkavailable:
+                raise Exception("Required PDF splitter (pdftk) not found")
+            ptkcmd = ["pdftk", "plots.pdf", "burst", "output", "plots-%d.pdf"]
+            logging.debug("PDF split command = " + " ".join(ptkcmd))
+            ptkproc = subprocess.Popen(ptkcmd, stdout=subprocess.PIPE) #, cwd=tempdir)
+            ptkproc.wait()
+            from glob import glob
+            # picsfile = os.path.join(tempdir, "plots-pics.pdf")
+            picsfile = "plots-pics.pdf"
+            if os.path.exists(picsfile):
+                os.remove(picsfile)
+            #print ['{0:0>10}'.format(os.path.basename(x).replace("plots-", "")) for x in glob("plots-*.pdf")]
+            rawoutfiles = sorted(glob("plots-*.pdf"), key=lambda x: '{0:0>10}'.format(x.replace("plots-", "")))
+            if outfiles:
+                #print len(rawoutfiles), rawoutfiles
+                #print len(outfiles), outfiles
+                assert len(rawoutfiles) == len(outfiles)
+                logging.debug("Pre-move temp dir contents = ", os.listdir("."))
+                for (tmp, final) in zip(rawoutfiles, outfiles):
+                    shutil.move(tmp, final)
+            else:
+                outfiles = rawoutfiles
+            logging.debug("Temp dir contents = ", os.listdir("."))
+            return outfiles
+
+        def mkpng(infile, outfile=None, density=100):
+            "Convert a PDF to PNG format"
+            if not convertavailable:
                 raise Exception("Required PNG maker program (convert) not found")
-            # elif ps2pnmavailable and pnm2pngavailable:
-            #     pstopnm = "pstopnm -stdout -xsize=461 -ysize=422 -xborder=0.01 -yborder=0.01 -portrait " + infile
-            #     p1 = subprocess.Popen(pstopnm.split(), stdout=subprocess.PIPE, stderr=open("/dev/null", "w"), cwd=tempdir)
-            #     p2 = subprocess.Popen(["pnmtopng"], stdin=p1.stdout, stdout=open("%s/%s.png" % (tempdir, outfile), "w"), stderr=open("/dev/null", "w"), cwd=tempdir)
-            #     p2.wait()
-            # else:
-            #     raise Exception("Required PNG maker programs (convert, or ps2pnm and pnm2png) not found")
-
-        ## Run LaTeX (in no-stop mode)
-        logging.debug(os.listdir(tempdir))
-        texcmd = ["pdflatex", "-shell-escape", "\scrollmode\input", texpath]
-        logging.debug("TeX command: " + " ".join(texcmd))
-        texproc = subprocess.Popen(texcmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=tempdir)
-        logging.debug(texproc.communicate()[0])
-        logging.debug(os.listdir(tempdir))
-
-        # ## Run dvips
-        # dvcmd = ["dvips", filename]
-        # if not logging.getLogger().isEnabledFor(logging.DEBUG):
-        #     dvcmd.append("-q")
-        # ## Handle Minion Font
-        # if opts.OUTPUT_FONT == "MINION":
-        #     dvcmd.append('-Pminion')
-
-        ## Choose format
-        # TODO: Rationalise... this is a mess! Maybe we can use tex2pix?
-        # if "PS" in opts.OUTPUT_FORMAT:
-        #     dvcmd += ["-o", "%s.ps" % filename]
-        #     logging.debug(" ".join(dvcmd))
-        #     dvproc = subprocess.Popen(dvcmd, stdout=subprocess.PIPE, cwd=tempdir)
-        #     dvproc.wait()
-        # if "PDF" in opts.OUTPUT_FORMAT:
-        #     dvcmd.append("-f")
-        #     logging.debug(" ".join(dvcmd))
-        #     dvproc = subprocess.Popen(dvcmd, stdout=subprocess.PIPE, cwd=tempdir)
-        #     cnvproc = subprocess.Popen(["ps2pdf", "-"], stdin=dvproc.stdout, stdout=subprocess.PIPE, cwd=tempdir)
-        #     f = open(os.path.join(tempdir, "%s.pdf" % filename), "w")
-        #     f.write(cnvproc.communicate()[0])
-        #     f.close()
-        # if "EPS" in opts.OUTPUT_FORMAT:
-        #     dvcmd.append("-f")
-        #     logging.debug(" ".join(dvcmd))
-        #     dvproc = subprocess.Popen(dvcmd, stdout=subprocess.PIPE, cwd=tempdir)
-        #     cnvproc = subprocess.Popen(["ps2eps"], stdin=dvproc.stdout, stderr=subprocess.PIPE, stdout=subprocess.PIPE, cwd=tempdir)
-        #     f = open(os.path.join(tempdir, "%s.eps" % filename), "w")
-        #     f.write(cnvproc.communicate()[0])
-        #     f.close()
-        # if "PNG" in opts.OUTPUT_FORMAT:
-        #     dvcmd.append("-f")
-        #     logging.debug(" ".join(dvcmd))
-        #     dvproc = subprocess.Popen(dvcmd, stdout=subprocess.PIPE, cwd=tempdir)
-        #     pngcmd = ["convert", "-flatten", "-density", "100", "-", "-quality", "100", "-sharpen", "0x1.0", "%s.png" % filename]
-        #     logging.debug(" ".join(pngcmd))
-        #     pngproc = subprocess.Popen(pngcmd, stdin=dvproc.stdout, stdout=subprocess.PIPE, cwd=tempdir)
-        #     pngproc.wait()
-        logging.debug(os.listdir(tempdir))
+            if not outfile:
+                outfile = infile.replace(".pdf", ".png")
+            pngcmd = ["convert", "-flatten", "-density", str(density), infile, "-quality", "100", "-sharpen", "0x1.0", outfile]
+            logging.debug("PDF -> PNG command = " + " ".join(pngcmd))
+            pngproc = subprocess.Popen(pngcmd, stdout=subprocess.PIPE) #, cwd=tempdir)
+            pngproc.wait()
+            logging.debug("Temp dir contents = ", os.listdir("."))
+            return outfile
+
+
+        ## Make the aggregated PDF and split it to the correct names
+        pdf = mkpdf("plots.tex")
+        pdfs = splitpdf(pdf, [x+".pdf" for x in filenames])
+
+        ## Convert the PDFs to PNGs if requested
+        if "PNG" in opts.OUTPUT_FORMAT:
+            for p in pdfs:
+                mkpng(p)
+
 
     ## Copy results back to main dir
-    # shutil.copy(os.path.join(tempdir,"plots-pics.pdf"), os.path.join(cwd,dirname))
+    logging.debug("Temp dir contents = ", os.listdir(tempdir))
     for fmt in opts.OUTPUT_FORMAT:
-        outname = "%s.%s" % (filename, fmt.lower())
-        outpath = os.path.join(tempdir, outname)
-        if os.path.exists(outpath):
-            shutil.copy(outpath, os.path.join(cwd,dirname))
-        else:
-            logging.error("No output file '%s' from processing %s" % (outname, datfile))
+        for filename in filenames:
+            outname = "%s.%s" % (filename, fmt.lower())
+            outpath = os.path.join(tempdir, outname)
+            if os.path.exists(outpath):
+                shutil.copy(outpath, outdir)
+            else:
+                logging.error("No output file '%s'" % outname) # from processing %s" % (outname, datfile))
 
     ## Clean up
     if not opts.NO_CLEANUP:
         shutil.rmtree(tempdir, ignore_errors=True)
 
 
 
     # if opts.NO_SUBPROC:
     #     init_worker()
     #     for i, df in enumerate(datfiles):
     #         logging.info("Plotting %s (%d/%d remaining)" % (df, len(datfiles)-i, len(datfiles)))
     #         process_datfile(df)
     # else:
     #     pool = multiprocessing.Pool(opts.NUM_THREADS, init_worker)
     #     try:
     #         for i, _ in enumerate(pool.imap(process_datfile, datfiles)):
     #             logging.info("Plotting %s (%d/%d remaining)" % (datfiles[i], len(datfiles)-i, len(datfiles)))
     #         pool.close()
     #     except KeyboardInterrupt:
     #         print "Caught KeyboardInterrupt, terminating workers"
     #         pool.terminate()
     #     pool.join()
diff --git a/bin/rivet b/bin/rivet
--- a/bin/rivet
+++ b/bin/rivet
@@ -1,657 +1,658 @@
 #! /usr/bin/env python
 
 """\
 Run Rivet analyses on inputted events from file or Unix pipe
 
 Examples:
 
   %prog [options] <hepmcfile> [<hepmcfile2> ...]
 
   or
 
   my_generator -o fifo.hepmc &
   %prog [options] fifo.hepmc
 
 
 ENVIRONMENT:
  * RIVET_ANALYSIS_PATH: list of paths to be searched for plugin
      analysis libraries at runtime
  * RIVET_DATA_PATH: list of paths to be searched for data files
 """
 
 import os, sys
 
 ## Load the rivet module
 try:
     import rivet
 except:
     ## If rivet loading failed, try to bootstrap the Python path!
     try:
         # TODO: Is this a good idea? Maybe just notify the user that their PYTHONPATH is wrong?
         import commands
         modname = sys.modules[__name__].__file__
         binpath = os.path.dirname(modname)
         rivetconfigpath = os.path.join(binpath, "rivet-config")
         rivetpypath = commands.getoutput(rivetconfigpath + " --pythonpath")
         sys.path.append(rivetpypath)
         import rivet
     except:
         sys.stderr.write("The rivet Python module could not be loaded: is your PYTHONPATH set correctly?\n")
         sys.exit(5)
 
 rivet.util.check_python_version()
 rivet.util.set_process_name("rivet")
 
 import time, datetime, logging, signal
 
 ## Parse command line options
 from optparse import OptionParser, OptionGroup
 parser = OptionParser(usage=__doc__, version="rivet v%s" % rivet.version())
 
 anagroup = OptionGroup(parser, "Analysis handling")
 anagroup.add_option("-a", "--analysis", "--analyses", dest="ANALYSES", action="append",
                     default=[], metavar="ANA",
                     help="add an analysis (or comma-separated list of analyses) to the processing list.")
 anagroup.add_option("--list-analyses", "--list", dest="LIST_ANALYSES", action="store_true",
                     default=False, help="show the list of available analyses' names. With -v, it shows the descriptions, too")
 anagroup.add_option("--list-keywords", "--keywords", dest="LIST_KEYWORDS", action="store_true",
                     default=False, help="show the list of available keywords.")
 anagroup.add_option("--list-used-analyses", action="store_true", dest="LIST_USED_ANALYSES",
                     default=False, help="list the analyses used by this command (after subtraction of inappropriate ones)")
 anagroup.add_option("--show-analysis", "--show-analyses", "--show", dest="SHOW_ANALYSES", action="append",
                     default=[], help="show the details of an analysis")
 anagroup.add_option("--show-bibtex", dest="SHOW_BIBTEX", action="store_true",
                     default=False, help="show BibTeX entries for all used analyses")
 anagroup.add_option("--analysis-path", dest="ANALYSIS_PATH", metavar="PATH", default=None,
                     help="specify the analysis search path (cf. $RIVET_ANALYSIS_PATH).")
 # TODO: remove/deprecate the append?
 anagroup.add_option("--analysis-path-append", dest="ANALYSIS_PATH_APPEND", metavar="PATH", default=None,
                     help="append to the analysis search path (cf. $RIVET_ANALYSIS_PATH).")
 anagroup.add_option("--pwd", dest="ANALYSIS_PATH_PWD", action="store_true", default=False,
                     help="append the current directory (pwd) to the analysis/data search paths (cf. $RIVET_ANALYSIS_PATH).")
 # TODO: add control for more paths?
 parser.add_option_group(anagroup)
 
 
 extragroup = OptionGroup(parser, "Extra run settings")
 extragroup.add_option("-o", "-H", "--histo-file", dest="HISTOFILE",
                       default="Rivet.yoda", help="specify the output histo file path (default = %default)")
 extragroup.add_option("--no-histo-file", dest="WRITE_DATA", action="store_false", default=True,
                       help="don't write out any histogram file at the end of the run (default = write)")
 extragroup.add_option("-x", "--cross-section", dest="CROSS_SECTION",
                       default=None, metavar="XS",
                       help="specify the signal process cross-section in pb")
 extragroup.add_option("-n", "--nevts", dest="MAXEVTNUM", type="int",
                       default=None, metavar="NUM",
                       help="restrict the max number of events to process")
 extragroup.add_option("--nskip", dest="EVTSKIPNUM", type="int",
                       default=0, metavar="NUM",
                       help="skip NUM events read from input before beginning processing")
 extragroup.add_option("--runname", dest="RUN_NAME", default=None, metavar="NAME",
                       help="give an optional run name, to be prepended as a 'top level directory' in histo paths")
 extragroup.add_option("--ignore-beams", dest="IGNORE_BEAMS", action="store_true", default=False,
                       help="ignore input event beams when checking analysis compatibility. "
                       "WARNING: analyses may not work correctly, or at all, with inappropriate beams")
 parser.add_option_group(extragroup)
 
 
 timinggroup = OptionGroup(parser, "Timeouts and periodic operations")
 timinggroup.add_option("--event-timeout", dest="EVENT_TIMEOUT", type="int",
                        default=21600, metavar="NSECS",
                        help="max time in whole seconds to wait for an event to be generated from the specified source (default = %default)")
 timinggroup.add_option("--run-timeout", dest="RUN_TIMEOUT", type="int",
                        default=None, metavar="NSECS",
                        help="max time in whole seconds to wait for the run to finish. This can be useful on batch systems such "
                        "as the LCG Grid where tokens expire on a fixed wall-clock and can render long Rivet runs unable to write "
                        "out the final histogram file (default = unlimited)")
 timinggroup.add_option("--histo-interval", dest="HISTO_WRITE_INTERVAL", type=int,
                        default=1000, help="specify the number of events between histogram file updates, default = %default. "
                        "Set to 0 to only write out at the end of the run. Note that intermediate histograms will be those "
                        "from the analyze step only: analysis finalizing is currently not executed until the end of the run.")
 parser.add_option_group(timinggroup)
 
 
 verbgroup = OptionGroup(parser, "Verbosity control")
 parser.add_option("-l", dest="NATIVE_LOG_STRS", action="append",
                   default=[], help="set a log level in the Rivet library")
 verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL",
                      default=logging.INFO, help="print debug (very verbose) messages")
 verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL",
                      default=logging.INFO, help="be very quiet")
 parser.add_option_group(verbgroup)
 opts, args = parser.parse_args()
 
 
 ## Override/modify analysis search path
 if opts.ANALYSIS_PATH:
     rivet.setAnalysisLibPaths(opts.ANALYSIS_PATH.split(":"))
     rivet.setAnalysisDataPaths(opts.ANALYSIS_PATH.split(":"))
 if opts.ANALYSIS_PATH_APPEND:
     for ap in opts.ANALYSIS_PATH_APPEND.split(":"):
         rivet.addAnalysisLibPath(ap)
         rivet.addAnalysisDataPath(ap)
 if opts.ANALYSIS_PATH_PWD:
     rivet.addAnalysisLibPath(os.path.abspath("."))
     rivet.addAnalysisDataPath(os.path.abspath("."))
 
 
 ## Configure logging
 logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s")
 for l in opts.NATIVE_LOG_STRS:
     name, level = None, None
     try:
         name, level = l.split("=")
     except:
         name = "Rivet"
         level = l
     ## Fix name
     if name != "Rivet" and not name.startswith("Rivet."):
         name = "Rivet." + name
     try:
         ## Get right error type
         level = rivet.LEVELS.get(level.upper(), None)
         logging.debug("Setting log level: %s %d" % (name, level))
         rivet.setLogLevel(name, level)
     except:
         logging.warning("Couldn't process logging string '%s'" % l)
 
 
 
 ############################
 ## Listing available analyses/keywords
 
 
 def getAnalysesByKeyword(alist, kstring):
     add, veto, ret = [], [], []
     bits = [i for i in kstring.replace("^@", "@^").split("@") if len(i) > 0]
     for b in bits:
         if b.startswith("^"):
             veto.append(b.strip("^"))
         else:
             add.append(b)
 
     add = set(add)
     veto = set(veto)
 
     for a in alist:
         kwds = set([i.lower() for i in rivet.AnalysisLoader.getAnalysis(a).keywords()])
         if kwds.intersection(veto) and len(kwds.intersection(add)) == len(list(add)):
             ret.append(a)
     return ret
 
 
 ## List of analyses
 all_analyses = rivet.AnalysisLoader.analysisNames()
 if opts.LIST_ANALYSES:
     ## Treat args as case-insensitive regexes if present
     regexes = None
     if args:
         import re
         regexes = [re.compile(arg, re.I) for arg in args]
     try:
         # import tempfile, subprocess
         # tf, tfpath = tempfile.mkstemp(prefix="rivet-list.")
         for aname in all_analyses:
             if not regexes:
                 toshow = True
             else:
                 toshow = False
                 for regex in regexes:
                     if regex.search(aname):
                         toshow = True
                         break
             if toshow:
                 msg = aname
                 if opts.LOGLEVEL <= logging.INFO:
                     a = rivet.AnalysisLoader.getAnalysis(aname)
                     st = "" if a.status() == "VALIDATED" else ("[" + a.status() + "] ")
                     msg = "%-25s   %s" % (aname, st + rivet.util.detex(a.summary()))
                     if opts.LOGLEVEL < logging.INFO:
                         if a.keywords():
                             msg += "  [" + " ".join(a.keywords()) + "]"
                         if a.luminosityfb():
                             msg += "  [ \int L = %s fb^{-1} ]"%a.luminosityfb()
                 print msg
                 #os.write(tf, msg + "\n")
         # if os.path.getsize(tfpath) > 0:
         #     pager = subprocess.Popen(["less", "-FX", tfpath]) #, stdin=subprocess.PIPE)
         #     pager.communicate()
     finally:
         # os.unlink(tfpath) #< always clean up
         pass
     sys.exit(0)
 
 
 def getKeywords(alist):
     all_keywords = []
     for a in alist:
         all_keywords.extend(rivet.AnalysisLoader.getAnalysis(a).keywords())
     all_keywords = [i.lower() for i in all_keywords]
     return sorted(list(set(all_keywords)))
 
 
 ## List keywords
 if opts.LIST_KEYWORDS:
     # a = rivet.AnalysisLoader.getAnalysis(aname)
     for k in getKeywords(all_analyses):
         print k
     sys.exit(0)
 
 
 ## Show analyses' details
 if len(opts.SHOW_ANALYSES) > 0:
     toshow = []
     for i, a in enumerate(opts.SHOW_ANALYSES):
         a_up = a.upper()
         if a_up in all_analyses and a_up not in toshow:
             toshow.append(a_up)
         else:
             ## Treat as a case-insensitive regex
             import re
             regex = re.compile(a, re.I)
             for ana in all_analyses:
                 if regex.search(ana) and a_up not in toshow:
                     toshow.append(ana)
 
     msgs = []
     for i, name in enumerate(sorted(toshow)):
         import textwrap
         ana = rivet.AnalysisLoader.getAnalysis(name)
 
         msg = ""
         msg += name + "\n"
         msg += (len(name) * "=") + "\n\n"
         msg += rivet.util.detex(ana.summary()) + "\n\n"
         msg += "Status: " + ana.status() + "\n\n"
 
         # TODO: reduce to only show Inspire in v3
         if ana.inspireId():
             msg += "Inspire ID: " + ana.inspireId() + "\n"
             msg += "Inspire URL: http://inspire-hep.net/record/" + ana.inspireId() + "\n"
             msg += "HepData URL: http://hepdata.net/record/ins" + ana.inspireId() + "\n"
         elif ana.spiresId():
             msg += "Spires ID: " + ana.spiresId() + "\n"
             msg += "Inspire URL: http://inspire-hep.net/search?p=find+key+" + ana.spiresId() + "\n"
             msg += "HepData URL: http://hepdata.cedar.ac.uk/view/irn" + ana.spiresId() + "\n"
 
-        if ana.experiment():
-            msg += "Experiment: " + ana.experiment()
-            if ana.collider():
-                msg += "(%s)" % ana.collider()
-            msg += "\n"
-
         if ana.year():
             msg += "Year of publication: " + ana.year() + "\n"
+        if ana.bibKey():
+            msg += "BibTeX key: " + ana.bibKey() + "\n"
 
         msg += "Authors:\n"
         for a in ana.authors():
             msg += "  " + a + "\n"
         msg += "\n"
 
         msg += "Description:\n"
         twrap = textwrap.TextWrapper(width=75, initial_indent=2*" ", subsequent_indent=2*" ")
         msg += twrap.fill(rivet.util.detex(ana.description())) + "\n\n"
 
+        if ana.experiment():
+            msg += "Experiment: " + ana.experiment()
+            if ana.collider():
+                msg += "(%s)" % ana.collider()
+            msg += "\n"
         # TODO: move this formatting into Analysis or a helper function?
         if ana.requiredBeams():
             def pid_to_str(pid):
                 if pid == 11:
                     return "e-"
                 elif pid == -11:
                     return "e+"
                 elif pid == 2212:
                     return "p+"
                 elif pid == -2212:
                     return "p-"
                 elif pid == 10000:
                     return "*"
                 else:
                     return str(pid)
             beamstrs = []
             for bp in ana.requiredBeams():
                 beamstrs.append(pid_to_str(bp[0]) + " " + pid_to_str(bp[1]))
             msg += "Beams:" + ", ".join(beamstrs) + "\n"
 
         if ana.requiredEnergies():
             msg += "Beam energies:" + "; ".join(["(%0.1f, %0.1f) GeV\n" % (epair[0], epair[1]) for epair in ana.requiredEnergies()])
         else:
             msg += "Beam energies: ANY\n"
 
         if ana.runInfo():
             msg += "Run details:\n"
             twrap = textwrap.TextWrapper(width=75, initial_indent=2*" ", subsequent_indent=4*" ")
             for l in ana.runInfo().split("\n"):
                 msg += twrap.fill(l) + "\n"
 
         if ana.luminosityfb():
             msg+= "\nIntegrated data luminosity = %s inverse fb.\n"%ana.luminosityfb()
 
         if ana.keywords():
             msg += "\nAnalysis keywords:"
             for k in ana.keywords():
                 msg += " %s"%k
             msg+= "\n\n"
 
         if ana.references():
             msg += "\n" + "References:\n"
             for r in ana.references():
                 url = None
                 if r.startswith("arXiv:"):
                     code = r.split()[0].replace("arXiv:", "")
                     url = "http://arxiv.org/abs/" + code
                 elif r.startswith("doi:"):
                     code = r.replace("doi:", "")
                     url = "http://dx.doi.org/" + code
                 if url is not None:
                     r += " - " + url
                 msg += "  " + r + "\n"
 
         ## Add to the output
         msgs.append(msg)
 
     ## Write the combined messages to a temporary file and page it
     if msgs:
         try:
             import tempfile, subprocess
             tffd, tfpath = tempfile.mkstemp(prefix="rivet-show.")
             os.write(tffd, "\n\n".join(msgs))
             if sys.stdout.isatty():
                 pager = subprocess.Popen(["less", "-FX", tfpath]) #, stdin=subprocess.PIPE)
                 pager.communicate()
             else:
                 f = open(tfpath)
                 print f.read()
                 f.close()
         finally:
             os.unlink(tfpath) #< always clean up
     sys.exit(0)
 
 
 
 ############################
 ## Actual analysis runs
 
 
 
 ## We allow comma-separated lists of analysis names -- normalise the list here
 newanas = []
 for a in opts.ANALYSES:
     if "," in a:
         newanas += a.split(",")
     elif "@" in a: #< NB. this bans combination of ana lists and keywords in a single arg
         temp = getAnalysesByKeyword(all_analyses, a)
         for i in temp:
             newanas.append(i)
     else:
         newanas.append(a)
 opts.ANALYSES = newanas
 
 
 ## Parse supplied cross-section
 if opts.CROSS_SECTION is not None:
     xsstr = opts.CROSS_SECTION
     try:
         opts.CROSS_SECTION = float(xsstr)
     except:
         import re
         suffmatch = re.search(r"[^\d.]", xsstr)
         if not suffmatch:
             raise ValueError("Bad cross-section string: %s" % xsstr)
         factor = base = None
         suffstart = suffmatch.start()
         if suffstart != -1:
             base = xsstr[:suffstart]
             suffix = xsstr[suffstart:].lower()
             if suffix == "mb":
                 factor = 1e+9
             elif suffix == "mub":
                 factor = 1e+6
             elif suffix == "nb":
                 factor = 1e+3
             elif suffix == "pb":
                 factor = 1
             elif suffix == "fb":
                 factor = 1e-3
             elif suffix == "ab":
                 factor = 1e-6
         if factor is None or base is None:
             raise ValueError("Bad cross-section string: %s" % xsstr)
         xs = float(base) * factor
         opts.CROSS_SECTION = xs
 
 
 ## Print the available CLI options!
 #if opts.LIST_OPTIONS:
 #    for o in parser.option_list:
 #        print o.get_opt_string()
 #    sys.exit(0)
 
 
 ## Set up signal handling
 RECVD_KILL_SIGNAL = None
 def handleKillSignal(signum, frame):
     "Declare us as having been signalled, and return to default handling behaviour"
     global RECVD_KILL_SIGNAL
     logging.critical("Signal handler called with signal " + str(signum))
     RECVD_KILL_SIGNAL = signum
     signal.signal(signum, signal.SIG_DFL)
 ## Signals to handle
 signal.signal(signal.SIGTERM, handleKillSignal);
 signal.signal(signal.SIGHUP,  handleKillSignal);
 signal.signal(signal.SIGINT,  handleKillSignal);
 signal.signal(signal.SIGUSR1, handleKillSignal);
 signal.signal(signal.SIGUSR2, handleKillSignal);
 try:
     signal.signal(signal.SIGXCPU, handleKillSignal);
 except:
     pass
 
 
 
 ## Identify HepMC files/streams
 ## TODO: check readability, deal with stdin
 if len(args) > 0:
     HEPMCFILES = args
 else:
     HEPMCFILES = ["-"]
 
 
 ## Event number logging
 def logNEvt(n, starttime, maxevtnum):
     if n % 10000 == 0:
         nevtloglevel = logging.CRITICAL
     elif n % 1000 == 0:
         nevtloglevel = logging.WARNING
     elif n % 100 == 0:
         nevtloglevel = logging.INFO
     else:
         nevtloglevel = logging.DEBUG
     currenttime = datetime.datetime.now().replace(microsecond=0)
     elapsedtime = currenttime - starttime
     logging.log(nevtloglevel, "Event %d (%s elapsed)" % (n, str(elapsedtime)))
     # if maxevtnum is None:
     #     logging.log(nevtloglevel, "Event %d (%s elapsed)" % (n, str(elapsedtime)))
     # else:
     #     remainingtime = (maxevtnum-n) * elapsedtime.total_seconds() / float(n)
     #     eta = time.strftime("%a %b %d %H:%M", datetime.localtime(currenttime + remainingtime))
     #     logging.log(nevtloglevel, "Event %d (%d s elapsed / %d s left) -> ETA: %s" %
     #                 (n, elapsedtime, remainingtime, eta))
 
 
 ## Do some checks on output histo file, before we stat the event loop
 histo_parentdir = os.path.dirname(os.path.abspath(opts.HISTOFILE))
 if not os.path.exists(histo_parentdir):
   logging.error('Parent path of output histogram file does not exist: %s\nExiting.' % histo_parentdir)
   sys.exit(4)
 if not os.access(histo_parentdir,os.W_OK):
   logging.error('Insufficient permissions to write output histogram file to directory %s\nExiting.' % histo_parentdir)
   sys.exit(4)
 
 
 ## Set up analysis handler
 RUNNAME = opts.RUN_NAME or ""
 ah = rivet.AnalysisHandler(RUNNAME)
 ah.setIgnoreBeams(opts.IGNORE_BEAMS)
 for a in opts.ANALYSES:
     ## Print warning message and exit if not a valid analysis name
     if not a in all_analyses:
         logging.warning("'%s' is not a known Rivet analysis! Do you need to set RIVET_ANALYSIS_PATH or use the --pwd switch?\n" % a)
         # TODO: lay out more neatly, or even try for a "did you mean XXXX?" heuristic?
         logging.warning("There are %d currently available analyses:\n" % len(all_analyses) + ", ".join(all_analyses))
         sys.exit(1)
     logging.debug("Adding analysis '%s'" % a)
     ah.addAnalysis(a)
 
 
 if opts.SHOW_BIBTEX:
     bibs = []
     for aname in sorted(ah.analysisNames()):
         ana = rivet.AnalysisLoader.getAnalysis(aname)
         bibs.append("% " + aname + "\n" + ana.bibTeX())
     if bibs:
         print "\nBibTeX for used Rivet analyses:\n"
         print "% --------------------------\n"
         print "\n\n".join(bibs) + "\n"
         print "% --------------------------\n"
 
 
 ## Read and process events
 run = rivet.Run(ah)
 if opts.CROSS_SECTION is not None:
     logging.info("User-supplied cross-section = %e pb" % opts.CROSS_SECTION)
     run.setCrossSection(opts.CROSS_SECTION)
 if opts.LIST_USED_ANALYSES is not None:
     run.setListAnalyses(opts.LIST_USED_ANALYSES)
 
 ## Print platform type
 import platform
 starttime = datetime.datetime.now().replace(microsecond=0)
 logging.info("Rivet %s running on machine %s (%s) at %s" % \
              (rivet.version(), platform.node(), platform.machine(), str(starttime)))
 
 
 def min_nonnull(a, b):
     "A version of min which considers None to always be greater than a real number"
     rtn = min(a, b)
     if rtn is not None:
         return rtn
     if a is not None:
         return a
     return b
 
 
 ## Set up an event timeout handler
 class TimeoutException(Exception):
     pass
 if opts.EVENT_TIMEOUT or opts.RUN_TIMEOUT:
     def evttimeouthandler(signum, frame):
         logging.warn("It has taken more than %d secs to get an event! Is the input event stream working?" %
                      min_nonnull(opts.EVENT_TIMEOUT, opts.RUN_TIMEOUT))
         raise TimeoutException("Event timeout")
     signal.signal(signal.SIGALRM, evttimeouthandler)
 
 
 ## Init run based on one event
 hepmcfile = HEPMCFILES[0]
 ## Apply a file-level weight derived from the filename
 hepmcfileweight = 1.0
 if ":" in hepmcfile:
     hepmcfile, hepmcfileweight = hepmcfile.rsplit(":", 1)
     hepmcfileweight = float(hepmcfileweight)
 try:
     if opts.EVENT_TIMEOUT or opts.RUN_TIMEOUT:
         signal.alarm(min_nonnull(opts.EVENT_TIMEOUT, opts.RUN_TIMEOUT))
     init_ok = run.init(hepmcfile, hepmcfileweight)
     signal.alarm(0)
     if not init_ok:
         logging.error("Failed to initialise using event file '%s'... exiting" % hepmcfile)
         sys.exit(2)
 except TimeoutException, te:
     logging.error("Timeout in initialisation from event file '%s'... exiting" % hepmcfile)
     sys.exit(3)
 
 
 ## Event loop
 evtnum = 0
 for fileidx, hepmcfile in enumerate(HEPMCFILES):
     ## Apply a file-level weight derived from the filename
     hepmcfileweight = 1.0
     if ":" in hepmcfile:
         hepmcfile, hepmcfileweight = hepmcfile.rsplit(":", 1)
         hepmcfileweight = float(hepmcfileweight)
 
     ## Open next HepMC file (NB. this doesn't apply to the first file: it was already used for the run init)
     if fileidx > 0:
         run.openFile(hepmcfile, hepmcfileweight)
         if not run.readEvent():
             logging.warning("Could not read events from '%s'" % hepmcfile)
             continue
 
     ## Announce new file
     msg = "Reading events from '%s'" % hepmcfile
     if hepmcfileweight != 1.0:
         msg += " (file weight = %e)" % hepmcfileweight
     logging.info(msg)
 
     ## The event loop
     while opts.MAXEVTNUM is None or evtnum-opts.EVTSKIPNUM < opts.MAXEVTNUM:
         evtnum += 1
 
         ## Optional event skipping
         if evtnum <= opts.EVTSKIPNUM:
             logging.debug("Skipping event #%i" % evtnum)
             run.skipEvent();
             continue
 
         ## Only log the event number once we're actually processing
         logNEvt(evtnum, starttime, opts.MAXEVTNUM)
 
         ## Process this event
         processed_ok = run.processEvent()
         if not processed_ok:
             logging.warn("Event processing failed for evt #%i!" % evtnum)
             break
 
         ## Set flag to exit event loop if run timeout exceeded
         if opts.RUN_TIMEOUT and (time.time() - starttime) > opts.RUN_TIMEOUT:
             logging.warning("Run timeout of %d secs exceeded... exiting gracefully" % opts.RUN_TIMEOUT)
             RECVD_KILL_SIGNAL = True
 
         ## Exit the loop if signalled
         if RECVD_KILL_SIGNAL is not None:
             break
 
         ## Read next event (with timeout handling if requested)
         try:
             if opts.EVENT_TIMEOUT:
                 signal.alarm(opts.EVENT_TIMEOUT)
             read_ok = run.readEvent()
             signal.alarm(0)
             if not read_ok:
                 break
         except TimeoutException, te:
             logging.error("Timeout in reading event from '%s'... exiting" % hepmcfile)
             sys.exit(3)
 
         ## Write a histo file snapshot if appropriate
         if opts.HISTO_WRITE_INTERVAL is not None and opts.HISTO_WRITE_INTERVAL > 0:
             if evtnum % opts.HISTO_WRITE_INTERVAL == 0:
                 ah.writeData(opts.HISTOFILE)
 
 
 ## Print end-of-loop messages
 loopendtime = datetime.datetime.now().replace(microsecond=0)
 logging.info("Finished event loop at %s" % str(loopendtime))
 logging.info("Cross-section = %e pb" % ah.crossSection())
 print
 
 
 ## Finalize and write out data file
 run.finalize()
 if opts.WRITE_DATA:
     ah.writeData(opts.HISTOFILE)
 print
 endtime = datetime.datetime.now().replace(microsecond=0)
 logging.info("Rivet run completed at %s, time elapsed = %s" % (str(endtime), str(endtime-starttime)))
 print
 logging.info("Histograms written to %s" % os.path.abspath(opts.HISTOFILE))
diff --git a/bin/rivet-buildplugin.in b/bin/rivet-buildplugin.in
--- a/bin/rivet-buildplugin.in
+++ b/bin/rivet-buildplugin.in
@@ -1,150 +1,302 @@
 #!/usr/bin/env bash
 ## -*- sh -*-
 ## @configure_input@
 
 ## Get program name
 PROG=$(basename $0)
 
-## Print help message
-tmp=$(echo "$*" | egrep -- '--\<help\>|-\<h\>')
-if test -n "$tmp"; then # || test $# -lt 1
-    echo "$PROG: compilation helper for Rivet analysis plugins"
-    echo
-    echo "Usage: $PROG [<libname>] <source1> [<source2> [compiler_flags] ...]"
-    echo
-    echo "<libname> can be a path, provided the filename is of the form 'Rivet*.so'"
-    echo "If <libname> is not specified, the default name is 'RivetAnalysis.so'."
-    echo
-    echo "To make special build variations you can add appropriate compiler flags"
-    echo "to the arguments and these will be passed directly to the compiler. For"
-    echo "example, for a debug build of your plugin library, add '-g', and for a"
-    echo "32 bit build on a 64 bit system add '-m32'."
-    echo
-    echo "Options:"
-    echo "  -h | --help: display this help message"
-    echo "  --with-root: add ROOT link options (requires root-config on system)"
-    echo "  --cmd|--dry-run: just print the generated compiler command, do not execute"
-    echo
-    echo "TODO:"
-    echo "  * is there a GCC option to parallelise the single-command compilation?"
-    test -n "$tmp"
-    exit $?
+## Default value for num_jobs is all available cores
+let num_jobs=$(getconf _NPROCESSORS_ONLN)
+
+function usage {
+	cat <<-EOF
+		$PROG:
+		Compile a Rivet analysis plugin library from one or more sources
+
+		Usage: $PROG [options] [libname] source1 [...] [compiler_flags]
+
+		<libname> can be a path, provided the filename is of the form 'Rivet*.so'
+		If <libname> is not specified, the default name is 'RivetAnalysis.so'.
+
+		To make special build variations you can add appropriate compiler flags
+		to the arguments and these will be passed directly to the compiler. For
+		example, for a debug build of your plugin library, add '-g', and for a
+		32 bit build on a 64 bit system add '-m32'.
+
+		Options:
+		  -h | --help:      display this help message
+		  -j NUM            number of parallel compile jobs [$num_jobs]
+		  -r | --with-root: add ROOT link options (requires root-config on system)
+		  -n | --cmd | --dry-run:
+		                    just print the generated commands, do not execute
+		  -k | --keep:      keep intermediate files
+		  -v | --verbose:   write out debug info
+
+	EOF
+}
+
+
+##################
+## Option handling
+# http://www.bahmanm.com/blogs/command-line-options-how-to-parse-in-bash-using-getopt
+
+## Translate long options to short
+# https://stackoverflow.com/a/5255468
+args=()
+for arg
+do
+	case "$arg" in
+	   # translate our long options
+	   --help            ) args+=("-h");;
+	   --with-root       ) args+=("-r");;
+	   --cmd | --dry-run ) args+=("-n");;
+	   --keep            ) args+=("-k");;
+	   --verbose         ) args+=("-v");;
+	   # pass through anything else
+	   *                 ) args+=("$arg");;
+	esac
+done
+## Reset the translated args
+set -- "${args[@]}"
+
+## Now we can process with getopt
+while getopts ":hj:rnkv" opt; do
+	case $opt in
+		h)  usage; exit 0 ;;
+		j)  num_jobs=$OPTARG ;;
+		r)  with_root=yes ;;
+		n)  only_show=yes ;;
+		k)  keep_tmps=yes ;;
+		v)  debug=yes ;;
+		\?) echo "Unknown option -$OPTARG" >&2; exit 1 ;;
+		:)  echo "Option -$OPTARG requires an argument" >&2; exit 1 ;;
+	esac
+done
+## Remove options
+shift $((OPTIND-1))
+
+## Check num_jobs is a number
+if [[ ! $num_jobs -eq $num_jobs ]]; then
+	echo "Unknown argument to -j" >&2; exit 1
+fi
+if [[ $num_jobs -lt 1 ]]; then
+	echo "Number of jobs must be positive" >&2; exit 1
 fi
 
-## These variables need to exist
+#echo "$with_root"
+#echo "$only_show"
+#echo "$@"
+
+## Need some args left at this point
+if [[ $# -lt 1 ]]; then
+	usage >&2
+	exit 1
+fi
+
+## Get and check the target library name
+libname="$1"
+match1=$(basename "$libname" | egrep '^.*\.so')
+match2=$(basename "$libname" | egrep '^Rivet.*\.so')
+if test -n "$match1"; then
+	if test -z "$match2"; then
+		echo "Library name '$libname' does not have the required 'Rivet*.so' name pattern" >&2
+		exit 1
+	fi
+	## If we're using the first arg as the library name, shift it off the positional list
+	shift
+else
+	if [[ -z $only_show ]]; then
+		echo "Using default library name 'RivetAnalysis.so'"
+	fi
+	libname="RivetAnalysis.so"
+fi
+
+## Again need some args left at this point
+if [[ $# -lt 1 ]]; then
+	usage >&2
+	exit 1
+fi
+
+
+##################
+## Now assemble the build flags
+
+
+## These variables need to exist, may be used in later substitutions
 ## Note no use of $DESTDIR... we ignore it so that destdir can be used
 ## for temp installs later copied to /
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-datarootdir=@datarootdir@
+prefix="@prefix@"
+exec_prefix="@exec_prefix@"
+datarootdir="@datarootdir@"
 
 ## Work out shared library build flags by platform
-shared_flags=
-SWVERS=$(which sw_vers 2> /dev/null)
-if test "$SWVERS" && test -x "$SWVERS"; then
+if [[ $(uname) == "Darwin" ]]; then
   ## Mac OS X
   shared_flags="-undefined dynamic_lookup -bundle"
 else
   ## Unix
   shared_flags="-shared -fPIC"
 fi
 
 ## Get Rivet system C++ compiler (fall back to $CXX and then g++ if needed)
 mycxx=g++
 rivetcxx=$(which $(echo "@RIVETCXX@" | awk '{print $1}') 2> /dev/null)
 abscxx=$(which "$CXX" 2> /dev/null)
 if [[ -x "$rivetcxx" ]]; then
-    mycxx="@CXX@"
+	mycxx="@CXX@"
 elif [[ -x "$abscxx" ]]; then
-    mycxx=$CXX
+	mycxx="$CXX"
 fi
 
 ## Get Rivet system C++ compiler flags
-mycxxflags=""
 if [[ -n "@AM_CXXFLAGS@" ]]; then
-    mycxxflags="@AM_CXXFLAGS@"
+	mycxxflags="@AM_CXXFLAGS@"
 fi
 if [[ -n "@RIVETCXXFLAGS@" ]]; then
-    mycxxflags="$mycxxflags @RIVETCXXFLAGS@"
+	mycxxflags="$mycxxflags @RIVETCXXFLAGS@"
 fi
 
 ## Get Rivet system C preprocessor flags (duplicating that in rivet-config.in)
-mycppflags=""
-prefix="@prefix@"
-exec_prefix="@exec_prefix@"
-irivet="@includedir@"
+if [[ -n "$RIVET_BUILDPLUGIN_BEFORE_INSTALL" ]]; then
+    irivet="@top_srcdir@/include"
+else
+    irivet="@includedir@"
+fi
 test -n "$irivet" && mycppflags="$mycppflags -I${irivet}"
 ihepmc="@HEPMCINCPATH@"
 test -n "$ihepmc" && mycppflags="$mycppflags -I${ihepmc}"
 iyoda="@YODAINCPATH@"
 test -n "$iyoda" && mycppflags="$mycppflags -I${iyoda}"
 ifastjet="@FASTJETINCPATH@"
 test -n "$ifastjet" && mycppflags="$mycppflags -I${ifastjet}"
 # igsl="@GSLINCPATH@"
 # test -n "$igsl" && mycppflags="$mycppflags -I${igsl}"
 # iboost="@BOOST_CPPFLAGS@"
 # test -n "$iboost" && mycppflags="$mycppflags ${iboost}"
 
-
 ## Get Rivet system linker flags (duplicating that in rivet-config.in)
 myldflags=""
-lrivet="@libdir@"
+if [[ -n "$RIVET_BUILDPLUGIN_BEFORE_INSTALL" ]]; then
+    lrivet="@top_builddir@/src/.libs"
+else
+    lrivet="@libdir@"
+fi
 test -n "$lrivet" && myldflags="$myldflags -L${lrivet}"
 lhepmc="@HEPMCLIBPATH@"
 test -n "$lhepmc" && myldflags="$myldflags -L${lhepmc}"
 lyoda="@YODALIBPATH@"
 test -n "$lyoda" && myldflags="$myldflags -L${lyoda}"
 lfastjet="@FASTJETCONFIGLIBADD@"
 test -n "$lfastjet" && myldflags="$myldflags ${lfastjet}"
 ## Detect whether the linker accepts the --no-as-needed flag and prepend the linker flag with it if possible
 if (cd /tmp && echo -e 'int main() { return 0; }' > $$.cc; $mycxx -Wl,--no-as-needed $$.cc -o $$ 2> /dev/null); then
   myldflags="-Wl,--no-as-needed $myldflags"
 fi
 
-
-## Link against ROOT if requested
-with_root=$(echo "$*" | egrep -- '--\<with-root\>')
-# echo $with_root
-tmp=$(echo "$*" | sed -e 's/--with-root//g')
-
-## Just show the compiler command rather than execute it, if requested
-only_show=$(echo "$tmp" | egrep -- '--\<cmd\>|--\<dry-run\>')
-# echo $only_show
-tmp=$(echo "$tmp" | sed -e 's/--cmd//g' -e 's/--dry-run//g')
-
-## Reset positional params now that flags have been removed
-set -- $tmp #< NB. protection against empty $tmp arg!!
-
-## Get and check the library name
-libname=$1
-match1=$(basename "$libname" | egrep '^.*\.so')
-match2=$(basename "$libname" | egrep '^Rivet.*\.so')
-if test -n "$match1"; then
-    if test -z "$match2"; then
-        echo "Library name '$libname' does not have the required 'Rivet*.so' name pattern" 1>&2
-        exit 1
-    fi
-    ## If we're using the first arg as the library name, shift it off the positional list
-    shift
-else
-    if [[ -z $only_show ]]; then
-        echo "Using default library name 'RivetAnalysis.so'"
-    fi
-    libname="RivetAnalysis.so"
+## Get ROOT flags if needed
+if [[ -n $with_root ]]; then
+	rootcxxflags=$(root-config --cflags 2> /dev/null)
+	rootldflags=$(root-config --libs 2> /dev/null)
 fi
 
 
-## Get the source files (and more flags)
-sources_and_flags="$* -lRivet"
-if [[ -n $with_root ]]; then
-    root_flags=$(root-config --libs --cflags 2> /dev/null)
-    # echo $root_flags
-    sources_and_flags="$root_flags $sources_and_flags"
+##################
+## Assemble and run build machinery
+
+## Split sources into buckets, one for each core
+let idx=1
+sources=""
+for src in "$@"
+do
+	if [[ -s "$src" ]]; then
+        sources="$sources $src"
+		buckets[$idx]="${buckets[$idx]} $src"
+		let idx=(idx%$num_jobs)+1
+	else
+		if [[ ${src:0:1} == "-" ]]; then
+			## Found a user option
+			usercxxflags="$usercxxflags $src"
+		else
+			echo "Warning: $src not found" >&2
+		fi
+	fi
+done
+
+## May be less than num_jobs
+let num_buckets=${#buckets[@]}
+
+if [[ $num_buckets -lt 1 ]]; then
+	echo "Error: no source files found" >&2
+	exit 2
 fi
 
-## Build
-cmd="$mycxx -o \"$libname\" $shared_flags $mycppflags $mycxxflags $myldflags $sources_and_flags"
-echo $cmd
+## Loop over buckets
+for idx in $(seq 1 $num_buckets); do
+
+	# DO NOT SIMPLIFY, the OS X mktemp can't deal with suffixes directly
+	tmpfile="$(mktemp tmp.XXXXXXXX)"
+	mv "$tmpfile" "$tmpfile.cc"
+	tmpfile="$tmpfile.cc"
+
+	for i in $(echo ${buckets[$idx]}); do #< find the real way to do this!
+		echo "#line 1 \"$i\"" >> "$tmpfile"
+		cat "$i" >> "$tmpfile"
+	done
+
+	if [[ -s "$tmpfile" ]]; then
+		srcnames[$idx]="$tmpfile"
+	fi
+done
+objnames=("${srcnames[@]/.cc/.o}")
+
+if [[ -z "$debug" ]]; then silencer="@"; fi
+tmpmakefile=$(mktemp Makefile.tmp.XXXXXXXXXX)
+cat > "$tmpmakefile" <<EOF
+RCXX = $mycxx
+
+RCXXFLAGS = $shared_flags $mycxxflags $rootcxxflags
+
+RCPPFLAGS = $mycppflags
+
+RLDFLAGS = $myldflags $rootldflags
+
+RLIBS = -lRivet
+
+RUSERFLAGS = $usercxxflags
+
+$libname : ${objnames[@]}
+	${silencer}\$(RCXX) \$^  \$(RCXXFLAGS) \$(CXXFLAGS) \$(LDFLAGS) \$(RLDFLAGS) \$(RLIBS) \$(LIBS) -o \$@ \$(RUSERFLAGS)
+
+%.o : %.cc
+	${silencer}\$(RCXX) \$(RCXXFLAGS) \$(CXXFLAGS) \$(CPPFLAGS) \$(RCPPFLAGS) -c -o \$@ \$^ \$(RUSERFLAGS)
+EOF
+
+
+## Declare a cleanup command, to be run on exit or abort
+if [[ -z $keep_tmps ]]; then
+    function _cleanup() {
+	    rm -f "${srcnames[@]}" "${objnames[@]}" "$tmpmakefile"
+    }
+    trap _cleanup EXIT
+fi
+
+
+## Show effective build command and run the (split) compilation
+effcmd="$mycxx -o \"$libname\" $shared_flags $mycppflags $CPPFLAGS $mycxxflags $rootcxxflags $CXXFLAGS $myldflags $rootldflags -lRivet $LDFLAGS $LIBS $sources $usercxxflags"
+echo "$effcmd"
+if [[ -n $debug ]]; then
+    echo "Contents of generated Makefile ($tmpmakefile):"
+	echo "====="
+	cat "$tmpmakefile"
+    echo
+fi
+
+## If we're in a chain of make calls,  make's jobserver tells us how many jobs
+## to run via MAKEFLAGS. We can't specify -j explicitly in that case
+if [[ -z ${MAKEFLAGS} ]]; then
+    jflag="-j ${num_jobs}"
+fi
+
 if [[ -z $only_show ]]; then
-    eval $cmd
+	make ${jflag} -f "$tmpmakefile" || exit 3
 fi
diff --git a/bin/rivet-cmphistos b/bin/rivet-cmphistos
--- a/bin/rivet-cmphistos
+++ b/bin/rivet-cmphistos
@@ -1,474 +1,474 @@
 #! /usr/bin/env python
 
 """\
 %prog - generate histogram comparison plots
 
 USAGE:
  %prog [options] yodafile1[:'PlotOption1=Value':'PlotOption2=Value':...] [path/to/yodafile2 ...] [PLOT:Key1=Val1:...]
 
 where the plot options are described in the make-plots manual in the HISTOGRAM
 section.
 
 ENVIRONMENT:
  * RIVET_ANALYSIS_PATH: list of paths to be searched for plugin
      analysis libraries at runtime
  * RIVET_DATA_PATH: list of paths to be searched for data files
 """
 
 import rivet, yoda, sys, os
 rivet.util.check_python_version()
 rivet.util.set_process_name(os.path.basename(__file__))
 
 
 class Plot(dict):
     "A tiny Plot object to help writing out the head in the .dat file"
     def __repr__(self):
         return "# BEGIN PLOT\n" + "\n".join("%s=%s" % (k,v) for k,v in self.iteritems()) + "\n# END PLOT\n\n"
 
 
 def sanitiseString(s):
     #s = s.replace('_','\\_')
     #s = s.replace('^','\\^{}')
     #s = s.replace('$','\\$')
     s = s.replace('#','\\#')
     s = s.replace('%','\\%')
     return s
 
 
 def getCommandLineOptions():
     "Parse command line options"
     from optparse import OptionParser, OptionGroup
     parser = OptionParser(usage=__doc__)
 
     parser.add_option('-o', '--outdir', dest='OUTDIR',
                       default='.', help='write data files into this directory')
     parser.add_option("--hier-out", action="store_true", dest="HIER_OUTPUT", default=False,
                       help="write output dat files into a directory hierarchy which matches the analysis paths")
     parser.add_option('--plotinfodir', dest='PLOTINFODIRS', action='append',
                       default=['.'], help='directory which may contain plot header information (in addition '
                       'to standard Rivet search paths)')
     parser.add_option("--no-rivet-refs", dest="RIVETREFS", action="store_false",
                       default=True, help="don't use Rivet reference data files")
     # parser.add_option("--refid", dest="REF_ID",
     #                   default="REF", help="ID of reference data set (file path for non-REF data)")
     parser.add_option("--reftitle", dest="REFTITLE",
                         default='Data', help="Reference data legend entry")
     parser.add_option("--pwd", dest="PATH_PWD", action="store_true", default=False,
                       help="append the current directory (pwd) to the analysis/data search paths (cf. $RIVET_ANALYSIS/DATA_PATH)")
     parser.add_option("-v", "--verbose", dest="VERBOSE", action="store_true", default=False,
                       help="produce debug output to the terminal")
 
     stygroup = OptionGroup(parser, "Plot style")
     stygroup.add_option("--linear", action="store_true", dest="LINEAR",
                         default=False, help="plot with linear scale")
-    stygroup.add_option("--mc-errs", action="store_true", dest="MC_ERRS",
+    stygroup.add_option("--errs", "--mc-errs", action="store_true", dest="MC_ERRS",
                         default=False, help="show vertical error bars on the MC lines")
     stygroup.add_option("--no-ratio", action="store_false", dest="RATIO",
                         default=True, help="disable the ratio plot")
     stygroup.add_option("--rel-ratio", action="store_true", dest="RATIO_DEVIATION",
                         default=False, help="show the ratio plots scaled to the ref error")
     stygroup.add_option("--no-plottitle", action="store_true", dest="NOPLOTTITLE",
                         default=False, help="don't show the plot title on the plot "
                         "(useful when the plot description should only be given in a caption)")
     stygroup.add_option("--style", dest="STYLE", default="default",
                         help="change plotting style: default|bw|talk")
     stygroup.add_option("-c", "--config", dest="CONFIGFILES", action="append", default=["~/.make-plots"],
                         help="additional plot config file(s). Settings will be included in the output configuration.")
     parser.add_option_group(stygroup)
 
     selgroup = OptionGroup(parser, "Selective plotting")
     # selgroup.add_option("--show-single", dest="SHOW_SINGLE", choices=("no", "ref", "mc", "all"),
     #                     default="mc", help="control if a plot file is made if there is only one dataset to be plotted "
     #                     "[default=%default]. If the value is 'no', single plots are always skipped, for 'ref' and 'mc', "
     #                     "the plot will be written only if the single plot is a reference plot or an MC "
     #                     "plot respectively, and 'all' will always create single plot files.\n The 'ref' and 'all' values "
     #                     "should be used with great care, as they will also write out plot files for all reference "
     #                     "histograms without MC traces: combined with the -R/--rivet-refs flag, this is a great way to "
     #                     "write out several thousand irrelevant reference data histograms!")
     # selgroup.add_option("--show-mc-only", "--all", action="store_true", dest="SHOW_IF_MC_ONLY",
     #                     default=False, help="make a plot file even if there is only one dataset to be plotted and "
     #                     "it is an MC one. Deprecated and will be removed: use --show-single instead, which overrides this.")
     # # selgroup.add_option("-l", "--histogram-list", dest="HISTOGRAMLIST",
     # #                     default=None, help="specify a file containing a list of histograms to plot, in the format "
     # #                     "/ANALYSIS_ID/histoname, one per line, e.g. '/DELPHI_1996_S3430090/d01-x01-y01'.")
     selgroup.add_option("-m", "--match", action="append",
                         help="only write out histograms whose $path/$name string matches these regexes. The argument "
                         "may also be a text file.",
                         dest="PATHPATTERNS")
     selgroup.add_option("-M", "--unmatch", action="append",
                         help="exclude histograms whose $path/$name string matches these regexes",
                         dest="PATHUNPATTERNS")
     parser.add_option_group(selgroup)
 
     return parser
 
 
 def getHistos(filelist):
     """Loop over all input files. Only use the first occurrence of any REF-histogram
     and the first occurrence in each MC file for every MC-histogram."""
     refhistos, mchistos = {}, {}
     for infile in filelist:
         mchistos.setdefault(infile, {})
         analysisobjects = yoda.read(infile, patterns=opts.PATHPATTERNS, unpatterns=opts.PATHUNPATTERNS)
         #print analysisobjects
         for path, ao in analysisobjects.iteritems():
             ## We can't plot non-histograms yet
             # TODO: support counter plotting with a faked x (or y) position and forced plot width/height
-            if ao.type not in ("Histo1D", "Histo2D", "Profile1D", "Profile2D", "Scatter2D", "Scatter3D"):
+            if ao.type not in ("Counter", "Histo1D", "Histo2D", "Profile1D", "Profile2D", "Scatter1D", "Scatter2D", "Scatter3D"):
                 continue
 
             ## Make a path object and ensure the path is in standard form
             try:
                 aop = rivet.AOPath(path)
             except Exception, e:
                 #print e
                 print "Found analysis object with non-standard path structure:", path, "... skipping"
                 continue
 
             ## We don't plot data objects with path components hidden by an underscore prefix
             if aop.istmp():
                 continue
 
             ## Add it to the ref or mc paths, if this path isn't already known
             basepath = aop.basepath(keepref=False)
             if aop.isref() and not refhistos.has_key(basepath):
                 ao.path = aop.varpath(keepref=False, defaultvarid=0)
                 refhistos[basepath] = ao
             else: #if not mchistos[infile].has_key(basepath):
                 mchistos[infile].setdefault(basepath, {})[aop.varid(0)] = ao
 
     return refhistos, mchistos
 
 
 def getRivetRefData(anas=None):
     "Find all Rivet reference data files"
     refhistos = {}
     rivet_data_dirs = rivet.getAnalysisRefPaths()
     dirlist = []
     for d in rivet_data_dirs:
         if anas is None:
             import glob
             dirlist.append(glob.glob(os.path.join(d, '*.yoda')))
         else:
             dirlist.append([os.path.join(d, a+'.yoda') for a in anas])
     for filelist in dirlist:
         # TODO: delegate to getHistos?
         for infile in filelist:
             analysisobjects = yoda.read(infile, patterns=opts.PATHPATTERNS, unpatterns=opts.PATHUNPATTERNS)
             for path, ao in analysisobjects.iteritems():
                 aop = rivet.AOPath(ao.path)
                 if aop.isref():
                     ao.path = aop.basepath(keepref=False)
                     refhistos[ao.path] = ao
     return refhistos
 
 
 def parseArgs(args):
     """Look at the argument list and split it at colons, in order to separate
     the file names from the plotting options. Store the file names and
     file specific plotting options."""
     filelist = []
     plotoptions = {}
     for a in args:
         asplit = a.split(':')
         path = asplit[0]
         filelist.append(path)
         plotoptions[path] = []
         has_title = False
         for i in xrange(1, len(asplit)):
             ## Add 'Title' if there is no = sign before math mode
             if '=' not in asplit[i] or ('$' in asplit[i] and asplit[i].index('$') < asplit[i].index('=')):
                 asplit[i] = 'Title=%s' % asplit[i]
             if asplit[i].startswith('Title='):
                 has_title = True
             plotoptions[path].append(asplit[i])
         if path != "PLOT" and not has_title:
             plotoptions[path].append('Title=%s' % sanitiseString(os.path.basename( os.path.splitext(path)[0] )) )
     return filelist, plotoptions
 
 
 def setStyle(ao, istyle, variation=False):
     """Set default plot styles (color and line width) colors borrowed from Google Ngrams"""
     # LINECOLORS = ['{[HTML]{EE3311}}',  # red (Google uses 'DC3912')
     #               '{[HTML]{3366FF}}',  # blue
     #               '{[HTML]{109618}}',  # green
     #               '{[HTML]{FF9900}}',  # orange
     #               '{[HTML]{990099}}']  # lilac
     LINECOLORS = ['red', 'blue', 'green', 'orange', 'lilac']
     LINESTYLES = ['solid', 'dashed', 'dashdotted', 'dotted']
 
     if opts.STYLE == 'talk':
         ao.setAnnotation('LineWidth', '1pt')
     if opts.STYLE == 'bw':
         LINECOLORS = ['black!90',
                       'black!50',
                       'black!30']
 
     jc = istyle % len(LINECOLORS)
     c = LINECOLORS[jc]
     js = (istyle / len(LINECOLORS)) % len(LINESTYLES)
     s = LINESTYLES[js]
 
     ## If plotting a variation (i.e. band), fade the colour
     if variation:
         c += "!30"
 
     ao.setAnnotation('LineStyle', '%s' % s)
     ao.setAnnotation('LineColor', '%s' % c)
 
 
 def setOptions(ao, options):
     "Set arbitrary annotations"
     for opt in options:
         key, val = opt.split('=', 1)
         ao.setAnnotation(key, val)
 
 
 # TODO: move to rivet.utils
 def mkoutdir(outdir):
     "Function to make output directories"
     if not os.path.exists(outdir):
         try:
             os.makedirs(outdir)
         except:
             msg = "Can't make output directory '%s'" % outdir
             raise Exception(msg)
     if not os.access(outdir, os.W_OK):
         msg = "Can't write to output directory '%s'" % outdir
         raise Exception(msg)
 
 
 def mkOutput(hpath, aos, plot=None, special=None):
     """
     Make the .dat file string. We can't use "yoda.writeFLAT(anaobjects, 'foobar.dat')"
     because the PLOT and SPECIAL blocks don't have a corresponding analysis object.
     """
     output = ''
 
     if plot is not None:
         output += str(plot)
 
     if special is not None:
         output += "\n"
         output += "# BEGIN SPECIAL %s\n" % hpath
         output += special
         output += "# END SPECIAL\n\n"
 
     from cStringIO import StringIO
     sio = StringIO()
     yoda.writeFLAT(aos, sio)
     output += sio.getvalue()
 
     return output
 
 
 def writeOutput(output, h):
     "Choose output file name and dir"
     if opts.HIER_OUTPUT:
         hparts = h.strip("/").split("/", 1)
         ana = "_".join(hparts[:-1]) if len(hparts) > 1 else "ANALYSIS"
         outdir = os.path.join(opts.OUTDIR, ana)
         outfile = '%s.dat' % hparts[-1].replace("/", "_")
     else:
         hparts = h.strip("/").split("/")
         outdir = opts.OUTDIR
         outfile = '%s.dat' % "_".join(hparts)
     mkoutdir(outdir)
     outfilepath = os.path.join(outdir, outfile)
     f = open(outfilepath, 'w')
     f.write(output)
     f.close()
 
 
 #--------------------------------------------------------------------------------------------
 
 
 if __name__ == '__main__':
 
     ## Command line parsing
     parser = getCommandLineOptions()
     opts, args = parser.parse_args()
 
     ## Add pwd to search paths
     if opts.PATH_PWD:
         rivet.addAnalysisLibPath(os.path.abspath("."))
         rivet.addAnalysisDataPath(os.path.abspath("."))
 
     ## Split the input file names and the associated plotting options
     ## given on the command line into two separate lists
     filelist, plotoptions = parseArgs(args)
     ## Remove the PLOT dummy file from the file list
     if "PLOT" in filelist:
         filelist.remove("PLOT")
 
     ## Check that the files exist
     for f in filelist:
         if not os.access(f, os.R_OK):
             print "Error: cannot read from %s" % f
             sys.exit(1)
 
     ## Read the .plot files
     plotdirs = opts.PLOTINFODIRS + [os.path.abspath(os.path.dirname(f)) for f in filelist]
     plotparser = rivet.mkStdPlotParser(plotdirs, opts.CONFIGFILES)
 
     ## Create a list of all histograms to be plotted, and identify if they are 2D histos (which need special plotting)
     try:
         refhistos, mchistos = getHistos(filelist)
     except IOError, e:
         print "File reading error: ", e.strerror
         exit(1)
     hpaths, h2ds = [], []
     for aos in mchistos.values():
         for p in aos.keys():
             if p and p not in hpaths:
                 hpaths.append(p)
             firstaop = aos[p][sorted(aos[p].keys())[0]]
             # TODO: Would be nicer to test via isHisto and dim or similar, or yoda.Scatter/Histo/Profile base classes
             if type(firstaop) in (yoda.Histo2D, yoda.Profile2D) and p not in h2ds:
                 h2ds.append(p)
 
     ## Take reference data from the Rivet search paths, if there is not already
     if opts.RIVETREFS:
         try:
             refhistos2 = getRivetRefData()
         except IOError, e:
             print "File reading error: ", e.strerror
             exit(1)
         refhistos2.update(refhistos)
         refhistos = refhistos2
 
     ## Purge unmatched ref data entries to save memory
     for refhpath in refhistos.keys():
         if refhpath not in hpaths:
             del refhistos[refhpath]
 
 
     ## Now loop over all MC histograms and plot them
     # TODO: factorize much of this into a rivet.utils mkplotfile(mchists, refhist, kwargs, is2d=False) function
     for hpath in hpaths:
         #print 'Currently looking at', h
 
         ## The analysis objects to be plotted
         anaobjects = []
         ## List of histos to be drawn, to sync the legend and plotted lines
         mainlines = []
         varlines = []
         ## Is this a 2D histo?
         is2d = (hpath in h2ds)
         ## Will we be drawing a ratio plot?
         showratio = opts.RATIO and not is2d
 
 
         ## A Plot object to represent the PLOT section in the .dat file
         plot = Plot()
         if not is2d:
             plot['Legend'] = '1'
             plot['LogY'] = '1'
         headers = plotparser.getHeaders(hpath)
         if headers:
             plot.update(headers)
         # for key, val in headers.iteritems():
         #     plot[key] = val
         if plotoptions.has_key("PLOT"):
             for key_val in plotoptions["PLOT"]:
                 key, val = [s.strip() for s in key_val.split("=",1)]
                 plot[key] = val
         if opts.LINEAR:
             plot['LogY'] = '0'
         if opts.NOPLOTTITLE:
             plot['Title'] = ''
         if showratio and opts.RATIO_DEVIATION:
             plot['RatioPlotMode'] = 'deviation'
         if opts.STYLE == 'talk':
             plot['PlotSize'] = '8,6'
         elif opts.STYLE == 'bw' and showratio:
             plot['RatioPlotErrorBandColor'] = 'black!10'
 
 
         ## Get a special object, if there is one for this path
         special = plotparser.getSpecial(hpath)
 
 
         ## Handle reference data histogram, if there is one
         ratioreference, hasdataref = None, False
         if refhistos.has_key(hpath):
             hasdataref = True
             refdata = refhistos[hpath]
             refdata.setAnnotation('Title', opts.REFTITLE)
             if not is2d:
                 refdata.setAnnotation('ErrorBars', '1')
                 refdata.setAnnotation('PolyMarker', '*')
                 refdata.setAnnotation('ConnectBins', '0')
                 if showratio:
                     ratioreference = hpath
             ## For 1D
             anaobjects.append(refdata)
             mainlines.append(hpath)
             ## For 2D
             if is2d:
                 s = mkOutput(hpath, [refdata], plot, special)
                 writeOutput(s, hpath)
 
 
         ## Loop over the MC files to plot all instances of the histogram
         styleidx = 0
         for infile in filelist:
             if mchistos.has_key(infile) and mchistos[infile].has_key(hpath):
                 hmcs = mchistos[infile][hpath]
                 ## For now, just plot all the different variation histograms (reversed, so [0] is on top)
                 # TODO: calculate and plot an appropriate error band, somehow...
                 for i in sorted(hmcs.keys(), reverse=True):
                     iscanonical = (str(i) == "0")
                     hmc = hmcs[i]
                     ## Default linecolor, linestyle
                     if not is2d:
                         setStyle(hmc, styleidx, not iscanonical)
                         if opts.MC_ERRS:
                             hmc.setAnnotation('ErrorBars', '1')
                     ## Plot defaults from .plot files
                     histopts = plotparser.getHistogramOptions(hpath)
                     if histopts:
                         for key, val in histopts.iteritems():
                             hmc.setAnnotation(key, val)
                     ## Command line plot options
                     setOptions(hmc, plotoptions[infile])
                     ## Set path attribute
                     fullpath = "/"+infile+hpath
                     if not iscanonical:
                         fullpath += "["+str(i)+"]"
                     hmc.setAnnotation('Path', fullpath)
                     ## Add object / path to appropriate lists
                     anaobjects.append(hmc)
                     if iscanonical:
                         mainlines.append(fullpath)
                     else:
                         varlines.append(fullpath)
                     if showratio and ratioreference is None and iscanonical:
                         ratioreference = fullpath
                     ## For 2D, plot each histo now (since overlay makes no sense)
                     if is2d:
                         s = mkOutput(hpath, [hmc], plot, special)
                         writeOutput(s, fullpath)
                 styleidx += 1
 
 
         ## Finally render the combined plots; only show the first one if it's 2D
         # TODO: Only show the first *MC* one if 2D?
         if is2d:
             anaobjects = anaobjects[:1]
         ## Add final attrs to Plot
         plot['DrawOnly'] = ' '.join(varlines + mainlines).strip()
         plot['LegendOnly'] = ' '.join(mainlines).strip()
         if showratio and len(varlines + mainlines) > 1:
             plot['RatioPlot'] = '1'
             plot['RatioPlotReference'] = ratioreference
             if not hasdataref and not plot.has_key("RatioPlotYLabel"):
                 if plot.get('RatioPlotMode', '') == 'deviation':
                     plot['RatioPlotYLabel'] = 'Deviation' #r'$\text{MC}-\text{MC}_\text{ref}$'
                 else:
                     plot['RatioPlotYLabel'] = 'Ratio' #r'$\text{MC}/\text{MC}_\text{ref}$'
 
 
         ## Make the output and write to file
         o = mkOutput(hpath, anaobjects, plot, special)
         writeOutput(o, hpath)
diff --git a/bin/rivet-completion b/bin/rivet-completion
--- a/bin/rivet-completion
+++ b/bin/rivet-completion
@@ -1,258 +1,258 @@
 ## -*- sh -*-
 ## Analysis name completion for Rivet scripts
 
 ## Load bash completion compatibility if zsh is used
 if test -n "$ZSH_VERSION"; then
     autoload bashcompinit
     bashcompinit
 fi
 
 
 ## Create a _filedir helper function if not already present
 (type _filedir &> /dev/null) || \
 function _filedir() {
     local cur prev commands options command
     cur="${COMP_WORDS[COMP_CWORD]}"
     COMPREPLY=( $(compgen -W "$(ls ${cur}* 2> /dev/null)" -- ${cur}) )
     return 0
 }
 
 
 ##########################
 
 
 function _rivet() {
     local cur prev commands options command
     COMPREPLY=()
     cur="${COMP_WORDS[COMP_CWORD]}"
     prev="${COMP_WORDS[COMP_CWORD-1]}"
 
     opts="--help --verbose --quiet --version --nevts --nskip --cross-section"
     opts="$opts --analysis --analyses --runname --list-analyses --show-analysis --show-bibtex" #< intentionally skip --show-analyses alias
     opts="$opts --analysis-path --analysis-path-append --pwd"
     opts="$opts --histo-file --no-histo-file --histo-interval --event-timeout"
     opts="$opts -a -A -n -h -x -H -l -v -q"
     if [[ ${cur} == -* ]] ; then
         COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
         if test -n "$COMPREPLY"; then
             return 0
         fi
     fi
 
     if (echo ${prev} | egrep -- "-\<a\>|--\<analysis\>|--\<analyses\>|--\<show-analysis\>|--\<show-analyses\>|--\<list-analyses\>" &> /dev/null); then
         anas=$(rivet --list-analyses --quiet)
         COMPREPLY=( $(compgen -W "$anas" -- ${cur}) )
         return 0
     fi
 
     if (echo ${prev} | egrep -- "\<-n\>|--\<nevts\>|--\<runname\>|--\<histo-interval\>|--\<cross-section\>|\<-x\>|--\<event-timeout\>" &> /dev/null); then
         COMPREPLY=()
         return 0
     fi
 
     if (echo ${prev} | egrep -- "--\<histo-file\>|\<-H\>" &> /dev/null); then
         _filedir yoda
         return 0
     fi
 
     if (echo ${prev} | egrep -- "--\<analysis-path\>|--\<analysis-path-append\>" &> /dev/null); then
         _filedir -d
         return 0
     fi
 
     _filedir
     return 0
 }
 
 
 complete -F _rivet rivet
 
 
 ##########################
 
 
 function _rivet_config() {
     local cur prev commands options command
     COMPREPLY=()
     cur="${COMP_WORDS[COMP_CWORD]}"
     prev="${COMP_WORDS[COMP_CWORD-1]}"
 
     opts="--help --version"
     opts="$opts --prefix --includedir --libdir --datadir"
     opts="$opts --pythonpath --cppflags --ldflags --libs"
     opts="$opts -h"
     if [[ ${cur} == -* ]] ; then
         COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
         if test -n "$COMPREPLY"; then
             return 0
         fi
     fi
 
     COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
     if test -n "$COMPREPLY"; then
         return 0
     fi
 
     return 0
 }
 
 
 complete -F _rivet_config rivet-config
 
 
 ##########################
 
 
 function _rivet_buildplugin() {
     local cur prev commands options command
     COMPREPLY=()
     cur="${COMP_WORDS[COMP_CWORD]}"
     prev="${COMP_WORDS[COMP_CWORD-1]}"
 
     opts="--help -h --with-root --cmd --dry-run"
     if [[ ${cur} == -* ]] ; then
         COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
         if test -n "$COMPREPLY"; then
             return 0
         fi
     fi
 
     # COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
     # if test -n "$COMPREPLY"; then
     #     return 0
     # fi
 
     _filedir
     return 0
 }
 
 
 complete -F _rivet_buildplugin rivet-buildplugin
 
 
 ##############################
 
 
 function _rivet_cmphistos() {
     local cur prev commands options command
     COMPREPLY=()
     cur="${COMP_WORDS[COMP_CWORD]}"
     prev="${COMP_WORDS[COMP_CWORD-1]}"
 
     opts="--help -h"
     opts="$opts --outdir -o"
     opts="$opts --rivet-refs -R --no-rivet-refs"
     opts="$opts --histogram-list -l"
-    opts="$opts --hier-out --linear --logarithmic --mc-errs"
+    opts="$opts --hier-out --linear --logarithmic --errs --mc-errs"
     opts="$opts --no-ratio --rel-ratio --abs-ratio"
     opts="$opts --all --show-mc-only --show-single --refid"
     opts="$opts --no-plottitle"
     opts="$opts --plotinfodir"
     opts="$opts --no-rmgapbins"
     opts="$opts --quiet -q --verbose -v"
     if [[ ${cur} == -* ]] ; then
         COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
         if test -n "$COMPREPLY"; then
             return 0
         fi
     fi
 
     if [[ ${prev} == "--plotinfodir" ]] ; then
         _filedir -d
         return 0
     fi
 
     if [[ ${prev} == "--show-single" ]]; then
         COMPREPLY=( $(compgen -W "no mc ref all" -- ${cur}) )
         return 0
     fi
 
     _filedir yoda
     return 0
 }
 
 
 complete -F _rivet_cmphistos -o default rivet-cmphistos
 
 
 ##############################
 
 
 function _make_plots() {
     local cur prev commands options command
     COMPREPLY=()
     cur="${COMP_WORDS[COMP_CWORD]}"
     prev="${COMP_WORDS[COMP_CWORD-1]}"
 
     opts="--help -h"
     opts="$opts --num-threads -n"
     opts="$opts --palatino --cm --times --minion"
     opts="$opts --ps --pdf --eps --png --pdfpng --pspng"
     opts="$opts --tex --no-cleanup --full-range"
     opts="$opts --config -c"
     opts="$opts --quiet -q --verbose -v"
     if [[ ${cur} == -* ]] ; then
         COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
         if test -n "$COMPREPLY"; then
             return 0
         fi
     fi
 
     _filedir dat
     return 0
 }
 
 
 complete -F _make_plots -o default make-plots
 
 
 ########################
 
 
 function _rivet_mkhtml() {
     local cur prev commands options command
     COMPREPLY=()
     cur="${COMP_WORDS[COMP_CWORD]}"
     prev="${COMP_WORDS[COMP_CWORD-1]}"
 
     opts="--help -h"
     opts="$opts --outputdir -o"
     opts="$opts --title -t"
     opts="$opts --config -c"
     opts="$opts --single -s"
-    opts="$opts --no-ratio --mc-errs --refid"
+    opts="$opts --no-ratio --errs --mc-errs --refid"
     opts="$opts --num-threads --n"
     opts="$opts --pdf --ps --booklet"
     opts="$opts --ignore-unvalidated -i"
     opts="$opts --match -m"
     opts="$opts --unmatch -M"
     opts="$opts --verbose -v"
     if [[ ${cur} == -* ]] ; then
         COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
         if test -n "$COMPREPLY"; then
             return 0
         fi
     fi
 
     ## Options with files / directories as the arg
     if (echo ${prev} | egrep -- "--\<outputdir\>|\<-o\>" &> /dev/null); then
         _filedir -d
         return 0
     fi
     if (echo ${prev} | egrep -- "--\<config\>|\<-c\>" &> /dev/null); then
         _filedir
         return 0
     fi
 
     ## Options without an completeable arg
     if (echo ${prev} | egrep -- "\<-t\>|--\<title\>|--\<refid\>|--\<n\>|--\<num-threads\>|\<-m\>|--\<match\>|\<-M\>|--\<unmatch\>" &> /dev/null); then
         COMPREPLY=()
         return 0
     fi
 
     _filedir yoda
     return 0
 }
 
 
 complete -F _rivet_mkhtml rivet-mkhtml
diff --git a/bin/rivet-config.in b/bin/rivet-config.in
--- a/bin/rivet-config.in
+++ b/bin/rivet-config.in
@@ -1,113 +1,113 @@
 #! /usr/bin/env bash
 ## -*- sh -*-
 ## @configure_input@
 
 tmp=$(echo $* | egrep -- '--\<help\>|-\<h\>')
 if test $# -eq 0 || test -n "$tmp"; then
     echo "rivet-config: configuration tool for the Rivet generator validation system"
     echo "              http://projects.hepforge.org/rivet/"
     echo
     echo "Usage: $( basename $0 ) [--help|-h] | "
     echo "           [--{prefix,datadir,libdir,includedir}] | "
     echo "           [--{cppflags,ldflags,ldlibs}] | "
     echo "           [--version]"
     echo "Options:"
     echo "  --help | -h   : show this help message"
     echo
     echo "  --prefix      : show the installation prefix (cf. autoconf)"
     echo "  --includedir  : show the path to the directory containing the Rivet headers"
     echo "  --libdir      : show the path to the directory containing the Rivet libraries"
     echo "  --datadir     : show the path to the directory containing Rivet data"
     echo "  --pythonpath  : show the path(s) to the directory containing Rivet's Python package"
     echo
     echo "  --guess-prefix: try to use the runtime prefix, rather than that set at install-time"
     echo
     echo "  --cxx         : returns a compiler string matching that used to build Rivet"
     echo "  --cflags|--cppflags : returns a Rivet '-I' string for insertion into CPPFLAGS"
     echo "  --ldflags     : returns a Rivet '-L' string for insertion into LDFLAGS"
     echo "  --libs        : returns a Rivet '-L/-l' string for insertion into LIBS or LIBADD"
     echo
     echo "  --version     : returns Rivet release version number"
 fi
 
 
 ## These variables need to exist
 ## Note no use of $DESTDIR... we ignore it so that destdir can be used
 ## for temp installs later copied to /
 tmp=$( echo "$*" | egrep -- '--\<guess-prefix\>')
 if [[ -n "$tmp" ]]; then
     bindir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
     prefix=$(dirname $bindir)
     exec_prefix=$prefix
 else
     prefix=@prefix@
     exec_prefix=@exec_prefix@
 fi
 datarootdir=@datarootdir@
 
 
 OUT=""
 
 ## "Atomic" build info, for "roll your own build" obsessives
 tmp=$( echo "$*" | egrep -- '--\<prefix\>')
 test -n "$tmp" && OUT="$OUT @prefix@"
 
 tmp=$( echo "$*" | egrep -- '--\<includedir\>')
 test -n "$tmp" && OUT="$OUT @includedir@"
 
 tmp=$( echo "$*" | egrep -- '--\<libdir\>')
 test -n "$tmp" && OUT="$OUT @libdir@"
 
 tmp=$( echo "$*" | egrep -- '--\<datadir\>')
 test -n "$tmp" && OUT="$OUT @datadir@/@PACKAGE_TARNAME@"
 
 tmp=$( echo "$*" | egrep -- '--\<pythonpath\>')
 test -n "$tmp" && OUT="$OUT @RIVET_PYTHONPATH@"
 
 
 ## "Pre-rolled" build info
 tmp=$( echo "$*" | egrep -- '--\<cxx\>')
 test -n "$tmp" && OUT="$OUT @RIVETCXX@"
 
 tmp=$( echo "$*" | egrep -- '--\<cflags\>|--\<cxxflags\>')
 test -n "$tmp" && OUT="$OUT @RIVETCXXFLAGS@"
 
 tmp=$( echo "$*" | egrep -- '--\<cppflags\>')
 if test -n "$tmp"; then
     irivet="@includedir@"
     test -n "$irivet" && OUT="$OUT -I${irivet}"
     ihepmc="@HEPMCINCPATH@"
     test -n "$ihepmc" && OUT="$OUT -I${ihepmc}"
     iyoda="@YODAINCPATH@"
     test -n "$iyoda" && OUT="$OUT -I${iyoda}"
     ifastjet="@FASTJETINCPATH@"
     test -n "$ifastjet" && OUT="$OUT -I${ifastjet}"
-    igsl="@GSLINCPATH@"
-    test -n "$igsl" && OUT="$OUT -I${igsl}"
+    # igsl="@GSLINCPATH@"
+    # test -n "$igsl" && OUT="$OUT -I${igsl}"
     # iboost="@BOOST_CPPFLAGS@"
     # test -n "$iboost" && OUT="$OUT ${iboost}"
 fi
 
 tmp=$( echo "$*" | egrep -- '--\<ldflags\>|--\<libs\>')
 if test -n "$tmp"; then
     lrivet="@libdir@"
     test -n "$lrivet" && OUT="$OUT -L${lrivet}"
     lhepmc="@HEPMCLIBPATH@"
-    test -n "$lhepmc" && OUT="$OUT -L${lhepmc}"
+    test -n "$lhepmc" && OUT="$OUT -L${lhepmc} -lHepMC"
     lyoda="@YODALIBPATH@"
-    test -n "$lyoda" && OUT="$OUT -L${lyoda}"
+    test -n "$lyoda" && OUT="$OUT -L${lyoda} -lYODA"
     lfastjet="@FASTJETCONFIGLIBADD@"
     test -n "$lfastjet" && OUT="$OUT ${lfastjet}"
-    lgsl="@GSLLIBPATH@"
-    test -n "$lgsl" && OUT="$OUT -L${lgsl}"
+    # lgsl="@GSLLIBPATH@"
+    # test -n "$lgsl" && OUT="$OUT -L${lgsl}"
 fi
 
 tmp=$( echo "$*" | egrep -- '--\<libs\>|--\<ldadd\>')
 test -n "$tmp" && OUT="$OUT -lRivet"
 
 
 ## Version
 tmp=$( echo "$*" | egrep -- '--\<version\>')
 test -n "$tmp" && echo @PACKAGE_VERSION@ && exit 0
 
 echo $OUT
diff --git a/bin/rivet-findid b/bin/rivet-findid
--- a/bin/rivet-findid
+++ b/bin/rivet-findid
@@ -1,187 +1,187 @@
 #! /usr/bin/env python
 
 """%prog ID [ID ...]
 
 %prog -- paper ID lookup helper for Rivet
 
 Looks up the Rivet analysis and other ID formats matching the given ID.
 
 Arguments:
  ID            A paper ID in one of the following formats
-                - arXiv:   yymm.nnnn
+                - arXiv:   yymm.nnnnn
                 - arXiv:   foo-bar/yymmnnn
                 - SPIRES:  [S]nnnnnnn
                 - Inspire: [I]nnnnnn[n]"""
 
 import rivet, sys, os, re
 rivet.util.check_python_version()
 rivet.util.set_process_name(os.path.basename(__file__))
 
 def main():
 
     ## Handle command line args
     import optparse
     op = optparse.OptionParser(usage=__doc__)
     opts, args = op.parse_args()
     if not args:
         op.print_help()
         exit(1)
 
 
     ## Set up some variables before the loop over args
-    arxiv_pattern = re.compile('^\d\d[01]\d\.\d{4}$|^(hep-(ex|ph|th)|nucl-ex)/\d\d[01]\d{4}$')
+    arxiv_pattern = re.compile('^\d\d[01]\d\.\d{4,5}$|^(hep-(ex|ph|th)|nucl-ex)/\d\d[01]\d{4}$')
     spires_pattern = re.compile('^(S|I)?(\d{6}\d?)$')
 
 
     ## Loop over requested IDs
     for N, id in enumerate(args):
 
         a_match = arxiv_pattern.match(id)
         s_match = spires_pattern.match(id)
         RESULT = {}
 
         if a_match:
             RESULT = try_arxiv(id)
         elif s_match:
             prefix = s_match.group(1)
             number = s_match.group(2)
 
             if prefix == 'S' and len(number) == 7:
                 RESULT = try_spires(number)
             elif prefix == 'I':
                 RESULT = try_inspire(number)
             else:
                 if len(number) == 7:
                     RESULT = try_spires(number)
                 RESULT.update( try_inspire(number) )
         else:
             sys.stderr.write('error       Pattern %s does not match any known ID pattern.\n' % id)
             continue
 
 
         rivet_candidates = []
         if 'inspire' in RESULT:
             rivet_candidates += try_rivet('I'+RESULT['inspire'])
         if not rivet_candidates and 'spires' in RESULT:
             rivet_candidates += try_rivet('S'+RESULT['spires'])
         if rivet_candidates:
             RESULT['rivet'] = rivet_candidates[0]
 
         if N > 0:
             print ""
         output(RESULT)
 
 
 
 
 def output(result):
     if not result.get('title'):
         return
 
     print 'title       %s' % result['title']
     ar = result.get('arxiv')
     if ar:
         print 'arxiv       %s' % ar
         print 'arxiv_url   http://arxiv.org/abs/%s' % ar
 
     sp = result.get('spires')
     if sp:
         print 'spires      %s' % sp
 
     insp = result.get('inspire')
     if insp:
         print 'inspire     %s' % insp
         print 'inspire_url http://inspirehep.net/record/%s' % insp
 
     tex = result.get('bibtex')
     if tex:
         print 'bibtex      %s' % tex
 
     riv = result.get('rivet')
     if riv:
         print 'rivet       %s' % riv
 
 
 
 
 def try_arxiv(id):
     url = 'http://inspirehep.net/search?p=eprint+%s&of=xm' % id
     ret = _search_inspire(url)
     if ret.get('arxiv') == id:
         return ret
     else:
         return {}
 
 
 def try_spires(id):
     url = 'http://inspirehep.net/search?p=key+%s&of=xm' % id
     ret = _search_inspire(url)
     if ret.get('spires') == id:
         return ret
     else:
         return {}
 
 
 def try_inspire(id):
     url = 'http://inspirehep.net/record/%s/export/xm' % id
     ret = _search_inspire(url)
     if ret.get('inspire') == id:
         return ret
     else:
         return {}
 
 
 def try_rivet(id):
     id = re.compile(id)
     import rivet
     ALL_ANALYSES = rivet.AnalysisLoader.analysisNames()
     return filter(id.search, ALL_ANALYSES)
 
 
 
 
 
 def _search_inspire(url):
     result = {}
     import urllib2
     urlstream = urllib2.urlopen(url)
     ET = rivet.util.import_ET()
     tree = ET.parse(urlstream)
     for i in tree.getiterator('{http://www.loc.gov/MARC21/slim}controlfield'):
         if i.get('tag') == '001':
             result['inspire'] = i.text
 
     for i in tree.getiterator('{http://www.loc.gov/MARC21/slim}datafield'):
 
         if i.get('tag') == '035':
             entries = {}
             for c in i.getchildren():
                 for k,v in c.items():
                     if k=='code':
                         entries[v] = c.text
             if entries.get('9') == 'SPIRESTeX':
                 result['bibtex'] = entries['a']
 
         if i.get('tag') == '037':
             entries = {}
             for c in i.getchildren():
                 for k,v in c.items():
                     if k=='code':
                         entries[v] = c.text
             if entries.get('9') == 'arXiv':
                 result['arxiv'] = entries['a'].replace('arXiv:','')
 
         elif i.get('tag') == '970':
             for c in i.getchildren():
                 if c.text[:7] == 'SPIRES-':
                     result['spires'] = c.text[7:]
 
         elif i.get('tag') == '245':
             for c in i.getchildren():
                 result['title'] = c.text
 
     return result
 
 
 if __name__ == "__main__":
     main()
diff --git a/bin/rivet-mkanalysis b/bin/rivet-mkanalysis
--- a/bin/rivet-mkanalysis
+++ b/bin/rivet-mkanalysis
@@ -1,309 +1,310 @@
 #! /usr/bin/env python
 
 """\
 %prog: make templates of analysis source files for Rivet
 
 Usage: %prog [--help|-h] [--srcroot=<srcrootdir>] <analysisname>
 
 Without the --srcroot flag, the analysis files will be created in the current
 directory.
 """
 
 import rivet, sys, os
 rivet.util.check_python_version()
 rivet.util.set_process_name(os.path.basename(__file__))
 import logging
 
 
 ## Handle command line
 from optparse import OptionParser
 parser = OptionParser(usage=__doc__)
 parser.add_option("--srcroot", metavar="DIR", dest="SRCROOT", default=None,
                   help="install the templates into the Rivet source tree (rooted " +
                   "at directory DIR) rather than just creating all in the current dir")
 parser.add_option("-q", "--quiet", dest="LOGLEVEL", default=logging.INFO,
                   action="store_const", const=logging.WARNING, help="only write out warning and error messages")
 parser.add_option("-v", "--verbose", dest="LOGLEVEL", default=logging.INFO,
                   action="store_const", const=logging.DEBUG, help="provide extra debugging messages")
 parser.add_option("-i", "--inline-info", dest="INLINE", action="store_true",
                   default=False, help="Put analysis info into source file instead of separate data file.")
 opts, args = parser.parse_args()
 logging.basicConfig(format="%(msg)s", level=opts.LOGLEVEL)
 ANANAMES = args
 
 
 ## Work out installation paths
 ANAROOT = os.path.abspath(opts.SRCROOT or os.getcwd())
 if not os.access(ANAROOT, os.W_OK):
     logging.error("Can't write to source root directory %s" % ANAROOT)
     sys.exit(1)
 ANASRCDIR = os.getcwd()
 ANAINFODIR = os.getcwd()
 ANAPLOTDIR = os.getcwd()
 if opts.SRCROOT:
     ANASRCDIR = os.path.join(ANAROOT, "src/Analyses")
     ANAINFODIR = os.path.join(ANAROOT, "data/anainfo")
     ANAPLOTDIR = os.path.join(ANAROOT, "data/plotinfo")
     if not (os.path.exists(ANASRCDIR) and os.path.exists(ANAINFODIR) and os.path.exists(ANAPLOTDIR)):
         logging.error("Rivet analysis dirs do not exist under %s" % ANAROOT)
         sys.exit(1)
 if not (os.access(ANASRCDIR, os.W_OK) and os.access(ANAINFODIR, os.W_OK) and os.access(ANAPLOTDIR, os.W_OK)):
     logging.error("Can't write to Rivet analysis dirs under %s" % ANAROOT)
     sys.exit(1)
 
 
 ## Check for disallowed characters in analysis names
 import string
 allowedchars = string.letters + string.digits + "_"
 all_ok = True
 for ananame in ANANAMES:
     for c in ananame:
         if c not in allowedchars:
             logging.error("Analysis name '%s' contains disallowed character '%s'!" % (ananame, c))
             all_ok = False
             break
 if not all_ok:
     logging.error("Exiting... please ensure that all analysis names are valid")
     sys.exit(1)
 
 
 ## Now make each analysis
 for ANANAME in ANANAMES:
     logging.info("Writing templates for %s to %s" % (ANANAME, ANAROOT))
 
     ## Extract some metadata from the name if it matches the standard pattern
     import re
     re_stdana = re.compile(r"^(\w+)_(\d{4})_(I|S)(\d+)$")
     match = re_stdana.match(ANANAME)
     STDANA = False
     ANAEXPT = "<Insert the experiment name>"
     ANACOLLIDER = "<Insert the collider name>"
     ANAYEAR = "<Insert year of publication>"
     INSPIRE_SPIRES = 'I'
     ANAINSPIREID = "<Insert the Inspire ID>"
     if match:
         STDANA = True
         ANAEXPT = match.group(1)
         if ANAEXPT.upper() in ("ALICE", "ATLAS", "CMS", "LHCB"):
             ANACOLLIDER = "LHC"
         elif ANAEXPT.upper() in ("CDF", "D0"):
             ANACOLLIDER = "Tevatron"
         elif ANAEXPT.upper() == "BABAR":
             ANACOLLIDER = "PEP-II"
         elif ANAEXPT.upper() == "BELLE":
             ANACOLLIDER = "KEKB"
         ANAYEAR = match.group(2)
         INSPIRE_SPIRES = match.group(3)
         ANAINSPIREID = match.group(4)
     if INSPIRE_SPIRES == "I":
         ANAREFREPO = "Inspire"
     else:
         ANAREFREPO = "Spires"
     KEYWORDS = {
         "ANANAME" : ANANAME,
         "ANAEXPT" : ANAEXPT,
         "ANACOLLIDER" : ANACOLLIDER,
         "ANAYEAR" : ANAYEAR,
         "ANAREFREPO" : ANAREFREPO,
         "ANAINSPIREID" : ANAINSPIREID
         }
 
     ## Try to get bib info from SPIRES
     ANABIBKEY = ""
     ANABIBTEX = ""
     bibkey, bibtex = None, None
     if STDANA:
         try:
             logging.debug("Getting Inspire/SPIRES biblio data for '%s'" % ANANAME)
             bibkey, bibtex = rivet.spiresbib.get_bibtex_from_repo(INSPIRE_SPIRES, ANAINSPIREID)
         except Exception, e:
             logging.error("Inspire/SPIRES oops: %s" % e)
         if bibkey and bibtex:
             ANABIBKEY = bibkey
             ANABIBTEX = bibtex
     KEYWORDS["ANABIBKEY"] = ANABIBKEY
     KEYWORDS["ANABIBTEX"] = ANABIBTEX
 
 
     ## Try to download YODA data file from HepData
     if STDANA:
         try:
             import urllib2, tarfile, StringIO
             hdurl = None
             if INSPIRE_SPIRES == "I":
                 hdurl = "http://www.hepdata.net/record/ins%s?format=yoda" % ANAINSPIREID
             if hdurl:
                 logging.debug("Getting data file from HepData at %s" % hdurl)
                 response = urllib2.urlopen(hdurl)
                 download=response.read()
                 if not download or "<html" in download:
                     logging.warning("Problem encountered when getting data from HepData (%s). No reference data file written." % hdurl)
                 else:
                     tar = tarfile.open(mode= "r:gz", fileobj = StringIO.StringIO(download))
                     fnames = tar.getnames()
                     if len(fnames)>1:
                         logging.warning("Found more than one file on downloaded archive. Not writing data file")
                     else:
                         tar.extractall()
                         import os
                         os.rename(fnames[0], "%s.yoda"%ANANAME)
                 response.close()
             else:
                 logging.warning("Could not identify a URL for getting reference data from HepData. No reference data file written.")
         except Exception, e:
             logging.error("HepData oops: %s" % e)
 
 
     if opts.INLINE:
         KEYWORDS["ANAREFREPO_LOWER"] = KEYWORDS["ANAREFREPO"].lower()
         INLINEMETHODS="""
   public:
     string experiment()         const { return "%(ANAEXPT)s"; }
     string year()               const { return "%(ANAYEAR)s"; }
     string %(ANAREFREPO_LOWER)sId()          const { return "%(ANAINSPIREID)s"; }
     string collider()           const { return ""; }
     string summary()            const { return ""; }
     string description()        const { return ""; }
     string runInfo()            const { return ""; }
     string bibKey()             const { return "%(ANABIBKEY)s"; }
     string bibTeX()             const { return "%(ANABIBTEX)s"; }
     string status()             const { return "UNVALIDATED"; }
     vector<string> authors()    const { return vector<string>(); }
     vector<string> references() const { return vector<string>(); }
     vector<std::string> todos() const { return vector<string>(); }
     """ % KEYWORDS
         del KEYWORDS["ANAREFREPO_LOWER"]
     else:
         INLINEMETHODS=""
 
     KEYWORDS["INLINEMETHODS"] = INLINEMETHODS
 
 
     ANASRCFILE = os.path.join(ANASRCDIR, ANANAME+".cc")
     logging.debug("Writing implementation template to %s" % ANASRCFILE)
     f = open(ANASRCFILE, "w")
     src = '''\
 // -*- C++ -*-
 #include "Rivet/Analysis.hh"
 #include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
 
 namespace Rivet {
 
 
   /// @brief Add a short analysis description here
   class %(ANANAME)s : public Analysis {
   public:
 
     /// Constructor
     DEFAULT_RIVET_ANALYSIS_CTOR(%(ANANAME)s);
 
 
     /// @name Analysis methods
     //@{
 
     /// Book histograms and initialise projections before the run
     void init() {
 
       // Initialise and register projections
       declare(FinalState(Cuts::abseta < 5 && Cuts::pT > 100*MeV), "FS");
 
       // Book histograms
       _h_XXXX = bookProfile1D(1, 1, 1);
       _h_YYYY = bookHisto1D(2, 1, 1);
       _h_ZZZZ = bookCounter(3, 1, 1);
 
     }
 
 
     /// Perform the per-event analysis
     void analyze(const Event& event) {
 
       /// @todo Do the event by event analysis here
 
     }
 
 
     /// Normalise histograms etc., after the run
     void finalize() {
 
       normalize(_h_YYYY); // normalize to unity
       scale(_h_ZZZZ, crossSection()/picobarn/sumOfWeights()); // norm to cross section
 
     }
 
     //@}
 
 
     /// @name Histograms
     //@{
     Profile1DPtr _h_XXXX;
     Histo1DPtr _h_YYYY;
     CounterPtr _h_ZZZZ;
     //@}
 %(INLINEMETHODS)s
 
   };
 
 
   // The hook for the plugin system
   DECLARE_RIVET_PLUGIN(%(ANANAME)s);
 
 
 }
 ''' % KEYWORDS
     f.write(src)
     f.close()
 
     ANAPLOTFILE = os.path.join(ANAPLOTDIR, ANANAME+".plot")
     logging.debug("Writing plot template to %s" % ANAPLOTFILE)
     f = open(ANAPLOTFILE, "w")
     src = '''\
 # BEGIN PLOT /%(ANANAME)s/d01-x01-y01
 #Title=[Uncomment and insert title for histogram d01-x01-y01 here]
 #XLabel=[Uncomment and insert x-axis label for histogram d01-x01-y01 here]
 #YLabel=[Uncomment and insert y-axis label for histogram d01-x01-y01 here]
 # + any additional plot settings you might like, see make-plots documentation
 # END PLOT
 
 # ... add more histograms as you need them ...
 ''' % KEYWORDS
     f.write(src)
     f.close()
 
     if opts.INLINE:
         sys.exit(0)
     ANAINFOFILE = os.path.join(ANAINFODIR, ANANAME+".info")
     logging.debug("Writing info template to %s" % ANAINFOFILE)
     f = open(ANAINFOFILE, "w")
     src = """\
 Name: %(ANANAME)s
 Year: %(ANAYEAR)s
 Summary: <Insert short %(ANANAME)s description>
 Experiment: %(ANAEXPT)s
 Collider: %(ANACOLLIDER)s
 %(ANAREFREPO)sID: %(ANAINSPIREID)s
 Status: UNVALIDATED
 Authors:
  - Your Name <your@email.address>
 #References:
 #- '<Example: Eur.Phys.J. C76 (2016) no.7, 392>'
 #- '<Example: DOI:10.1140/epjc/s10052-016-4184-8>'
 #- '<Example: arXiv:1605.03814>'
 RunInfo: <Describe event types, cuts, and other general generator config tips.>
 NeedCrossSection: no
 #Beams: <Insert beam pair(s), e.g. [p+, p+] or [[p-, e-], [p-, e+]]>
 #Energies: <Run energies or beam energy pairs in GeV, e.g. [13000] or [[8.0, 3.5]] or [630, 1800]. Order pairs to match "Beams">
 Description:
   '<A fairly long description, including what is measured
   and if possible what it is useful for in terms of MC validation
   and tuning. Use LaTeX for maths like $\pT > 50\;\GeV$.>'
 BibKey: %(ANABIBKEY)s
 BibTeX: '%(ANABIBTEX)s'
 ToDo:
  - Implement the analysis, test it, remove this ToDo, and mark as VALIDATED :-)
 
 """ % KEYWORDS
     f.write(src)
     f.close()
 
     logging.info("Use e.g. 'rivet-buildplugin Rivet%s.so %s.cc' to compile the plugin" % (ANANAME, ANANAME))
diff --git a/bin/rivet-mkhtml b/bin/rivet-mkhtml
--- a/bin/rivet-mkhtml
+++ b/bin/rivet-mkhtml
@@ -1,497 +1,497 @@
 #! /usr/bin/env python
 
 """\
 %prog [options] <yodafile1> [<yodafile2> <yodafile3>...] [PLOT:Key1=Val1:...]
 
 Make web pages from histogram files written out by Rivet.  You can specify
 multiple Monte Carlo YODA files to be compared in the same syntax as for
 rivet-cmphistos, i.e. including plotting options.
 
 Reference data, analysis metadata, and plot style information should be found
 automatically (if not, set the RIVET_ANALYSIS_PATH or similar variables
 appropriately).
 
 Any existing output directory will be overwritten.
 
 ENVIRONMENT:
  * RIVET_ANALYSIS_PATH: list of paths to be searched for plugin
      analysis libraries at runtime
  * RIVET_DATA_PATH: list of paths to be searched for data files
 """
 
 import rivet, sys, os
 rivet.util.check_python_version()
 rivet.util.set_process_name(os.path.basename(__file__))
 
 import glob, shutil
 from subprocess import Popen,PIPE
 
 
 from optparse import OptionParser, OptionGroup
 parser = OptionParser(usage=__doc__)
 parser.add_option("-o", "--outputdir", dest="OUTPUTDIR",
                   default="./rivet-plots", help="directory for Web page output")
 parser.add_option("-c", "--config", dest="CONFIGFILES", action="append", default=["~/.make-plots"],
                   help="plot config file(s) to be used with rivet-cmphistos")
 parser.add_option("-n", "--num-threads", metavar="NUMTHREADS", dest="NUMTHREADS", type=int,
                   default=None, help="request make-plots to use a specific number of threads")
 parser.add_option("--ignore-missing", dest="IGNORE_MISSING", action="store_true",
                   default=False, help="ignore missing YODA files")
 parser.add_option("-i", "--ignore-unvalidated", dest="IGNORE_UNVALIDATED", action="store_true",
                   default=False, help="ignore unvalidated analyses")
 # parser.add_option("--ref", "--refid", dest="REF_ID",
 #                   default=None, help="ID of reference data set (file path for non-REF data)")
 parser.add_option("--dry-run", help="don't actually do any plotting or HTML building", dest="DRY_RUN",
                   action="store_true", default=False)
 parser.add_option("--no-cleanup", dest="NO_CLEANUP", action="store_true", default=False,
                   help="keep plotting temporary directory")
 parser.add_option("--no-subproc", dest="NO_SUBPROC", action="store_true", default=False,
                   help="don't use subprocesses to render the plots in parallel -- useful for debugging")
 parser.add_option("--pwd", dest="PATH_PWD", action="store_true", default=False,
                   help="append the current directory (pwd) to the analysis/data search paths (cf. $RIVET_ANALYSIS_PATH)")
 
 stygroup = OptionGroup(parser, "Style options")
 stygroup.add_option("-t", "--title", dest="TITLE",
                     default="Plots from Rivet analyses", help="title to be displayed on the main web page")
 stygroup.add_option("--reftitle", dest="REFTITLE",
                     default="Data", help="legend entry for reference data")
 stygroup.add_option("--no-plottitle", dest="NOPLOTTITLE", action="store_true",
                     default=False, help="don't show the plot title on the plot "
                         "(useful when the plot description should only be given in a caption)")
 stygroup.add_option("-s", "--single", dest="SINGLE", action="store_true",
                     default=False, help="display plots on single webpage.")
 stygroup.add_option("--no-ratio", dest="SHOW_RATIO", action="store_false",
                     default=True, help="don't draw a ratio plot under each main plot.")
-stygroup.add_option("--mc-errs", dest="MC_ERRS", action="store_true",
+stygroup.add_option("--errs", "--mc-errs", dest="MC_ERRS", action="store_true",
                     default=False, help="plot error bars.")
 stygroup.add_option("--offline", dest="OFFLINE", action="store_true",
                     default=False, help="generate HTML that does not use external URLs.")
 stygroup.add_option("--pdf", dest="VECTORFORMAT", action="store_const", const="PDF",
                     default="PDF", help="use PDF as the vector plot format.")
 stygroup.add_option("--ps", dest="VECTORFORMAT", action="store_const", const="PS",
                     default="PDF", help="use PostScript as the vector plot format. DEPRECATED")
 stygroup.add_option("--booklet", dest="BOOKLET", action="store_true",
                     default=False, help="create booklet (currently only available for PDF with pdftk or pdfmerge).")
 stygroup.add_option("--font", dest="OUTPUT_FONT", choices="palatino,cm,times,helvetica,minion".split(","),
                     default="palatino", help="choose the font to be used in the plots")
 stygroup.add_option("--palatino", dest="OUTPUT_FONT", action="store_const", const="palatino", default="palatino",
                     help="use Palatino as font (default). DEPRECATED: Use --font")
 stygroup.add_option("--cm", dest="OUTPUT_FONT", action="store_const", const="cm", default="palatino",
                     help="use Computer Modern as font. DEPRECATED: Use --font")
 stygroup.add_option("--times", dest="OUTPUT_FONT", action="store_const", const="times", default="palatino",
                     help="use Times as font. DEPRECATED: Use --font")
 stygroup.add_option("--helvetica", dest="OUTPUT_FONT", action="store_const", const="helvetica", default="palatino",
                     help="use Helvetica as font. DEPRECATED: Use --font")
 stygroup.add_option("--minion", dest="OUTPUT_FONT", action="store_const", const="minion", default="palatino",
                     help="use Adobe Minion Pro as font. DEPRECATED: Use --font")
 parser.add_option_group(stygroup)
 
 selgroup = OptionGroup(parser, "Selective plotting")
 selgroup.add_option("-m", "--match", action="append", dest="PATHPATTERNS", default=[],
                     help="only write out histograms whose $path/$name string matches any of these regexes")
 selgroup.add_option("-M", "--unmatch", action="append", dest="PATHUNPATTERNS", default=[],
                     help="exclude histograms whose $path/$name string matches any of these regexes")
 selgroup.add_option("-a", "--ana-match", action="append", dest="ANAPATTERNS", default=[],
                     help="only write out histograms from analyses whose name matches any of these regexes")
 selgroup.add_option("-A", "--ana-unmatch", action="append", dest="ANAUNPATTERNS", default=[],
                     help="exclude histograms from analyses whose name matches any of these regexes")
 parser.add_option_group(selgroup)
 
 vrbgroup = OptionGroup(parser, "Verbosity control")
 vrbgroup.add_option("-v", "--verbose", help="add extra debug messages", dest="VERBOSE",
                   action="store_true", default=False)
 parser.add_option_group(vrbgroup)
 
 opts, yodafiles = parser.parse_args()
 
 
 ## Add pwd to search paths
 if opts.PATH_PWD:
     rivet.addAnalysisLibPath(os.path.abspath("."))
     rivet.addAnalysisDataPath(os.path.abspath("."))
 
 
 ## Check that there are some arguments!
 if not yodafiles:
     print "Error: You need to specify some YODA files to be plotted!"
     sys.exit(1)
 
 
 ## Make output directory
 if not opts.DRY_RUN:
     if os.path.exists(opts.OUTPUTDIR) and not os.path.realpath(opts.OUTPUTDIR)==os.getcwd():
         import shutil
         shutil.rmtree(opts.OUTPUTDIR)
     try:
         os.makedirs(opts.OUTPUTDIR)
     except:
         print "Error: failed to make new directory '%s'" % opts.OUTPUTDIR
         sys.exit(1)
 
 ## Get set of analyses involved in the runs
 plotarg = None
 analyses = set()
 blocked_analyses = set()
 import yoda
 for yodafile in yodafiles:
     if yodafile.startswith("PLOT:"):
         plotarg = yodafile
         continue
     yodafilepath = os.path.abspath(yodafile.split(":")[0])
     if not os.access(yodafilepath, os.R_OK):
         print "Error: cannot read from %s" % yodafilepath
         if opts.IGNORE_MISSING:
             continue
         else:
             sys.exit(2)
 
     try:
         ## Note: we use -m/-M flags here as well as when calling rivet-cmphistos, to potentially speed this initial loading
         analysisobjects = yoda.read(yodafilepath, patterns=opts.PATHPATTERNS, unpatterns=opts.PATHUNPATTERNS)
     except IOError, e:
         print "File reading error: ", e.strerror
         sys.exit(1)
 
     for path, ao in analysisobjects.iteritems():
         ## Make a path object and ensure the path is in standard form
         try:
             aop = rivet.AOPath(path)
         except Exception, e:
             #print e
             print "Found analysis object with non-standard path structure:", path, "... skipping"
             continue
 
         ## We don't plot data objects with path components hidden by an underscore prefix
         if aop.istmp():
             continue
 
         ## Identify analysis/histo name parts
         analysis = "ANALYSIS"
         if aop.basepathparts(keepref=False):
             analysis = aop.basepathparts(keepref=False)[0] #< TODO: for compatibility with rivet-cmphistos... generalise?
             #analysis = "_".join(aop.dirnameparts(keepref=False)[:-1]) #< TODO: would this be nicer? Currently incompatible with rivet-cmphistos
 
         ## Optionally veto on analysis name pattern matching
         if analysis in analyses.union(blocked_analyses):
             continue
         import re
         matched = True
         if opts.ANAPATTERNS:
             matched = False
             for patt in opts.ANAPATTERNS:
                 if re.match(patt, analysis) is not None:
                     matched = True
                     break
         if matched and opts.ANAUNPATTERNS:
             for patt in opts.ANAUNPATTERNS:
                 if re.match(patt, analysis) is not None:
                     matched = False
                     break
         if matched:
             analyses.add(analysis)
         else:
             blocked_analyses.add(analysis)
 
 
 ## Sort analyses: group ascending by analysis name (could specialise grouping by collider), then
 ## descending by year, and finally descending by bibliographic archive ID code (INSPIRE first).
 def anasort(name):
     rtn = (1, name)
     if name.startswith("MC"):
         rtn = (99999999, name)
     else:
         stdparts = name.split("_")
         try:
             year = int(stdparts[1])
             rtn = (0, stdparts[0], -year, 0)
             idcode = (0 if stdparts[2][0] == "I" else 1e10) - int(stdparts[2][1:])
             rtn = (0, stdparts[0], -year, idcode)
             if len(stdparts) > 3:
                 rtn += stdparts[3:]
         except:
             pass
     return rtn
 
 analyses = sorted(analyses, key=anasort)
 
 ## Uncomment to test analysis ordering on index page
 # print analyses
 # sys.exit(0)
 
 
 ## Run rivet-cmphistos to get plain .dat files from .yoda
 ## We do this here since it also makes the necessary directories
 ch_cmd = ["rivet-cmphistos"]
 if opts.MC_ERRS:
     ch_cmd.append("--mc-errs")
 if not opts.SHOW_RATIO:
     ch_cmd.append("--no-ratio")
 if opts.NOPLOTTITLE:
     ch_cmd.append("--no-plottitle")
 # if opts.REF_ID is not None:
 #     ch_cmd.append("--refid=%s" % os.path.abspath(opts.REF_ID))
 if opts.REFTITLE:
     ch_cmd.append("--reftitle=%s" % opts.REFTITLE )
 if opts.PATHPATTERNS:
     for patt in opts.PATHPATTERNS:
         ch_cmd += ["-m", patt] #"'"+patt+"'"]
 if opts.PATHUNPATTERNS:
     for patt in opts.PATHUNPATTERNS:
         ch_cmd += ["-M", patt] #"'"+patt+"'"]
 ch_cmd.append("--hier-out")
 # TODO: Need to be able to override this: provide a --plotinfodir cmd line option?
 ch_cmd.append("--plotinfodir=%s" % os.path.abspath("../"))
 for af in yodafiles:
     yodafilepath = os.path.abspath(af.split(":")[0])
     if af.startswith("PLOT:"):
         yodafilepath = "PLOT"
     elif not os.access(yodafilepath, os.R_OK):
         continue
     newarg = yodafilepath
     if ":" in af:
         newarg += ":" + af.split(":", 1)[1]
     # print newarg
     ch_cmd.append(newarg)
 
 ## Pass rivet-mkhtml -c args to rivet-cmphistos
 for configfile in opts.CONFIGFILES:
     configfile = os.path.abspath(os.path.expanduser(configfile))
     if os.access(configfile, os.R_OK):
         ch_cmd += ["-c", configfile]
 
 if opts.VERBOSE:
     ch_cmd.append("--verbose")
     print "Calling rivet-cmphistos with the following command:"
     print " ".join(ch_cmd)
 
 ## Run rivet-cmphistos in a subdir, after fixing any relative paths in Rivet env vars
 if not opts.DRY_RUN:
     for var in ("RIVET_ANALYSIS_PATH", "RIVET_DATA_PATH", "RIVET_REF_PATH", "RIVET_INFO_PATH", "RIVET_PLOT_PATH"):
         if var in os.environ:
             abspaths = map(os.path.abspath, os.environ[var].split(":"))
             os.environ[var] = ":".join(abspaths)
     subproc = Popen(ch_cmd, cwd=opts.OUTPUTDIR, stdout=PIPE, stderr=PIPE)
     out, err = subproc.communicate()
     retcode = subproc.returncode
     if opts.VERBOSE or retcode != 0:
         print 'Output from rivet-cmphistos:\n', out
     if err :
         print 'Errors from rivet-cmphistos:\n', err
     if retcode != 0:
         print 'Crash in rivet-cmphistos code = ', retcode, ' exiting'
         exit(retcode)
 
 
 
 ## Write web page containing all (matched) plots
 ## Make web pages first so that we can load it locally in
 ## a browser to view the output before all plots are made
 if not opts.DRY_RUN:
 
     style = '''<style>
       html { font-family: sans-serif; }
       img { border: 0; }
       a { text-decoration: none; font-weight: bold; }
     </style>
     '''
 
     ## Include MathJax configuration
     script = ''
     if not opts.OFFLINE:
         script = '''\
         <script type="text/x-mathjax-config">
         MathJax.Hub.Config({
           tex2jax: {inlineMath: [["$","$"]]}
         });
         </script>
         <script type="text/javascript"
           src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
         </script>
         '''
 
     ## A helper function for metadata LaTeX -> HTML conversion
     from rivet.util import htmlify
 
     ## A timestamp HTML fragment to be used on each page:
     import datetime
     timestamp = '<p>Generated at %s</p>\n' % datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
 
     index = open(os.path.join(opts.OUTPUTDIR, "index.html"), "w")
     index.write('<html>\n<head>\n<title>%s</title>\n%s</head>\n<body>' % (opts.TITLE, style + script))
     if opts.BOOKLET and opts.VECTORFORMAT == "PDF":
         index.write('<h2><a href="booklet.pdf">%s</a></h2>\n\n' % opts.TITLE)
     else:
         index.write('<h2>%s</h2>\n\n' % opts.TITLE)
 
     if opts.SINGLE:
         ## Write table of contents
         index.write('<ul>\n')
         for analysis in analyses:
             summary = analysis
             ana = rivet.AnalysisLoader.getAnalysis(analysis)
             if ana:
                 summary = "%s (%s)" % (ana.summary(), analysis)
                 if opts.IGNORE_UNVALIDATED and ana.status() != "VALIDATED":
                     continue
             index.write('<li><a href="#%s">%s</a>\n' % (analysis, htmlify(summary)) )
         index.write('</ul>\n')
 
     for analysis in analyses:
         references = []
         summary = htmlify(analysis)
         description, inspireid, spiresid = None, None, None
 
         if analysis.find("_I") > 0:
             inspireid = analysis[analysis.rfind('_I')+2:len(analysis)]
         elif analysis.find("_S") > 0:
             spiresid = analysis[analysis.rfind('_S')+2:len(analysis)]
 
         ana = rivet.AnalysisLoader.getAnalysis(analysis)
         if ana:
             if ana.summary():
                 summary = htmlify("%s (%s)" % (ana.summary(), analysis))
             references = ana.references()
             description = htmlify(ana.description())
             spiresid = ana.spiresId()
             if opts.IGNORE_UNVALIDATED and ana.status().upper() != "VALIDATED":
                 continue
 
         if opts.SINGLE:
             index.write('\n<h3 style="clear:left; padding-top:2em;"><a name="%s">%s</a></h3>\n' % (analysis, summary))
         else:
             index.write('\n<h3><a href="%s/index.html" style="text-decoration:none;">%s</a></h3>\n' % (analysis, summary))
 
         reflist = []
         if inspireid:
             reflist.append('<a href="http://inspire-hep.net/record/%s">Inspire</a>' % inspireid)
             reflist.append('<a href="http://hepdata.cedar.ac.uk/view/ins%s">HepData</a>' % inspireid)
         elif spiresid:
         # elif ana.spiresId():
             reflist.append('<a href="http://inspire-hep.net/search?p=find+key+%s">Inspire</a>' % spiresid)
             reflist.append('<a href="http://hepdata.cedar.ac.uk/view/irn%s">HepData</a>' % spiresid)
         reflist += references
         index.write('<p>%s</p>\n' % " &#124; ".join(reflist))
 
         if description:
             index.write('<p style="font-size:smaller;">%s</p>\n' % description)
 
         anapath = os.path.join(opts.OUTPUTDIR, analysis)
         if not opts.SINGLE:
             if not os.path.exists(anapath):
                 os.makedirs(anapath)
             anaindex = open(os.path.join(anapath, "index.html"), 'w')
             anaindex.write('<html>\n<head>\n<title>%s &ndash; %s</title>\n%s</head>\n<body>\n' %
                            (htmlify(opts.TITLE), analysis, style + script))
             anaindex.write('<h3>%s</h3>\n' % htmlify(analysis))
             anaindex.write('<p><a href="../index.html">Back to index</a></p>\n')
             if description:
                 anaindex.write('<p>\n  %s\n</p>\n' % description)
         else:
             anaindex = index
 
         datfiles = glob.glob("%s/*.dat" % anapath)
         #print datfiles
 
         anaindex.write('<div style="float:none; overflow:auto; width:100%">\n')
         for datfile in sorted(datfiles):
             obsname = os.path.basename(datfile).replace(".dat", "")
             pngfile = obsname+".png"
             vecfile = obsname+"."+opts.VECTORFORMAT.lower()
             srcfile = obsname+".dat"
             if opts.SINGLE:
                 pngfile = os.path.join(analysis, pngfile)
                 vecfile = os.path.join(analysis, vecfile)
                 srcfile = os.path.join(analysis, srcfile)
 
             anaindex.write('  <div style="float:left; font-size:smaller; font-weight:bold;">\n')
             anaindex.write('    <a href="#%s-%s">&#9875;</a><a href="%s">&#8984</a> %s:<br/>\n' %
                            (analysis, obsname, srcfile, os.path.splitext(vecfile)[0]) )
             anaindex.write('    <a name="%s-%s"><a href="%s">\n' % (analysis, obsname, vecfile) )
             anaindex.write('      <img src="%s">\n' % pngfile )
             anaindex.write('    </a></a>\n')
             anaindex.write('  </div>\n')
         anaindex.write('</div>\n')
 
         if not opts.SINGLE:
             anaindex.write('<div style="float:none">%s</body>\n</html></div>\n' % timestamp)
             anaindex.close()
     index.write('<br>%s</body>\n</html>' % timestamp)
     index.close()
 
 # http://stackoverflow.com/questions/377017/test-if-executable-exists-in-python
 def which(program):
     import os
     def is_exe(fpath):
         return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
 
     fpath, fname = os.path.split(program)
     if fpath:
         if is_exe(program):
             return program
     else:
         for path in os.environ["PATH"].split(os.pathsep):
             path = path.strip('"')
             exe_file = os.path.join(path, program)
             if is_exe(exe_file):
                 return exe_file
 
     return None
 
 ## Run make-plots on all generated .dat files
 # sys.exit(0)
 mp_cmd = ["make-plots"]
 if opts.NUMTHREADS:
     mp_cmd.append("--num-threads=%d" % opts.NUMTHREADS)
 if opts.NO_CLEANUP:
     mp_cmd.append("--no-cleanup")
 if opts.NO_SUBPROC:
     mp_cmd.append("--no-subproc")
 if opts.VECTORFORMAT == "PDF":
     mp_cmd.append("--pdfpng")
 elif opts.VECTORFORMAT == "PS":
     mp_cmd.append("--pspng")
 if opts.OUTPUT_FONT:
     mp_cmd.append("--font=%s" % opts.OUTPUT_FONT)
 # if opts.OUTPUT_FONT.upper() == "PALATINO":
 #     mp_cmd.append("--palatino")
 # if opts.OUTPUT_FONT.upper() == "CM":
 #     mp_cmd.append("--cm")
 # elif opts.OUTPUT_FONT.upper() == "TIMES":
 #     mp_cmd.append("--times")
 # elif opts.OUTPUT_FONT.upper() == "HELVETICA":
 #     mp_cmd.append("--helvetica")
 # elif opts.OUTPUT_FONT.upper() == "MINION":
 #     mp_cmd.append("--minion")
 datfiles = []
 for analysis in analyses:
     anapath = os.path.join(opts.OUTPUTDIR, analysis)
     #print anapath
     anadatfiles = glob.glob("%s/*.dat" % anapath)
     datfiles += sorted(anadatfiles)
 if datfiles:
     mp_cmd += datfiles
     if opts.VERBOSE:
         mp_cmd.append("--verbose")
         print "Calling make-plots with the following options:"
         print " ".join(mp_cmd)
     if not opts.DRY_RUN:
         Popen(mp_cmd).wait()
         if opts.BOOKLET and opts.VECTORFORMAT=="PDF":
             if which("pdftk") is not None:
                 bookletcmd = ["pdftk"]
                 for analysis in analyses:
                     anapath = os.path.join(opts.OUTPUTDIR, analysis)
                     bookletcmd += sorted(glob.glob("%s/*.pdf" % anapath))
                 bookletcmd += ["cat", "output", "%s/booklet.pdf" % opts.OUTPUTDIR]
                 print bookletcmd
                 Popen(bookletcmd).wait()
             elif which("pdfmerge") is not None:
                 bookletcmd = ["pdfmerge"]
                 for analysis in analyses:
                     anapath = os.path.join(opts.OUTPUTDIR, analysis)
                     bookletcmd += sorted(glob.glob("%s/*.pdf" % anapath))
                 bookletcmd += ["%s/booklet.pdf" % opts.OUTPUTDIR]
                 print bookletcmd
                 Popen(bookletcmd).wait()
             else:
                 print "Neither pdftk nor pdfmerge available --- not booklet output possible"
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
@@ -1,313 +1,315 @@
 ## Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.59)
 AC_INIT([Rivet],[2.6.0-preHI],[rivet@projects.hepforge.org],[Rivet])
 
 ## Check and block installation into the src/build dir
 if test "$prefix" = "$PWD"; then
   AC_MSG_ERROR([Installation into the build directory is not supported: use a different --prefix argument])
 fi
 ## Force default prefix to have a path value rather than NONE
 if test "$prefix" = "NONE"; then
    prefix=/usr/local
 fi
 
 AC_CONFIG_SRCDIR([src/Core/Analysis.cc])
 AC_CONFIG_HEADERS([include/Rivet/Config/DummyConfig.hh include/Rivet/Config/RivetConfig.hh include/Rivet/Config/BuildOptions.hh])
 AM_INIT_AUTOMAKE([dist-bzip2 -Wall])
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
 AC_CONFIG_MACRO_DIR([m4])
 AC_SUBST(LT_OBJDIR)
 
 ## Package-specific #defines
 AC_DEFINE_UNQUOTED(RIVET_VERSION, "$PACKAGE_VERSION", "Rivet version string")
 AC_DEFINE_UNQUOTED(RIVET_NAME, "$PACKAGE_NAME", "Rivet name string")
 AC_DEFINE_UNQUOTED(RIVET_STRING, "$PACKAGE_STRING", "Rivet name and version string")
 AC_DEFINE_UNQUOTED(RIVET_TARNAME, "$PACKAGE_TARNAME", "Rivet short name string")
 AC_DEFINE_UNQUOTED(RIVET_BUGREPORT, "$PACKAGE_BUGREPORT", "Rivet contact email address")
 
 ## OS X
 AC_CEDAR_OSX
 
 ## Work out the LCG platform tag
 AC_LCG_TAG
 
 ## Set default compiler flags
 if test "x$CXXFLAGS" == "x"; then CXXFLAGS="-O2"; fi
 
 ## Compiler setup
 AC_LANG(C++)
 AC_PROG_CXX
 AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory])
 
 ## Store and propagate the compiler identity and flags
 RIVETCXX="$CXX"
 AC_SUBST(RIVETCXX)
 RIVETCXXFLAGS="$CXXFLAGS"
 AC_SUBST(RIVETCXXFLAGS)
 
 ## Checks for programs.
 AC_PROG_INSTALL
 AC_PROG_LN_S
 AC_DISABLE_STATIC
 AC_LIBTOOL_DLOPEN
 AC_PROG_LIBTOOL
 
 
 ## YODA histogramming library
-# TODO: we could download, configure, and install YODA automatically... but that is NASTY
 AC_CEDAR_LIBRARYANDHEADERS([YODA], , , [AC_MSG_ERROR([YODA is required])])
 YODABINPATH=$YODALIBPATH/../bin
 AC_SUBST(YODABINPATH)
 AC_PATH_PROG(YODACONFIG, yoda-config, [], [$YODALIBPATH/../bin:$PATH])
 YODA_PYTHONPATH=""
 if test -f "$YODACONFIG"; then
   AC_MSG_CHECKING([YODA version using yoda-config])
   YODA_VERSION=`$YODACONFIG --version`
   AC_MSG_RESULT([$YODA_VERSION])
   YODA_VERSION1=[`echo $YODA_VERSION | cut -d. -f1 | sed -e 's/\([0-9]*\).*/\1/g'`]
   YODA_VERSION2=[`echo $YODA_VERSION | cut -d. -f2 | sed -e 's/\([0-9]*\).*/\1/g'`]
   YODA_VERSION3=[`echo $YODA_VERSION | cut -d. -f3 | sed -e 's/\([0-9]*\).*/\1/g'`]
   let YODA_VERSION_INT=YODA_VERSION1*10000+YODA_VERSION2*100+YODA_VERSION3
   if test $YODA_VERSION_INT -lt 10500; then
     AC_MSG_ERROR([YODA version isn't sufficient: at least version 1.5.0 required])
   fi
   AC_MSG_CHECKING([YODA Python path using yoda-config])
   YODA_PYTHONPATH=`$YODACONFIG --pythonpath`
   AC_MSG_RESULT([$YODA_PYTHONPATH])
 fi
 AC_SUBST(YODA_PYTHONPATH)
 
 
 ## HepMC event record library
 AC_CEDAR_LIBRARYANDHEADERS([HepMC], , , [AC_MSG_ERROR([HepMC is required])])
 oldCPPFLAGS=$CPPFLAGS
 CPPFLAGS="$CPPFLAGS -I$HEPMCINCPATH"
 if test -e "$HEPMCINCPATH/HepMC/HepMCDefs.h"; then
   AC_LANG_CONFTEST([AC_LANG_SOURCE([#include <iostream>
 #include "HepMC/HepMCDefs.h"
 int main() { std::cout << HEPMC_VERSION << std::endl; return 0; }])])
 else
   AC_LANG_CONFTEST([AC_LANG_SOURCE([#include <iostream>
 #include "HepMC/defs.h"
 int main() { std::cout << VERSION << std::endl; return 0; }])])
 fi
 if test -f conftest.cc; then
   $CXX $CPPFLAGS conftest.cc -o conftest 2>&1 1>&5
 elif test -f conftest.C; then
   $CXX $CPPFLAGS conftest.C -o conftest 2>&1 1>&5
 else
   $CXX $CPPFLAGS conftest.cpp -o conftest 2>&1 1>&5
 fi
 hepmc_version=`./conftest`
 if test x$hepmc_version != x; then
   let hepmc_major=`echo "$hepmc_version" | cut -d. -f1`
   let hepmc_minor=`echo "$hepmc_version" | cut -d. -f2`
 fi
 rm -f conftest conftest.cpp conftest.cc conftest.C
 HEPMC_VERSION=$hepmc_major$hepmc_minor
 AC_MSG_NOTICE([HepMC version is $hepmc_version -> $HEPMC_VERSION])
 AC_SUBST(HEPMC_VERSION)
 CPPFLAGS=$oldCPPFLAGS
 
 
 ## FastJet clustering library
 AC_CEDAR_LIBRARYANDHEADERS([fastjet], , , [AC_MSG_ERROR([FastJet is required])])
 AC_PATH_PROG(FJCONFIG, fastjet-config, [], $FASTJETPATH/bin:$PATH)
 if test -f "$FJCONFIG"; then
   AC_MSG_CHECKING([FastJet version using fastjet-config])
   fjversion=`$FJCONFIG --version`
   AC_MSG_RESULT([$fjversion])
   fjmajor=$(echo $fjversion | cut -f1 -d.)
   fjminor=$(echo $fjversion | cut -f2 -d.)
   fjmicro=$(echo $fjversion | cut -f3 -d.)
   if test "$fjmajor" -lt 3; then
     AC_MSG_ERROR([FastJet version 3.0.0 or later is required])
   fi
   FASTJETCONFIGLIBADD="$($FJCONFIG --plugins --shared --libs)"
 else
   FASTJETCONFIGLIBADD="-L$FASTJETLIBPATH -l$FASTJETLIBNAME"
   FASTJETCONFIGLIBADD="$FASTJETCONFIGLIBADD -lSISConePlugin -lsiscone -lsiscone_spherical"
   FASTJETCONFIGLIBADD="$FASTJETCONFIGLIBADD -lCDFConesPlugin -lD0RunIIConePlugin -lNestedDefsPlugin"
   FASTJETCONFIGLIBADD="$FASTJETCONFIGLIBADD -lTrackJetPlugin -lATLASConePlugin -lCMSIterativeConePlugin"
   FASTJETCONFIGLIBADD="$FASTJETCONFIGLIBADD -lEECambridgePlugin -lJadePlugin"
 fi;
 AC_MSG_NOTICE([FastJet LIBADD = $FASTJETCONFIGLIBADD])
 AC_SUBST(FASTJETCONFIGLIBADD)
 # Check for FastJet headers that require the --enable-all(cxx)plugins option
 FASTJET_ERRMSG="Required FastJet plugin headers were not found: did you build FastJet with the --enable-allcxxplugins option?"
 oldCPPFLAGS=$CPPFLAGS
 CPPFLAGS="$CPPFLAGS -I$FASTJETINCPATH"
 AC_CHECK_HEADER([fastjet/D0RunIIConePlugin.hh], [], [AC_MSG_ERROR([$FASTJET_ERRMSG])])
 AC_CHECK_HEADER([fastjet/TrackJetPlugin.hh], [], [AC_MSG_ERROR([$FASTJET_ERRMSG])])
 CPPFLAGS=$oldCPPFLAGS
 
 
-## GNU Scientific Library
-#AC_SEARCH_GSL
-#AC_CEDAR_HEADERS([gsl], , , [AC_MSG_ERROR([GSL (GNU Scientific Library) is required])])
-#oldCPPFLAGS=$CPPFLAGS
-#CPPFLAGS="$CPPFLAGS -I$GSLINCPATH"
-#AC_CHECK_HEADER([gsl/gsl_vector.h], [], [AC_MSG_ERROR([GSL vectors not found.])])
-#CPPFLAGS=$oldCPPFLAGS
+# ## GNU Scientific Library
+# AC_SEARCH_GSL
+# AC_CEDAR_HEADERS([gsl], , , [AC_MSG_ERROR([GSL (GNU Scientific Library) is required])])
+# oldCPPFLAGS=$CPPFLAGS
+# CPPFLAGS="$CPPFLAGS -I$GSLINCPATH"
+# AC_CHECK_HEADER([gsl/gsl_vector.h], [], [AC_MSG_ERROR([GSL vectors not found.])])
+# CPPFLAGS=$oldCPPFLAGS
 
 
 ## Disable build/install of standard analyses
 AC_ARG_ENABLE([analyses],
   [AC_HELP_STRING(--disable-analyses, [don't try to build or install standard analyses])],
   [], [enable_analyses=yes])
 if test x$enable_analyses != xyes; then
    AC_MSG_WARN([Not building standard Rivet analyses, by request])
 fi
 AM_CONDITIONAL(ENABLE_ANALYSES, [test x$enable_analyses = xyes])
 
 
 ## Build LaTeX docs if possible...
 AC_PATH_PROG(PDFLATEX, pdflatex)
 AM_CONDITIONAL(WITH_PDFLATEX, [test x$PDFLATEX != x])
 ## ... unless told otherwise!
 AC_ARG_ENABLE([pdfmanual],
   [AC_HELP_STRING(--enable-pdfmanual, [build and install the manual])],
   [], [enable_pdfmanual=no])
 if test x$enable_pdfmanual = xyes; then
    AC_MSG_WARN([Building Rivet manual, by request])
 fi
 AM_CONDITIONAL(ENABLE_PDFMANUAL, [test x$enable_pdfmanual = xyes])
 
 ## Build Doxygen documentation if possible
 AC_ARG_ENABLE([doxygen],
   [AC_HELP_STRING(--disable-doxygen, [don't try to make Doxygen documentation])],
   [], [enable_doxygen=yes])
 if test x$enable_doxygen = xyes; then
    AC_PATH_PROG(DOXYGEN, doxygen)
 fi
 AM_CONDITIONAL(WITH_DOXYGEN, [test x$DOXYGEN != x])
 
 ## Build asciidoc docs if possible
 AC_PATH_PROG(ASCIIDOC, asciidoc)
 AM_CONDITIONAL(WITH_ASCIIDOC, [test x$ASCIIDOC != x])
 
 
 ## Python extension
 AC_ARG_ENABLE(pyext, [AC_HELP_STRING(--disable-pyext,
   [don't build Python module (default=build)])],
   [], [enable_pyext=yes])
 ## Basic Python checks
 if test x$enable_pyext == xyes; then
   AX_PYTHON_DEVEL([>= '2.6'])
   AC_SUBST(PYTHON_VERSION)
   RIVET_PYTHONPATH=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True);"`
   AC_SUBST(RIVET_PYTHONPATH)
   if test -z "$PYTHON"; then
     AC_MSG_ERROR([Can't build Python extension since python can't be found])
     enable_pyext=no
   fi
   if test -z "$PYTHON_CPPFLAGS"; then
     AC_MSG_ERROR([Can't build Python extension since Python.h header file cannot be found])
     enable_pyext=no
   fi
 fi
 AM_CONDITIONAL(ENABLE_PYEXT, [test x$enable_pyext == xyes])
 
 
 ## Cython checks
 if test x$enable_pyext == xyes; then
-  AM_CHECK_CYTHON([0.23.5], [:], [:])
+  AM_CHECK_CYTHON([0.24.0], [:], [:])
   if test x$CYTHON_FOUND = xyes; then
-    AC_MSG_NOTICE([Cython >= 0.23.5 found: Python extension source can be rebuilt (for developers)])
+    AC_MSG_NOTICE([Cython >= 0.24 found: Python extension source can be rebuilt (for developers)])
   fi
 
   AC_CHECK_FILE([pyext/rivet/core.cpp],
                 [],
                 [if test "x$CYTHON_FOUND" != "xyes"; then
                   AC_MSG_ERROR([Cython is required for --enable-pyext, no pre-built core.cpp was found.])
                 fi])
 
   cython_compiler=$CXX
   ## Set extra Python extension build flags (to cope with Cython output code oddities)
   PYEXT_CXXFLAGS="$CXXFLAGS"
   AC_CEDAR_CHECKCXXFLAG([-Wno-unused-but-set-variable], [PYEXT_CXXFLAGS="$PYEXT_CXXFLAGS -Wno-unused-but-set-variable"])
   AC_CEDAR_CHECKCXXFLAG([-Wno-sign-compare], [PYEXT_CXXFLAGS="$PYEXT_CXXFLAGS -Wno-sign-compare"])
   AC_SUBST(PYEXT_CXXFLAGS)
   AC_MSG_NOTICE([All Python build checks successful: 'rivet' Python extension will be built])
 fi
 AM_CONDITIONAL(WITH_CYTHON, [test x$CYTHON_FOUND = xyes])
 
 
 ## Set default build flags
 AM_CPPFLAGS="-I\$(top_srcdir)/include -I\$(top_builddir)/include"
 #AM_CPPFLAGS="$AM_CPPFLAGS -I\$(top_srcdir)/include/eigen3"
 #AM_CPPFLAGS="$AM_CPPFLAGS \$(GSL_CPPFLAGS)"
 dnl AM_CPPFLAGS="$AM_CPPFLAGS \$(BOOST_CPPFLAGS)"
 AM_CPPFLAGS="$AM_CPPFLAGS -I\$(YODAINCPATH)"
 AM_CPPFLAGS="$AM_CPPFLAGS -I\$(HEPMCINCPATH)"
 AM_CPPFLAGS="$AM_CPPFLAGS -I\$(FASTJETINCPATH)"
 AC_CEDAR_CHECKCXXFLAG([-pedantic], [AM_CXXFLAGS="$AM_CXXFLAGS -pedantic"])
 AC_CEDAR_CHECKCXXFLAG([-Wall], [AM_CXXFLAGS="$AM_CXXFLAGS -Wall"])
 AC_CEDAR_CHECKCXXFLAG([-Wno-long-long], [AM_CXXFLAGS="$AM_CXXFLAGS -Wno-long-long"])
 AC_CEDAR_CHECKCXXFLAG([-Wno-format], [AM_CXXFLAGS="$AM_CXXFLAGS -Wno-format"])
 dnl AC_CEDAR_CHECKCXXFLAG([-Wno-unused-variable], [AM_CXXFLAGS="$AM_CXXFLAGS -Wno-unused-variable"])
 AC_CEDAR_CHECKCXXFLAG([-Werror=uninitialized], [AM_CXXFLAGS="$AM_CXXFLAGS -Werror=uninitialized"])
 AC_CEDAR_CHECKCXXFLAG([-Werror=delete-non-virtual-dtor], [AM_CXXFLAGS="$AM_CXXFLAGS -Werror=delete-non-virtual-dtor"])
 
+## Add OpenMP-enabling flags if possible
+AX_OPENMP([AM_CXXFLAGS="$AM_CXXFLAGS $OPENMP_CXXFLAGS"])
 
 ## Debug flag (default=-DNDEBUG, enabled=-g)
 AC_ARG_ENABLE([debug], [AC_HELP_STRING(--enable-debug,
   [build with debugging symbols  @<:@default=no@:>@])], [], [enable_debug=no])
 if test x$enable_debug == xyes; then
   AM_CXXFLAGS="$AM_CXXFLAGS -g"
 fi
 
 
 ## Extra warnings flag (default=none)
 AC_ARG_ENABLE([extra-warnings], [AC_HELP_STRING(--enable-extra-warnings,
   [build with extra compiler warnings (recommended for developers)  @<:@default=no@:>@])], [], [enable_extra_warnings=no])
 if test x$enable_extra_warnings == xyes; then
    AC_CEDAR_CHECKCXXFLAG([-Wextra], [AM_CXXFLAGS="$AM_CXXFLAGS -Wextra "])
 fi
 
 
 AC_SUBST(AM_CPPFLAGS)
 AC_SUBST(AM_CXXFLAGS)
 
 AC_EMPTY_SUBST
+AC_CONFIG_FILES(Makefile Doxyfile)
 AC_CONFIG_FILES(include/Makefile include/Rivet/Makefile)
 AC_CONFIG_FILES(src/Makefile)
 AC_CONFIG_FILES(src/Core/Makefile src/Core/yamlcpp/Makefile)
 AC_CONFIG_FILES(src/Tools/Makefile)
 AC_CONFIG_FILES(src/Projections/Makefile)
-AC_CONFIG_FILES(src/Analyses/Makefile)
+AC_CONFIG_FILES(src/AnalysisTools/Makefile)
+AC_CONFIG_FILES(analyses/Makefile)
 AC_CONFIG_FILES(test/Makefile)
 AC_CONFIG_FILES(pyext/Makefile pyext/rivet/Makefile pyext/setup.py)
-AC_CONFIG_FILES(data/Makefile data/refdata/Makefile data/anainfo/Makefile data/plotinfo/Makefile data/texmf/Makefile)
+AC_CONFIG_FILES(data/Makefile data/texmf/Makefile)
 AC_CONFIG_FILES(doc/Makefile)
 AC_CONFIG_FILES(doc/rivetversion.sty doc/diffanas)
 AC_CONFIG_FILES(bin/Makefile bin/rivet-config bin/rivet-buildplugin)
-AC_CONFIG_FILES(Makefile Doxyfile)
 AC_CONFIG_FILES(rivetenv.sh rivetenv.csh rivet.pc)
 
 AC_OUTPUT
 
 if test x$enable_pyrivet == xyes; then
    cat <<EOF
 
 ************************************************************
 RIVET CONFIGURED!
 
 Now build and install (to the $prefix tree) with e.g.
 make -j2 && make -j2 install
 
 To use Rivet, we recommend reading HepMC files from a file
 or pipe (the latter may be made with mkfifo) using the
 'rivet' executable.
 
 For a more pleasant command line experience, you can include
 the data/rivet-completion file into your .bashrc file,
 or your bash_completion.d directory if you have one.
 
 The rivetenv.*sh files will not be installed, but can help you
 to set up a Rivet runtime environment in future.
 ************************************************************
 EOF
 fi
diff --git a/data/Makefile.am b/data/Makefile.am
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -1,1 +1,1 @@
-SUBDIRS = refdata anainfo plotinfo texmf
+SUBDIRS = texmf
diff --git a/data/anainfo/ATLAS_2016_CONF_2016_078.info b/data/anainfo/ATLAS_2016_CONF_2016_078.info
deleted file mode 100644
--- a/data/anainfo/ATLAS_2016_CONF_2016_078.info
+++ /dev/null
@@ -1,17 +0,0 @@
-Name: ATLAS_2016_CONF_2016_078
-Year: 2016
-Summary: ATLAS ICHEP16 0-lepton SUSY search at 13~\TeV with 13.2/fb
-Experiment: ATLAS
-Collider: LHC
-Status: UNVALIDATED
-Authors:
- - Andy Buckley <andy.buckley@cern.ch>
-RunInfo: BSM signal events.
-NumEvents: 10000
-NeedCrossSection: yes
-Beams: [p+, p+]
-Energies: [13000]
-Description:
-  'ATLAS search for SUSY in 13~TeV $pp$ collisions at LHC Run~2, using 13.2/fb of
-  integrated luminosity and events containing missing transverse momentum and
-  no isolated high-energy leptons.'
diff --git a/data/anainfo/CMS_2016_I1473674.info b/data/anainfo/CMS_2016_I1473674.info
deleted file mode 100644
--- a/data/anainfo/CMS_2016_I1473674.info
+++ /dev/null
@@ -1,36 +0,0 @@
-Name: CMS_2016_I1473674
-Year: 2016
-Summary: Measurement of the differential cross sections for top quark pair production as a function of kinematic event variables at sqrt(s) = 8 TeV
-Experiment: CMS
-Collider: LHC
-InspireID: 1473674
-Status: VALIDATED
-Authors:
- - Markus Seidel <markus.seidel@cern.ch>
- - Lukas Kreczko <kreczko@cern.ch>
- - Emyr Clement <Emyr.Clement@bristol.ac.uk>
-References:
- - arXiv:1607.00837
-RunInfo:
-  ttbar events at sqrt(s) = 8 TeV (inclusive or lepton+jets decay mode)
-Luminosity: 19.7 / fb
-Beams: [p+, p+]
-Energies: [8000]
-Description:
-	'Measurements are reported of the normalized differential cross sections for top quark pair production with respect to four kinematic event variables: the missing transverse energy; the scalar sum of the jet transverse momentum (pT); the scalar sum of the pT of all objects in the event; and the pT of leptonically decaying W bosons from top quark decays.'
-
-BibKey: Khachatryan:2016oou
-BibTeX: '@article{Khachatryan:2016oou,
-      author         = "Khachatryan, Vardan and others",
-      title          = "{Measurement of the differential cross sections for top
-                        quark pair production as a function of kinematic event
-                        variables in pp collisions at $\sqrt{s}$ = 7 and 8 TeV}",
-      collaboration  = "CMS",
-      journal        = "Submitted to: Phys. Rev. D",
-      year           = "2016",
-      eprint         = "1607.00837",
-      archivePrefix  = "arXiv",
-      primaryClass   = "hep-ex",
-      reportNumber   = "CMS-TOP-12-042, CERN-EP-2016-139",
-      SLACcitation   = "%%CITATION = ARXIV:1607.00837;%%"
-}'
diff --git a/data/anainfo/CMS_2016_PAS_SUS_16_14.info b/data/anainfo/CMS_2016_PAS_SUS_16_14.info
deleted file mode 100644
--- a/data/anainfo/CMS_2016_PAS_SUS_16_14.info
+++ /dev/null
@@ -1,22 +0,0 @@
-Name: CMS_2016_PAS_SUS_16_14
-Year: 2013
-Summary: Search for supersymmetry in events with jets and missing transverse momentum at 13~\TeV
-Experiment: CMS
-Collider: LHC
-Status: UNVALIDATED
-Authors:
- - Andy Buckley <andy.buckley@cern.ch>
-RunInfo: BSM physics signal events
-NumEvents: 50000
-NeedCrossSection: yes
-Beams: [p+, p+]
-Energies: [13000]
-Description:
-  'A search for supersymmetry in all-hadronic events with large missing transverse
-  momentum, produced in proton--proton collisions at $\sqrt{s} = 13~\TeV$. The data
-  sample, corresponding to an integrated luminosity of 12.9/fb, was collected with
-  the CMS detector at the CERN LHC in 2016. The data are examined in search regions
-  of jet multiplicity, tagged bottom quark jet multiplicity, missing transverse momentum,
-  and the scalar sum of jet transverse momenta. The observed numbers of events in all
-  search regions are found to be consistent with the expectations from standard model
-  processes.'
diff --git a/data/anainfo/Makefile.am b/data/anainfo/Makefile.am
deleted file mode 100644
--- a/data/anainfo/Makefile.am
+++ /dev/null
@@ -1,430 +0,0 @@
-dist_pkgdata_DATA = \
-  ALEPH_1991_S2435284.info \
-  ALEPH_1995_I382179.info \
-  ALEPH_1996_S3486095.info \
-  ALEPH_1996_S3196992.info \
-  ALEPH_1999_S4193598.info \
-  ALEPH_2001_S4656318.info \
-  ALEPH_2002_S4823664.info \
-  ALEPH_2004_S5765862.info \
-  ALICE_2010_S8624100.info \
-  ALICE_2010_S8625980.info \
-  ALICE_2010_S8706239.info \
-  ALICE_2011_S8909580.info \
-  ALICE_2011_S8945144.info \
-  ALICE_2012_I1116147.info \
-  ALICE_2012_I1181770.info \
-  ALICE_2015_I1357424.info \
-  ALICE_2014_I1300380.info \
-  ARGUS_1993_S2653028.info \
-  ARGUS_1993_S2669951.info \
-  ARGUS_1993_S2789213.info \
-  ATLAS_2010_S8591806.info \
-  ATLAS_2010_S8817804.info \
-  ATLAS_2010_S8894728.info \
-  ATLAS_2010_S8914702.info \
-  ATLAS_2010_S8918562.info \
-  ATLAS_2010_S8919674.info \
-  ATLAS_2010_CONF_2010_049.info \
-  ATLAS_2011_S8924791.info \
-  ATLAS_2011_S8971293.info \
-  ATLAS_2011_S8983313.info \
-  ATLAS_2011_S8994773.info \
-  ATLAS_2011_S9002537.info \
-  ATLAS_2011_S9019561.info \
-  ATLAS_2011_S9041966.info \
-  ATLAS_2011_S9120807.info \
-  ATLAS_2011_S9126244.info \
-  ATLAS_2011_S9128077.info \
-  ATLAS_2011_S9131140.info \
-  ATLAS_2011_S9108483.info \
-  ATLAS_2011_S9212183.info \
-  ATLAS_2011_I894867.info \
-  ATLAS_2011_I921594.info \
-  ATLAS_2011_I928289_W.info \
-  ATLAS_2011_I928289_Z.info \
-  ATLAS_2011_I930220.info \
-  ATLAS_2011_S9035664.info \
-  ATLAS_2011_I919017.info \
-  ATLAS_2011_I925932.info \
-  ATLAS_2011_I926145.info \
-  ATLAS_2011_I929691.info \
-  ATLAS_2011_I944826.info \
-  ATLAS_2011_I945498.info \
-  ATLAS_2011_I954993.info \
-  ATLAS_2011_S9225137.info \
-  ATLAS_2011_S9212353.info \
-  ATLAS_2011_CONF_2011_090.info \
-  ATLAS_2011_CONF_2011_098.info \
-  ATLAS_2012_I943401.info \
-  ATLAS_2012_I946427.info \
-  ATLAS_2012_I1083318.info \
-  ATLAS_2012_I1082936.info \
-  ATLAS_2012_I1084540.info \
-  ATLAS_2012_I1093734.info \
-  ATLAS_2012_I1093738.info \
-  ATLAS_2012_I1094061.info \
-  ATLAS_2012_I1094564.info \
-  ATLAS_2012_I1094568.info \
-  ATLAS_2012_I1095236.info \
-  ATLAS_2012_I1082009.info \
-  ATLAS_2012_I1091481.info \
-  ATLAS_2012_I1119557.info \
-  ATLAS_2012_I1124167.info \
-  ATLAS_2012_I1125575.info \
-  ATLAS_2012_I1183818.info \
-  ATLAS_2012_I1188891.info \
-  ATLAS_2012_I1112263.info \
-  ATLAS_2012_I1125961.info \
-  ATLAS_2012_I1126136.info \
-  ATLAS_2012_I1117704.info \
-  ATLAS_2012_I1118269.info \
-  ATLAS_2012_I1180197.info \
-  ATLAS_2012_I1186556.info \
-  ATLAS_2012_I1190891.info \
-  ATLAS_2012_I1199269.info \
-  ATLAS_2012_I1203852.info \
-  ATLAS_2012_I1204447.info \
-  ATLAS_2012_I1204784.info \
-  ATLAS_2012_CONF_2012_001.info \
-  ATLAS_2012_CONF_2012_103.info \
-  ATLAS_2012_CONF_2012_104.info \
-  ATLAS_2012_CONF_2012_105.info \
-  ATLAS_2012_CONF_2012_109.info \
-  ATLAS_2012_CONF_2012_153.info \
-  ATLAS_2013_I1190187.info \
-  ATLAS_2013_I1217863_W.info \
-  ATLAS_2013_I1217863_W_EL.info \
-  ATLAS_2013_I1217863_W_MU.info \
-  ATLAS_2013_I1217863_Z.info \
-  ATLAS_2013_I1217863_Z_EL.info \
-  ATLAS_2013_I1217863_Z_MU.info \
-  ATLAS_2013_I1217867.info \
-  ATLAS_2013_I1219109.info \
-  ATLAS_2013_I1219109_EL.info \
-  ATLAS_2013_I1219109_MU.info \
-  ATLAS_2013_I1230812.info \
-  ATLAS_2013_I1230812_EL.info \
-  ATLAS_2013_I1230812_MU.info \
-  ATLAS_2013_I1243871.info \
-  ATLAS_2013_I1263495.info \
-  ATLAS_2014_I1268975.info \
-  ATLAS_2014_I1279489.info \
-  ATLAS_2014_I1282441.info \
-  ATLAS_2014_I1298811.info \
-  ATLAS_2014_I1304688.info \
-  ATLAS_2014_I1307756.info \
-  ATLAS_2014_I1306294.info \
-  ATLAS_2014_I1306294_EL.info \
-  ATLAS_2014_I1306294_MU.info \
-  ATLAS_2014_I1315949.info \
-  ATLAS_2014_I1325553.info \
-  ATLAS_2014_I1300647.info \
-  ATLAS_2014_I1288706.info \
-  ATLAS_2014_I1307243.info \
-  ATLAS_2014_I1312627.info \
-  ATLAS_2014_I1312627_EL.info \
-  ATLAS_2014_I1312627_MU.info \
-  ATLAS_2014_I1306615.info \
-  ATLAS_2015_I1393758.info \
-  ATLAS_2015_I1364361.info \
-  ATLAS_2015_I1345452.info \
-  ATLAS_2015_I1351916.info \
-  ATLAS_2015_I1351916_EL.info \
-  ATLAS_2015_I1351916_MU.info \
-  ATLAS_2013_I1216670.info \
-  ATLAS_2013_I1244522.info \
-  ATLAS_2014_I1282447.info \
-  ATLAS_2014_I1298023.info \
-  ATLAS_2014_I1319490.info \
-  ATLAS_2014_I1319490_EL.info \
-  ATLAS_2014_I1319490_MU.info \
-  ATLAS_2014_I1326641.info \
-  ATLAS_2014_I1327229.info \
-  ATLAS_2015_I1387176.info \
-  ATLAS_2015_CONF_2015_041.info \
-  ATLAS_2015_CONF_2015_041_EL.info \
-  ATLAS_2015_CONF_2015_041_MU.info \
-  ATLAS_2015_I1376945.info \
-  ATLAS_2015_I1390114.info \
-  ATLAS_2015_I1394679.info \
-  ATLAS_2015_I1397635.info \
-  ATLAS_2015_I1397637.info \
-  ATLAS_2015_I1408516.info \
-  ATLAS_2015_I1408516_EL.info \
-  ATLAS_2015_I1408516_MU.info \
-  ATLAS_2015_I1404878.info \
-  ATLAS_2016_I1419070.info \
-  ATLAS_2016_I1419652.info \
-  ATLAS_2016_I1424838.info \
-  ATLAS_2016_I1426695.info \
-  ATLAS_2016_I1444991.info \
-  ATLAS_2016_I1452559.info \
-  ATLAS_2016_I1457605.info \
-  ATLAS_2016_I1458270.info \
-  ATLAS_2016_I1467230.info \
-  ATLAS_2016_I1467454.info \
-  ATLAS_2016_I1467454_EL.info \
-  ATLAS_2016_I1467454_MU.info \
-  ATLAS_2016_I1468167.info \
-  ATLAS_2016_I1468168.info \
-  ATLAS_2016_I1479760.info \
-  ATLAS_2016_CONF_2016_037.info \
-  ATLAS_2016_CONF_2016_054.info \
-  ATLAS_2016_CONF_2016_078.info \
-  ATLAS_2016_CONF_2016_094.info \
-  BABAR_2003_I593379.info \
-  BABAR_2005_S6181155.info \
-  BABAR_2007_S6895344.info \
-  BABAR_2007_S7266081.info \
-  BABAR_2013_I1116411.info \
-  BABAR_2013_I1238276.info \
-  BABAR_2015_I1334693.info \
-  BELLE_2001_S4598261.info \
-  BELLE_2008_I786560.info \
-  BELLE_2011_I878990.info \
-  BELLE_2013_I1216515.info \
-  BELLE_2013_I1238273.info \
-  BELLE_2015_I1397632.info \
-  CDF_1988_S1865951.info \
-  CDF_1990_S2089246.info \
-  CDF_1993_S2742446.info \
-  CDF_1994_S2952106.info \
-  CDF_1996_S3108457.info \
-  CDF_1996_S3349578.info \
-  CDF_1996_S3418421.info \
-  CDF_1997_S3541940.info \
-  CDF_1998_S3618439.info \
-  CDF_2000_S4155203.info \
-  CDF_2000_S4266730.info \
-  CDF_2001_S4517016.info \
-  CDF_2001_S4563131.info \
-  CDF_2001_S4751469.info \
-  CDF_2002_S4796047.info \
-  CDF_2004_S5839831.info \
-  CDF_2005_S6080774.info \
-  CDF_2005_S6217184.info \
-  CDF_2006_S6450792.info \
-  CDF_2006_S6653332.info \
-  CDF_2007_S7057202.info \
-  CDF_2008_S7540469.info \
-  CDF_2008_S7541902.info \
-  CDF_2008_S7782535.info \
-  CDF_2008_S7828950.info \
-  CDF_2008_S8093652.info \
-  CDF_2008_S8095620.info \
-  CDF_2009_S8233977.info \
-  CDF_2009_NOTE_9936.info \
-  CDF_2009_I856131.info \
-  CDF_2009_S8436959.info \
-  CDF_2010_S8591881_DY.info \
-  CDF_2010_S8591881_QCD.info \
-  CDF_2012_NOTE10874.info \
-  CDF_2012_I1124333.info \
-  CDF_2015_1388868.info \
-  CLEO_2004_S5809304.info\
-  CMS_2010_S8547297.info \
-  CMS_2010_S8656010.info \
-  CMS_2011_S8884919.info \
-  CMS_2011_S9215166.info \
-  CMS_2012_I941555.info \
-  CMS_2011_I954992.info \
-  CMS_2011_S8941262.info \
-  CMS_2011_S8950903.info \
-  CMS_2011_S8957746.info \
-  CMS_2011_S8968497.info \
-  CMS_2011_S8973270.info \
-  CMS_2011_S8978280.info \
-  CMS_2011_S9086218.info \
-  CMS_2011_S9088458.info \
-  CMS_2011_S9120041.info \
-  CMS_2012_I1087342.info \
-  CMS_2012_I1090423.info \
-  CMS_2012_I1102908.info \
-  CMS_2012_I1107658.info \
-  CMS_2012_I1184941.info \
-  CMS_2012_I1193338.info \
-  CMS_2013_I1122847.info \
-  CMS_2013_I1208923.info \
-  CMS_2013_I1209721.info \
-  CMS_2013_I1218372.info \
-  CMS_2013_I1223519.info \
-  CMS_2013_I1224539_DIJET.info \
-  CMS_2013_I1224539_WJET.info \
-  CMS_2013_I1224539_ZJET.info \
-  CMS_2013_I1256943.info \
-  CMS_2013_I1258128.info \
-  CMS_2013_I1261026.info \
-  CMS_2013_I1265659.info \
-  CMS_2013_I1272853.info \
-  CMS_2013_I1273574.info \
-  CMS_2012_I1298807.info \
-  CMS_2014_I1298810.info \
-  CMS_2014_I1303894.info \
-  CMS_2014_I1305624.info \
-  CMS_2015_I1310737.info \
-  CMS_2015_I1327224.info \
-  CMS_2015_I1346843.info \
-  CMS_2015_I1356998.info \
-  CMS_2015_I1370682.info \
-  CMS_2015_I1384119.info \
-  CMS_2015_I1385107.info \
-  CMS_2015_I1397174.info \
-  CMS_2016_I1459051.info \
-  CMS_2016_I1473674.info \
-  CMSTOTEM_2014_I1294140.info \
-  CMS_2010_PAS_QCD_10_024.info \
-  CMS_2012_PAS_QCD_11_010.info \
-  CMS_2012_PAS_FSQ_12_020.info \
-  CMS_2016_PAS_SUS_16_14.info \
-  D0_1995_I398175.info \
-  D0_1996_S3214044.info \
-  D0_1996_S3324664.info \
-  D0_2000_S4480767.info \
-  D0_2000_I499943.info  \
-  D0_2001_S4674421.info \
-  D0_2004_S5992206.info \
-  D0_2006_S6438750.info \
-  D0_2007_S7075677.info \
-  D0_2008_S6879055.info \
-  D0_2008_S7554427.info \
-  D0_2008_S7662670.info \
-  D0_2008_S7719523.info \
-  D0_2008_S7837160.info \
-  D0_2008_S7863608.info \
-  D0_2009_S8202443.info \
-  D0_2009_S8320160.info \
-  D0_2009_S8349509.info \
-  D0_2010_S8566488.info \
-  D0_2010_S8570965.info \
-  D0_2010_S8671338.info \
-  D0_2010_S8821313.info \
-  D0_2011_I895662.info \
-  D0_2015_I1324946.info \
-  D0_2000_I503361.info \
-  E735_1998_S3905616.info \
-  DELPHI_1995_S3137023.info \
-  DELPHI_1996_S3430090.info \
-  DELPHI_1999_S3960137.info \
-  DELPHI_2000_S4328825.info \
-  DELPHI_2002_069_CONF_603.info \
-  DELPHI_2011_I890503.info \
-  EXAMPLE.info \
-  EXAMPLE_CUTS.info \
-  EXAMPLE_SMEAR.info \
-  H1_1994_S2919893.info \
-  H1_1995_S3167097.info \
-  H1_2000_S4129130.info \
-  JADE_OPAL_2000_S4300807.info \
-  JADE_1998_S3612880.info \
-  LHCB_2010_S8758301.info \
-  LHCB_2010_I867355.info \
-  LHCB_2011_I917009.info \
-  LHCB_2011_I919315.info \
-  LHCB_2012_I1119400.info \
-  LHCB_2012_I1208102.info \
-  LHCB_2013_I1208105.info \
-  LHCB_2013_I1218996.info \
-  LHCB_2014_I1262703.info \
-  LHCB_2014_I1281685.info \
-  LHCB_2015_I1333223.info \
-  LHCF_2012_I1115479.info \
-  MC_Centrality.info \
-  MC_DIPHOTON.info \
-  MC_ELECTRONS.info \
-  MC_GENERIC.info \
-  MC_HFJETS.info \
-  MC_HINC.info \
-  MC_HJETS.info \
-  MC_HHJETS.info \
-  MC_HKTSPLITTINGS.info \
-  MC_IDENTIFIED.info \
-  MC_JETS.info \
-  MC_JETTAGS.info \
-  MC_KTSPLITTINGS.info \
-  MC_LEADJETUE.info \
-  MC_MET.info \
-  MC_MUONS.info \
-  MC_PDFS.info \
-  MC_PHOTONINC.info \
-  MC_PHOTONJETS.info \
-  MC_PHOTONKTSPLITTINGS.info \
-  MC_PHOTONS.info \
-  MC_PRINTEVENT.info \
-  MC_QCD_PARTONS.info \
-  MC_SUSY.info \
-  MC_TAUS.info \
-  MC_TTBAR.info \
-  MC_VH2BB.info \
-  MC_WINC.info \
-  MC_WINC_EL.info \
-  MC_WINC_MU.info \
-  MC_WINC_EL_BARE.info \
-  MC_WINC_MU_BARE.info \
-  MC_WJETS.info \
-  MC_WJETS_EL.info \
-  MC_WJETS_MU.info \
-  MC_WJETS_EL_BARE.info \
-  MC_WJETS_MU_BARE.info \
-  MC_WKTSPLITTINGS.info \
-  MC_WPOL.info \
-  MC_WWINC.info \
-  MC_WWJETS.info \
-  MC_WWKTSPLITTINGS.info \
-  MC_XS.info \
-  MC_ZINC.info \
-  MC_ZINC_EL.info \
-  MC_ZINC_MU.info \
-  MC_ZINC_EL_BARE.info \
-  MC_ZINC_MU_BARE.info \
-  MC_ZJETS.info \
-  MC_ZJETS_EL.info \
-  MC_ZJETS_MU.info \
-  MC_ZJETS_EL_BARE.info \
-  MC_ZJETS_MU_BARE.info \
-  MC_ZKTSPLITTINGS.info \
-  MC_ZZINC.info \
-  MC_ZZJETS.info \
-  MC_ZZKTSPLITTINGS.info \
-  L3_1992_I336180.info \
-  L3_2004_I652683.info \
-  OPAL_1993_S2692198.info \
-  OPAL_1993_I342766.info \
-  OPAL_1994_S2927284.info \
-  OPAL_1995_S3198391.info \
-  OPAL_1996_S3257789.info \
-  OPAL_1997_S3396100.info \
-  OPAL_1997_S3608263.info \
-  OPAL_1998_S3702294.info \
-  OPAL_1998_S3780481.info \
-  OPAL_1998_S3749908.info \
-  OPAL_2000_S4418603.info \
-  OPAL_2001_S4553896.info \
-  OPAL_2002_S5361494.info \
-  OPAL_2003_I599181.info \
-  OPAL_2004_S6132243.info \
-  PDG_HADRON_MULTIPLICITIES.info \
-  PDG_HADRON_MULTIPLICITIES_RATIOS.info \
-  PDG_TAUS.info \
-  SFM_1984_S1178091.info \
-  SLD_1996_S3398250.info \
-  SLD_1999_S3743934.info \
-  SLD_2002_S4869273.info \
-  SLD_2004_S5693039.info \
-  STAR_2006_S6500200.info \
-  STAR_2006_S6860818.info \
-  STAR_2006_S6870392.info \
-  STAR_2008_S7869363.info \
-  STAR_2008_S7993412.info \
-  STAR_2009_UE_HELEN.info \
-  TASSO_1990_S2148048.info \
-  TOTEM_2012_I1115294.info \
-  TOTEM_2012_I1220862.info \
-  TOTEM_2014_I1328627.info \
-  ZEUS_2001_S4815815.info \
-  UA1_1990_S2044935.info \
-  UA5_1982_S875503.info \
-  UA5_1986_S1583476.info \
-  UA5_1987_S1640666.info \
-  UA5_1988_S1867512.info \
-  UA5_1989_S1926373.info
diff --git a/data/plotinfo/ALEPH_1991_S2435284.plot b/data/plotinfo/ALEPH_1991_S2435284.plot
deleted file mode 100644
--- a/data/plotinfo/ALEPH_1991_S2435284.plot
+++ /dev/null
@@ -1,8 +0,0 @@
-# BEGIN PLOT /ALEPH_1991_S2435284/d01-x01-y01
-Title=Total charged multiplicity
-XLabel=$n_\text{ch}$
-YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$
-LegendXPos=0.25
-LegendYPos=0.7
-# END PLOT
-
diff --git a/data/plotinfo/Makefile.am b/data/plotinfo/Makefile.am
deleted file mode 100644
--- a/data/plotinfo/Makefile.am
+++ /dev/null
@@ -1,416 +0,0 @@
-dist_pkgdata_DATA = \
-  ALEPH_1991_S2435284.plot \
-  ALEPH_1995_I382179.plot \
-  ALEPH_1996_S3486095.plot \
-  ALEPH_1996_S3196992.plot \
-  ALEPH_1999_S4193598.plot \
-  ALEPH_2001_S4656318.plot \
-  ALEPH_2002_S4823664.plot \
-  ALEPH_2004_S5765862.plot \
-  ALICE_2010_I880049.plot \
-  ALICE_2010_S8624100.plot \
-  ALICE_2010_S8625980.plot \
-  ALICE_2010_S8706239.plot \
-  ALICE_2011_S8909580.plot \
-  ALICE_2011_S8945144.plot \
-  ALICE_2012_I1116147.plot \
-  ALICE_2012_I1127497.plot \
-  ALICE_2012_I1181770.plot \
-  ALICE_2014_I1300380.plot \
-  ALICE_2015_I1357424.plot \
-  ARGUS_1993_S2653028.plot \
-  ARGUS_1993_S2669951.plot \
-  ARGUS_1993_S2789213.plot \
-  ATLAS_2010_S8591806.plot \
-  ATLAS_2010_S8817804.plot \
-  ATLAS_2010_S8894728.plot \
-  ATLAS_2010_S8914702.plot \
-  ATLAS_2010_S8918562.plot \
-  ATLAS_2010_S8919674.plot \
-  ATLAS_2010_CONF_2010_049.plot \
-  ATLAS_2011_S8924791.plot \
-  ATLAS_2011_S8971293.plot \
-  ATLAS_2011_S8994773.plot \
-  ATLAS_2011_S9002537.plot \
-  ATLAS_2011_S9035664.plot \
-  ATLAS_2011_S9120807.plot \
-  ATLAS_2011_S9126244.plot \
-  ATLAS_2011_S9128077.plot \
-  ATLAS_2011_S9131140.plot \
-  ATLAS_2011_I894867.plot  \
-  ATLAS_2011_I919017.plot  \
-  ATLAS_2011_I921594.plot  \
-  ATLAS_2011_I928289_W.plot \
-  ATLAS_2011_I928289_Z.plot \
-  ATLAS_2011_I925932.plot  \
-  ATLAS_2011_I926145.plot  \
-  ATLAS_2011_I929691.plot  \
-  ATLAS_2011_I930220.plot  \
-  ATLAS_2011_I944826.plot  \
-  ATLAS_2011_I945498.plot  \
-  ATLAS_2011_I954993.plot  \
-  ATLAS_2011_S9225137.plot \
-  ATLAS_2011_S9212183.plot \
-  ATLAS_2011_S8983313.plot \
-  ATLAS_2011_S9212353.plot \
-  ATLAS_2011_CONF_2011_090.plot \
-  ATLAS_2011_CONF_2011_098.plot \
-  ATLAS_2012_I1082936.plot \
-  ATLAS_2012_I1083318.plot \
-  ATLAS_2012_I1084540.plot \
-  ATLAS_2012_I1091481.plot \
-  ATLAS_2012_I1093734.plot \
-  ATLAS_2012_I1093738.plot \
-  ATLAS_2012_I1094061.plot \
-  ATLAS_2012_I1094564.plot \
-  ATLAS_2012_I1094568.plot \
-  ATLAS_2012_I1095236.plot \
-  ATLAS_2012_I943401.plot \
-  ATLAS_2012_I946427.plot \
-  ATLAS_2012_I1119557.plot \
-  ATLAS_2012_I1124167.plot \
-  ATLAS_2012_I1125575.plot \
-  ATLAS_2012_I1112263.plot \
-  ATLAS_2012_I1125961.plot \
-  ATLAS_2012_I1126136.plot \
-  ATLAS_2012_I1117704.plot \
-  ATLAS_2012_I1118269.plot \
-  ATLAS_2012_I1180197.plot \
-  ATLAS_2012_I1082009.plot \
-  ATLAS_2012_I1183818.plot \
-  ATLAS_2012_I1188891.plot \
-  ATLAS_2012_I1186556.plot \
-  ATLAS_2012_I1190891.plot \
-  ATLAS_2012_I1199269.plot \
-  ATLAS_2012_I1203852.plot \
-  ATLAS_2012_I1204447.plot \
-  ATLAS_2012_I1204784.plot \
-  ATLAS_2012_CONF_2012_001.plot \
-  ATLAS_2012_CONF_2012_103.plot \
-  ATLAS_2012_CONF_2012_104.plot \
-  ATLAS_2012_CONF_2012_105.plot \
-  ATLAS_2012_CONF_2012_109.plot \
-  ATLAS_2012_CONF_2012_153.plot \
-  ATLAS_2013_I1190187.plot \
-  ATLAS_2013_I1219109.plot \
-  ATLAS_2013_I1219109_EL.plot \
-  ATLAS_2013_I1219109_MU.plot \
-  ATLAS_2013_I1217863_W.plot \
-  ATLAS_2013_I1217863_W_EL.plot \
-  ATLAS_2013_I1217863_W_MU.plot \
-  ATLAS_2013_I1217863_Z.plot \
-  ATLAS_2013_I1217863_Z_EL.plot \
-  ATLAS_2013_I1217863_Z_MU.plot \
-  ATLAS_2013_I1217867.plot \
-  ATLAS_2013_I1216670.plot \
-  ATLAS_2013_I1230812.plot \
-  ATLAS_2013_I1230812_EL.plot \
-  ATLAS_2013_I1230812_MU.plot \
-  ATLAS_2013_I1243871.plot \
-  ATLAS_2013_I1244522.plot \
-  ATLAS_2013_I1263495.plot \
-  ATLAS_2014_I1268975.plot \
-  ATLAS_2014_I1279489.plot \
-  ATLAS_2014_I1282441.plot \
-  ATLAS_2014_I1298811.plot \
-  ATLAS_2014_I1304688.plot \
-  ATLAS_2014_I1307756.plot \
-  ATLAS_2014_I1306294.plot \
-  ATLAS_2014_I1306294_EL.plot \
-  ATLAS_2014_I1306294_MU.plot \
-  ATLAS_2014_I1315949.plot \
-  ATLAS_2014_I1325553.plot \
-  ATLAS_2014_I1300647.plot \
-  ATLAS_2014_I1288706.plot \
-  ATLAS_2014_I1307243.plot \
-  ATLAS_2014_I1312627.plot \
-  ATLAS_2014_I1312627_EL.plot \
-  ATLAS_2014_I1312627_MU.plot \
-  ATLAS_2014_I1306615.plot \
-  ATLAS_2014_I1282447.plot \
-  ATLAS_2014_I1298023.plot \
-  ATLAS_2014_I1319490.plot \
-  ATLAS_2014_I1319490_EL.plot \
-  ATLAS_2014_I1319490_MU.plot \
-  ATLAS_2014_I1326641.plot \
-  ATLAS_2014_I1327229.plot \
-  ATLAS_2015_I1393758.plot \
-  ATLAS_2015_I1387176.plot \
-  ATLAS_2015_I1364361.plot \
-  ATLAS_2015_I1351916.plot \
-  ATLAS_2015_I1351916_EL.plot \
-  ATLAS_2015_I1351916_MU.plot \
-  ATLAS_2015_I1345452.plot \
-  ATLAS_2015_I1376945.plot \
-  ATLAS_2015_I1390114.plot \
-  ATLAS_2015_I1394679.plot \
-  ATLAS_2015_I1397637.plot \
-  ATLAS_2015_I1397635.plot \
-  ATLAS_2015_CONF_2015_041.plot \
-  ATLAS_2015_CONF_2015_041_EL.plot \
-  ATLAS_2015_CONF_2015_041_MU.plot \
-  ATLAS_2015_I1408516.plot \
-  ATLAS_2015_I1408516_EL.plot \
-  ATLAS_2015_I1408516_MU.plot \
-  ATLAS_2015_I1404878.plot \
-  ATLAS_2016_I1419070.plot \
-  ATLAS_2016_I1419652.plot \
-  ATLAS_2016_I1424838.plot \
-  ATLAS_2016_I1426695.plot \
-  ATLAS_2016_I1444991.plot \
-  ATLAS_2016_I1457605.plot \
-  ATLAS_2016_I1468168.plot \
-  ATLAS_2016_I1467230.plot \
-  ATLAS_2016_I1467454.plot \
-  ATLAS_2016_I1468167.plot \
-  ATLAS_2016_I1479760.plot \
-  BABAR_2003_I593379.plot \
-  BABAR_2005_S6181155.plot \
-  BABAR_2007_S6895344.plot \
-  BABAR_2007_S7266081.plot \
-  BABAR_2013_I1116411.plot \
-  BABAR_2013_I1238276.plot \
-  BABAR_2015_I1334693.plot \
-  BELLE_2001_S4598261.plot \
-  BELLE_2008_I786560.plot \
-  BELLE_2011_I878990.plot \
-  BELLE_2013_I1216515.plot \
-  BELLE_2013_I1238273.plot \
-  BELLE_2015_I1397632.plot \
-  CDF_1988_S1865951.plot \
-  CDF_1990_S2089246.plot \
-  CDF_1993_S2742446.plot \
-  CDF_1994_S2952106.plot \
-  CDF_1996_S3108457.plot \
-  CDF_1996_S3349578.plot \
-  CDF_1996_S3418421.plot \
-  CDF_1997_S3541940.plot \
-  CDF_1998_S3618439.plot \
-  CDF_2000_S4155203.plot \
-  CDF_2000_S4266730.plot \
-  CDF_2001_S4517016.plot \
-  CDF_2001_S4563131.plot \
-  CDF_2001_S4751469.plot \
-  CDF_2002_S4796047.plot \
-  CDF_2004_S5839831.plot \
-  CDF_2005_S6080774.plot \
-  CDF_2005_S6217184.plot \
-  CDF_2006_S6450792.plot \
-  CDF_2006_S6653332.plot \
-  CDF_2007_S7057202.plot \
-  CDF_2008_S7540469.plot \
-  CDF_2008_S7541902.plot \
-  CDF_2008_S7782535.plot \
-  CDF_2008_S7828950.plot \
-  CDF_2008_S8093652.plot \
-  CDF_2008_S8095620.plot \
-  CDF_2009_S8233977.plot \
-  CDF_2009_NOTE_9936.plot \
-  CDF_2009_I856131.plot \
-  CDF_2009_S8436959.plot \
-  CDF_2010_S8591881_DY.plot \
-  CDF_2010_S8591881_QCD.plot \
-  CDF_2012_NOTE10874.plot \
-  CDF_2012_I1124333.plot \
-  CDF_2015_1388868.plot \
-  CLEO_2004_S5809304.plot \
-  CMS_2010_S8547297.plot \
-  CMS_2010_S8656010.plot \
-  CMS_2011_S8884919.plot \
-  CMS_2011_S8941262.plot \
-  CMS_2011_S8950903.plot \
-  CMS_2011_S8957746.plot \
-  CMS_2011_S8968497.plot \
-  CMS_2011_S8973270.plot \
-  CMS_2011_S8978280.plot \
-  CMS_2011_S9086218.plot \
-  CMS_2011_S9088458.plot \
-  CMS_2011_S9120041.plot \
-  CMS_2011_S9215166.plot \
-  CMS_2012_I941555.plot \
-  CMS_2011_I954992.plot \
-  CMS_2012_I1087342.plot \
-  CMS_2012_I1090423.plot \
-  CMS_2012_I1102908.plot \
-  CMS_2012_I1107658.plot \
-  CMS_2012_I1184941.plot \
-  CMS_2012_I1193338.plot \
-  CMS_2013_I1122847.plot \
-  CMS_2013_I1208923.plot \
-  CMS_2013_I1209721.plot \
-  CMS_2013_I1218372.plot \
-  CMS_2013_I1224539_DIJET.plot \
-  CMS_2013_I1224539_WJET.plot \
-  CMS_2013_I1224539_ZJET.plot \
-  CMS_2013_I1256943.plot \
-  CMS_2013_I1258128.plot \
-  CMS_2013_I1261026.plot \
-  CMS_2013_I1265659.plot \
-  CMS_2013_I1272853.plot \
-  CMS_2013_I1273574.plot \
-  CMS_2012_I1298807.plot \
-  CMS_2014_I1298810.plot \
-  CMS_2014_I1303894.plot \
-  CMS_2014_I1305624.plot \
-  CMS_2015_I1310737.plot \
-  CMS_2015_I1327224.plot \
-  CMS_2015_I1346843.plot \
-  CMS_2015_I1356998.plot \
-  CMS_2015_I1370682.plot \
-  CMS_2015_I1384119.plot \
-  CMS_2015_I1385107.plot \
-  CMS_2015_I1397174.plot \
-  CMS_2016_I1459051.plot \
-  CMS_2016_I1473674.plot \
-  CMS_2010_PAS_QCD_10_024.plot \
-  CMS_2012_PAS_QCD_11_010.plot \
-  CMS_2012_PAS_FSQ_12_020.plot \
-  CMSTOTEM_2014_I1294140.plot \
-  D0_1995_I398175.plot \
-  D0_1996_S3214044.plot \
-  D0_1996_S3324664.plot \
-  D0_2000_S4480767.plot \
-  D0_2000_I499943.plot \
-  D0_2001_S4674421.plot \
-  D0_2004_S5992206.plot \
-  D0_2006_S6438750.plot \
-  D0_2007_S7075677.plot \
-  D0_2008_S6879055.plot \
-  D0_2008_S7554427.plot \
-  D0_2008_S7662670.plot \
-  D0_2008_S7719523.plot \
-  D0_2008_S7837160.plot \
-  D0_2008_S7863608.plot \
-  D0_2009_S8202443.plot \
-  D0_2009_S8320160.plot \
-  D0_2009_S8349509.plot \
-  D0_2010_S8566488.plot \
-  D0_2010_S8570965.plot \
-  D0_2010_S8671338.plot \
-  D0_2010_S8821313.plot \
-  D0_2011_I895662.plot \
-  D0_2015_I1324946.plot \
-  D0_2000_I503361.plot \
-  E735_1998_S3905616.plot \
-  DELPHI_1995_S3137023.plot \
-  DELPHI_1996_S3430090.plot \
-  DELPHI_1999_S3960137.plot \
-  DELPHI_2000_S4328825.plot \
-  DELPHI_2002_069_CONF_603.plot \
-  DELPHI_2011_I890503.plot \
-  EXAMPLE.plot \
-  H1_1994_S2919893.plot \
-  H1_1995_S3167097.plot \
-  H1_2000_S4129130.plot \
-  JADE_OPAL_2000_S4300807.plot \
-  JADE_1998_S3612880.plot \
-  L3_1992_I336180.plot \
-  L3_2004_I652683.plot \
-  LHCB_2010_S8758301.plot \
-  LHCB_2010_I867355.plot \
-  LHCB_2011_I917009.plot \
-  LHCB_2011_I919315.plot \
-  LHCB_2012_I1119400.plot \
-  LHCB_2012_I1208102.plot \
-  LHCB_2013_I1208105.plot \
-  LHCB_2013_I1218996.plot \
-  LHCB_2014_I1262703.plot \
-  LHCB_2014_I1281685.plot \
-  LHCB_2015_I1333223.plot \
-  LHCF_2012_I1115479.plot \
-  MC_Centrality.plot \
-  MC_DIPHOTON.plot \
-  MC_ELECTRONS.plot \
-  MC_GENERIC.plot \
-  MC_HFJETS.plot \
-  MC_HINC.plot \
-  MC_HJETS.plot \
-  MC_HHJETS.plot \
-  MC_HKTSPLITTINGS.plot \
-  MC_IDENTIFIED.plot \
-  MC_JETS.plot \
-  MC_JETTAGS.plot \
-  MC_KTSPLITTINGS.plot \
-  MC_LEADJETUE.plot \
-  MC_MET.plot \
-  MC_MUONS.plot \
-  MC_PDFS.plot \
-  MC_PHOTONINC.plot \
-  MC_PHOTONJETS.plot \
-  MC_PHOTONKTSPLITTINGS.plot \
-  MC_PHOTONS.plot \
-  MC_QCD_PARTONS.plot \
-  MC_SUSY.plot \
-  MC_TAUS.plot \
-  MC_TTBAR.plot \
-  MC_VH2BB.plot \
-  MC_WINC.plot \
-  MC_WINC_EL.plot \
-  MC_WINC_MU.plot \
-  MC_WINC_EL_BARE.plot \
-  MC_WINC_MU_BARE.plot \
-  MC_WJETS.plot \
-  MC_WJETS_EL.plot \
-  MC_WJETS_MU.plot \
-  MC_WJETS_EL_BARE.plot \
-  MC_WJETS_MU_BARE.plot \
-  MC_WKTSPLITTINGS.plot \
-  MC_WPOL.plot \
-  MC_WWINC.plot \
-  MC_WWJETS.plot \
-  MC_WWKTSPLITTINGS.plot \
-  MC_XS.plot \
-  MC_ZINC.plot \
-  MC_ZINC_EL.plot \
-  MC_ZINC_MU.plot \
-  MC_ZINC_EL_BARE.plot \
-  MC_ZINC_MU_BARE.plot \
-  MC_ZJETS.plot \
-  MC_ZJETS_EL.plot \
-  MC_ZJETS_MU.plot \
-  MC_ZJETS_EL_BARE.plot \
-  MC_ZJETS_MU_BARE.plot \
-  MC_ZKTSPLITTINGS.plot \
-  MC_ZZINC.plot \
-  MC_ZZJETS.plot \
-  MC_ZZKTSPLITTINGS.plot \
-  OPAL_1993_S2692198.plot \
-  OPAL_1993_I342766.plot \
-  OPAL_1994_S2927284.plot \
-  OPAL_1995_S3198391.plot \
-  OPAL_1996_S3257789.plot \
-  OPAL_1997_S3396100.plot \
-  OPAL_1997_S3608263.plot \
-  OPAL_1998_S3702294.plot \
-  OPAL_1998_S3749908.plot \
-  OPAL_1998_S3780481.plot \
-  OPAL_2000_S4418603.plot \
-  OPAL_2001_S4553896.plot \
-  OPAL_2002_S5361494.plot \
-  OPAL_2003_I599181.plot \
-  OPAL_2004_S6132243.plot \
-  PDG_HADRON_MULTIPLICITIES.plot \
-  PDG_HADRON_MULTIPLICITIES_RATIOS.plot \
-  PDG_TAUS.plot \
-  SFM_1984_S1178091.plot \
-  SLD_1996_S3398250.plot \
-  SLD_1999_S3743934.plot \
-  SLD_2002_S4869273.plot \
-  SLD_2004_S5693039.plot \
-  STAR_2006_S6500200.plot \
-  STAR_2006_S6860818.plot \
-  STAR_2006_S6870392.plot \
-  STAR_2008_S7869363.plot \
-  STAR_2008_S7993412.plot \
-  STAR_2009_UE_HELEN.plot \
-  TASSO_1990_S2148048.plot \
-  TOTEM_2012_I1115294.plot \
-  TOTEM_2012_I1220862.plot \
-  TOTEM_2014_I1328627.plot \
-  ZEUS_2001_S4815815.plot \
-  UA1_1990_S2044935.plot \
-  UA5_1982_S875503.plot \
-  UA5_1986_S1583476.plot \
-  UA5_1987_S1640666.plot \
-  UA5_1988_S1867512.plot \
-  UA5_1989_S1926373.plot
diff --git a/data/refdata/BABAR_2006_S6511112.yoda b/data/refdata-unused/BABAR_2006_S6511112.yoda
rename from data/refdata/BABAR_2006_S6511112.yoda
rename to data/refdata-unused/BABAR_2006_S6511112.yoda
diff --git a/data/refdata/BRAHMS_2007_S7052448.yoda b/data/refdata-unused/BRAHMS_2007_S7052448.yoda
rename from data/refdata/BRAHMS_2007_S7052448.yoda
rename to data/refdata-unused/BRAHMS_2007_S7052448.yoda
diff --git a/data/refdata/CDF_2008_S7554427.yoda b/data/refdata-unused/CDF_2008_S7554427.yoda
rename from data/refdata/CDF_2008_S7554427.yoda
rename to data/refdata-unused/CDF_2008_S7554427.yoda
diff --git a/data/refdata/CLEO_2001_S4557530.yoda b/data/refdata-unused/CLEO_2001_S4557530.yoda
rename from data/refdata/CLEO_2001_S4557530.yoda
rename to data/refdata-unused/CLEO_2001_S4557530.yoda
diff --git a/data/refdata/DELPHI_1994_S3021912.yoda b/data/refdata-unused/DELPHI_1994_S3021912.yoda
rename from data/refdata/DELPHI_1994_S3021912.yoda
rename to data/refdata-unused/DELPHI_1994_S3021912.yoda
diff --git a/data/refdata/E735_1992_S2485869.yoda b/data/refdata-unused/E735_1992_S2485869.yoda
rename from data/refdata/E735_1992_S2485869.yoda
rename to data/refdata-unused/E735_1992_S2485869.yoda
diff --git a/data/refdata/E735_1993_S2896508.yoda b/data/refdata-unused/E735_1993_S2896508.yoda
rename from data/refdata/E735_1993_S2896508.yoda
rename to data/refdata-unused/E735_1993_S2896508.yoda
diff --git a/data/refdata/H1_2007_S7223935.yoda b/data/refdata-unused/H1_2007_S7223935.yoda
rename from data/refdata/H1_2007_S7223935.yoda
rename to data/refdata-unused/H1_2007_S7223935.yoda
diff --git a/data/refdata/Makefile.am b/data/refdata-unused/Makefile.am
rename from data/refdata/Makefile.am
rename to data/refdata-unused/Makefile.am
diff --git a/data/refdata/PHENIX_2003_S5538505.yoda b/data/refdata-unused/PHENIX_2003_S5538505.yoda
rename from data/refdata/PHENIX_2003_S5538505.yoda
rename to data/refdata-unused/PHENIX_2003_S5538505.yoda
diff --git a/data/refdata/TASSO_1980_S346187.yoda b/data/refdata-unused/TASSO_1980_S346187.yoda
rename from data/refdata/TASSO_1980_S346187.yoda
rename to data/refdata-unused/TASSO_1980_S346187.yoda
diff --git a/data/refdata/TASSO_1980_S593737.yoda b/data/refdata-unused/TASSO_1980_S593737.yoda
rename from data/refdata/TASSO_1980_S593737.yoda
rename to data/refdata-unused/TASSO_1980_S593737.yoda
diff --git a/data/refdata/TASSO_1980_S653926.yoda b/data/refdata-unused/TASSO_1980_S653926.yoda
rename from data/refdata/TASSO_1980_S653926.yoda
rename to data/refdata-unused/TASSO_1980_S653926.yoda
diff --git a/data/refdata/TASSO_1980_S671428.yoda b/data/refdata-unused/TASSO_1980_S671428.yoda
rename from data/refdata/TASSO_1980_S671428.yoda
rename to data/refdata-unused/TASSO_1980_S671428.yoda
diff --git a/data/refdata/TASSO_1980_S676071.yoda b/data/refdata-unused/TASSO_1980_S676071.yoda
rename from data/refdata/TASSO_1980_S676071.yoda
rename to data/refdata-unused/TASSO_1980_S676071.yoda
diff --git a/data/refdata/TASSO_1981_S822019.yoda b/data/refdata-unused/TASSO_1981_S822019.yoda
rename from data/refdata/TASSO_1981_S822019.yoda
rename to data/refdata-unused/TASSO_1981_S822019.yoda
diff --git a/data/refdata/TASSO_1982_S854140.yoda b/data/refdata-unused/TASSO_1982_S854140.yoda
rename from data/refdata/TASSO_1982_S854140.yoda
rename to data/refdata-unused/TASSO_1982_S854140.yoda
diff --git a/data/refdata/TASSO_1982_S967726.yoda b/data/refdata-unused/TASSO_1982_S967726.yoda
rename from data/refdata/TASSO_1982_S967726.yoda
rename to data/refdata-unused/TASSO_1982_S967726.yoda
diff --git a/data/refdata/TASSO_1983_S1188607.yoda b/data/refdata-unused/TASSO_1983_S1188607.yoda
rename from data/refdata/TASSO_1983_S1188607.yoda
rename to data/refdata-unused/TASSO_1983_S1188607.yoda
diff --git a/data/refdata/TASSO_1984_S1153170.yoda b/data/refdata-unused/TASSO_1984_S1153170.yoda
rename from data/refdata/TASSO_1984_S1153170.yoda
rename to data/refdata-unused/TASSO_1984_S1153170.yoda
diff --git a/data/refdata/TASSO_1984_S1236970.yoda b/data/refdata-unused/TASSO_1984_S1236970.yoda
rename from data/refdata/TASSO_1984_S1236970.yoda
rename to data/refdata-unused/TASSO_1984_S1236970.yoda
diff --git a/data/refdata/TASSO_1985_S1269364.yoda b/data/refdata-unused/TASSO_1985_S1269364.yoda
rename from data/refdata/TASSO_1985_S1269364.yoda
rename to data/refdata-unused/TASSO_1985_S1269364.yoda
diff --git a/data/refdata/TASSO_1985_S1269372.yoda b/data/refdata-unused/TASSO_1985_S1269372.yoda
rename from data/refdata/TASSO_1985_S1269372.yoda
rename to data/refdata-unused/TASSO_1985_S1269372.yoda
diff --git a/data/refdata/TASSO_1988_S1824554.yoda b/data/refdata-unused/TASSO_1988_S1824554.yoda
rename from data/refdata/TASSO_1988_S1824554.yoda
rename to data/refdata-unused/TASSO_1988_S1824554.yoda
diff --git a/data/refdata/TASSO_1988_S1875485.yoda b/data/refdata-unused/TASSO_1988_S1875485.yoda
rename from data/refdata/TASSO_1988_S1875485.yoda
rename to data/refdata-unused/TASSO_1988_S1875485.yoda
diff --git a/data/refdata/TASSO_1989_S1981820.yoda b/data/refdata-unused/TASSO_1989_S1981820.yoda
rename from data/refdata/TASSO_1989_S1981820.yoda
rename to data/refdata-unused/TASSO_1989_S1981820.yoda
diff --git a/data/refdata/TASSO_1989_S2018551.yoda b/data/refdata-unused/TASSO_1989_S2018551.yoda
rename from data/refdata/TASSO_1989_S2018551.yoda
rename to data/refdata-unused/TASSO_1989_S2018551.yoda
diff --git a/data/refdata/reflist b/data/refdata-unused/reflist
rename from data/refdata/reflist
rename to data/refdata-unused/reflist
diff --git a/data/texmf/Makefile.am b/data/texmf/Makefile.am
--- a/data/texmf/Makefile.am
+++ b/data/texmf/Makefile.am
@@ -1,14 +1,10 @@
 install-data-local:
 	for i in `find $(srcdir) -name \*.cfg -o -name \*.pro -o -name \*.sty -o -name \*.tex -o -name \*.cnf` ; \
 	do \
 	$(install_sh_DATA) $$i $(DESTDIR)$(pkgdatadir)/texmf/$${i#$(srcdir)/}; \
 	done
 
 uninstall-local:
 	rm -rf $(DESTDIR)$(pkgdatadir)/texmf
 
 EXTRA_DIST = dvips tex cnf
-
-dist-hook:
-	rm -rf `find $(distdir) -name '.svn'`
-
diff --git a/doc/Makefile.am b/doc/Makefile.am
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -1,105 +1,105 @@
 dist_noinst_SCRIPTS = mk-analysis-html mk-analysis-latex
 
 LATEXSUBSOURCES = preamble.tex intro.tex gettingstarted.tex writinganalyses.tex agilerunmc.tex acknowledgements.tex
 DOCSOURCES = compare-histos.txt slip.eps thinker.eps cone.eps bend.eps \
   h-physrev3.bst hepnames.sty JHEP3.cls JHEP.bst make-plots.txt rivet-manual.tex \
   $(LATEXSUBSOURCES) heppennames.sty hepnicenames.sty hepparticles.sty maybemath.sty \
   hepunits.sty underscore.sty microtype.sty
 
 EXTRA_DIST = $(DOCSOURCES) refs.bib
 DOCS =
 
 if ENABLE_PDFMANUAL
 
 if ENABLE_PYEXT
 DOCS += analyses.html
-analyses.html: $(top_srcdir)/src/Analyses mk-analysis-html
+analyses.html: $(top_srcdir)/analyses mk-analysis-html
 	LD_LIBRARY_PATH=$(top_builddir)/src/.libs:$(YAML_CPPLIBPATH):$(FASTJETLIBPATH):$(HEPMCLIBPATH):$(YODALIBPATH):$(LD_LIBRARY_PATH) \
     DYLD_LIBRARY_PATH=$(top_builddir)/src/.libs:$(YAML_CPPLIBPATH):$(FASTJETLIBPATH):$(HEPMCLIBPATH):$(YODALIBPATH):$(DYLD_LIBRARY_PATH) \
     PYTHONPATH=$(YODA_PYTHONPATH):$(RIVET_PYTHONPATH):$(PYTHONPATH) \
     $(PYTHON) mk-analysis-html
 endif
 
 
 if WITH_PDFLATEX
 
 DOCS += rivet-manual.pdf
 
 if ENABLE_PYEXT
-analyses.bib analyses.tex: $(top_srcdir)/src/Analyses $(top_srcdir)/data/plotinfo $(top_srcdir)/data/anainfo mk-analysis-latex
+analyses.bib analyses.tex: $(top_srcdir)/analyses $(top_srcdir)/data/plotinfo $(top_srcdir)/data/anainfo mk-analysis-latex
 	LD_LIBRARY_PATH=$(top_builddir)/src/.libs:$(YAML_CPPLIBPATH):$(FASTJETLIBPATH):$(HEPMCLIBPATH):$(YODALIBPATH):$(LD_LIBRARY_PATH) \
     DYLD_LIBRARY_PATH=$(top_builddir)/src/.libs:$(YAML_CPPLIBPATH):$(FASTJETLIBPATH):$(HEPMCLIBPATH):$(YODALIBPATH):$(DYLD_LIBRARY_PATH) \
     PYTHONPATH=$(YODA_PYTHONPATH):$(RIVET_PYTHONPATH):$(PYTHONPATH) \
     $(PYTHON) mk-analysis-latex
 else
 analyses.bib analyses.tex:
 	> analyses.tex
 	> analyses.bib
 endif
 
 LATEX = pdflatex --interaction=batchmode
 RERUN = "(There were undefined references|Rerun to get (cross-references|the bars) right)"
 RERUNBIB = "No file.*\.bbl|Citation.*undefined"
 MAKEIDX = "^[^%]*\\makeindex"
 
 rivet-manual.pdf : rivet-manual.tex $(LATEXSUBSOURCES) analyses.tex refs.bib analyses.bib
 	$(LATEX) $<; true
 	egrep -c $(RERUNBIB) rivet-manual.log && (bibtex rivet-manual && cp rivet-manual.toc rivet-manual.toc.bak && $(LATEX) $<); true
 	for i in `seq 5`; do if egrep $(RERUN) rivet-manual.log; then echo "LaTeX re-run $i"; cp rivet-manual.toc rivet-manual.toc.bak; $(LATEX) $<; else break; fi; done; true
 	if cmp -s rivet-manual.toc rivet-manual.toc.bak; then true; else $(LATEX) $<; true; fi
 	rm -f rivet-manual.toc.bak; true
 
 paper.pdf : paper.tex $(LATEXSUBSOURCES) analyses.tex refs.bib analyses.bib
 	$(LATEX) $<; true
 	egrep -c $(RERUNBIB) paper.log && (bibtex paper && cp paper.toc paper.toc.bak && $(LATEX) $<); true
 	for i in `seq 5`; do if egrep $(RERUN) paper.log; then echo "LaTeX re-run $i"; cp paper.toc paper.toc.bak; $(LATEX) $<; else break; fi; done; true
 	if cmp -s paper.toc paper.toc.bak; then true; else $(LATEX) $<; true; fi
 	rm -f paper.toc.bak; true
 
 endif
 endif
 
 
 if WITH_ASCIIDOC
 
 DOCS += compare-histos.html make-plots.html
 EXTRA_DIST += compare-histos.html make-plots.html
 
 compare-histos.html: compare-histos.txt
 	asciidoc -a toc compare-histos.txt
 
 make-plots.html: make-plots.txt
 	asciidoc -a toc make-plots.txt
 
 endif
 
 
 ################
 
 
 .PHONY = all doc upload arxivtar
 
 doc: $(DOCS)
 	@true
 
 RSH=rsync
 DEST=login.hepforge.org:rivet/public_html/
 upload: $(DOCS)
 	$(RSH) $? $(DEST)
 
 arxivtar: $(DOCSOURCES) rivet-manual.bbl
 	for i in *.png; do convert $$i $${i/.png/.eps}; done
 	tar czf rivet-manual.tar.gz \
 rivet-manual.tex $(LATEXSUBSOURCES) analyses.tex refs.bib analyses.bib rivetversion.sty rivet-manual.bbl \
 hepnames.sty hepnicenames.sty hepparticles.sty heppennames.sty hepunits.sty maybemath.sty microtype.sty underscore.sty \
 bend.eps cone.eps thinker.eps slip.eps \
 h-physrev3.bst JHEP3.cls JHEP.bst
 
 mostlyclean-local:
 	rm -rf *.aux *.log *.toc
 
 clean-local:
 	rm -rf $(DOCS)
 
 ## Install!
 pkgdata_DATA = $(DOCS)
diff --git a/foldlist b/foldlist
new file mode 100755
--- /dev/null
+++ b/foldlist
@@ -0,0 +1,18 @@
+#! /usr/bin/env python
+
+import sys
+argstr = "".join(sys.argv[1:])
+if argstr == "-":
+    valstr = sys.stdin.read()
+else:
+    valstr = argstr
+
+vals = [float(x) for x in valstr.split(",")]
+tmp = []
+for i in range(len(vals)//2):
+    x = (vals[i] + vals[-i-1])/2.
+    tmp.append(x)
+if len(vals) % 2 != 0:
+    tmp.append(vals[len(vals)//2])
+foldedvals = reversed(tmp)
+print ", ".join(["{:0.3f}".format(x) for x in foldedvals])
diff --git a/getinspirenames b/getinspirenames
new file mode 100755
--- /dev/null
+++ b/getinspirenames
@@ -0,0 +1,16 @@
+#! /usr/bin/env bash
+
+IN=src/Analyses
+OUT=spires2inspire.txt
+
+> $OUT
+for acc in $IN/*_S*.cc; do
+    aold=$(basename $acc .cc)
+    echo "Translating $aold"
+    sid=$(echo $aold | sed -e 's/.*_S\([0-9]\+\).*/\1/')
+    iid=$(wget --quiet http://inspirehep.net/search?p=find+key+7075677 -O - | grep /record/ | \
+                 sed -e "s:.*/record/\([0-9]\+\).*:\1:" | sort | uniq)
+    anew=$(echo $aold | sed -e "s/S$sid\+/I$iid/")
+    echo "$aold $anew" >> $OUT
+    #break
+done
diff --git a/include/Rivet/Analysis.hh b/include/Rivet/Analysis.hh
--- a/include/Rivet/Analysis.hh
+++ b/include/Rivet/Analysis.hh
@@ -1,1055 +1,1037 @@
 // -*- C++ -*-
 #ifndef RIVET_Analysis_HH
 #define RIVET_Analysis_HH
 
 #include "Rivet/Config/RivetCommon.hh"
 #include "Rivet/AnalysisInfo.hh"
 #include "Rivet/Event.hh"
 #include "Rivet/Projection.hh"
 #include "Rivet/ProjectionApplier.hh"
 #include "Rivet/ProjectionHandler.hh"
 #include "Rivet/AnalysisLoader.hh"
 #include "Rivet/Tools/RivetYODA.hh"
 #include "Rivet/Tools/Logging.hh"
 #include "Rivet/Tools/ParticleUtils.hh"
 #include "Rivet/Tools/Cuts.hh"
 
 
 /// @def vetoEvent
 /// Preprocessor define for vetoing events, including the log message and return.
 #define vetoEvent                                                       \
   do { MSG_DEBUG("Vetoing event on line " << __LINE__ << " of " << __FILE__); return; } while(0)
 
 
 namespace Rivet {
 
 
   // Forward declaration
   class AnalysisHandler;
 
   /// @brief This is the base class of all analysis classes in Rivet.
   ///
   /// There are
   /// three virtual functions which should be implemented in base classes:
   ///
   /// void init() is called by Rivet before a run is started. Here the
   /// analysis class should book necessary histograms. The needed
   /// projections should probably rather be constructed in the
   /// constructor.
   ///
   /// void analyze(const Event&) is called once for each event. Here the
   /// analysis class should apply the necessary Projections and fill the
   /// histograms.
   ///
   /// void finalize() is called after a run is finished. Here the analysis
   /// class should do whatever manipulations are necessary on the
   /// histograms. Writing the histograms to a file is, however, done by
   /// the Rivet class.
   class Analysis : public ProjectionApplier {
 
     /// The AnalysisHandler is a friend.
     friend class AnalysisHandler;
 
 
   public:
 
     /// @name Standard constructors and destructors.
     //@{
 
     // /// The default constructor.
     // Analysis();
 
     /// Constructor
     Analysis(const std::string& name);
 
     /// The destructor.
     virtual ~Analysis() {}
 
     //@}
 
 
   public:
 
     /// @name Main analysis methods
     //@{
 
     /// Initialize this analysis object. A concrete class should here
     /// book all necessary histograms. An overridden function must make
     /// sure it first calls the base class function.
     virtual void init() { }
 
     /// Analyze one event. A concrete class should here apply the
     /// necessary projections on the \a event and fill the relevant
     /// histograms. An overridden function must make sure it first calls
     /// the base class function.
     virtual void analyze(const Event& event) = 0;
 
     /// Finalize this analysis object. A concrete class should here make
     /// all necessary operations on the histograms. Writing the
     /// histograms to a file is, however, done by the Rivet class. An
     /// overridden function must make sure it first calls the base class
     /// function.
     virtual void finalize() { }
     
     /// A new method for postprocessing analyses is introduced.
     /// This function can be called to handle e. g. merging analyses from
     /// different runs. Besides finalize() this method can be called as
     /// often as wanted because it only depends on finished processed
     /// histograms which stay itself untouched but are used to produce
     /// further output. This method is virtual because it is considered
     /// to be overwritten in inherited classes.
     virtual void post() { }
     
     /// Replaces the content of booked histograms if there were those
     /// with the same path in _analysisObjectsRead. So far, the method is
     /// called in AnalysisHandler::init method such that the replacement
     /// is done automatically. This can of course be changed.
     void replaceByData( std::map< std::string, AnalysisObjectPtr > readObjects);
     
     //@}
 
 
   public:
 
     /// @name Metadata
     /// Metadata is used for querying from the command line and also for
     /// building web pages and the analysis pages in the Rivet manual.
     //@{
 
     /// Get the actual AnalysisInfo object in which all this metadata is stored.
     const AnalysisInfo& info() const {
       assert(_info && "No AnalysisInfo object :O");
       return *_info;
     }
 
     /// @brief Get the name of the analysis.
     ///
     /// By default this is computed by combining the results of the experiment,
     /// year and Spires ID metadata methods and you should only override it if
     /// there's a good reason why those won't work.
     virtual std::string name() const {
       return (info().name().empty()) ? _defaultname : info().name();
     }
 
     /// Get the Inspire ID code for this analysis.
     virtual std::string inspireId() const {
       return info().inspireId();
     }
 
     /// Get the SPIRES ID code for this analysis (~deprecated).
     virtual std::string spiresId() const {
       return info().spiresId();
     }
 
     /// @brief Names & emails of paper/analysis authors.
     ///
     /// Names and email of authors in 'NAME \<EMAIL\>' format. The first
     /// name in the list should be the primary contact person.
     virtual std::vector<std::string> authors() const {
       return info().authors();
     }
 
     /// @brief Get a short description of the analysis.
     ///
     /// Short (one sentence) description used as an index entry.
     /// Use @a description() to provide full descriptive paragraphs
     /// of analysis details.
     virtual std::string summary() const {
       return info().summary();
     }
 
     /// @brief Get a full description of the analysis.
     ///
     /// Full textual description of this analysis, what it is useful for,
     /// what experimental techniques are applied, etc. Should be treated
     /// as a chunk of restructuredText (http://docutils.sourceforge.net/rst.html),
     /// with equations to be rendered as LaTeX with amsmath operators.
     virtual std::string description() const {
       return info().description();
     }
 
     /// @brief Information about the events needed as input for this analysis.
     ///
     /// Event types, energies, kinematic cuts, particles to be considered
     /// stable, etc. etc. Should be treated as a restructuredText bullet list
     /// (http://docutils.sourceforge.net/rst.html)
     virtual std::string runInfo() const {
       return info().runInfo();
     }
 
     /// Experiment which performed and published this analysis.
     virtual std::string experiment() const {
       return info().experiment();
     }
 
     /// Collider on which the experiment ran.
     virtual std::string collider() const {
       return info().collider();
     }
 
     /// When the original experimental analysis was published.
     virtual std::string year() const {
       return info().year();
     }
 
     /// The luminosity in inverse femtobarn
     virtual std::string luminosityfb() const {
       return info().luminosityfb();
     }
 
     /// Journal, and preprint references.
     virtual std::vector<std::string> references() const {
       return info().references();
     }
 
     /// BibTeX citation key for this article.
     virtual std::string bibKey() const {
       return info().bibKey();
     }
 
     /// BibTeX citation entry for this article.
     virtual std::string bibTeX() const {
       return info().bibTeX();
     }
 
     /// Whether this analysis is trusted (in any way!)
     virtual std::string status() const {
       return (info().status().empty()) ? "UNVALIDATED" : info().status();
     }
 
     /// Any work to be done on this analysis.
     virtual std::vector<std::string> todos() const {
       return info().todos();
     }
 
 
     /// Return the allowed pairs of incoming beams required by this analysis.
     virtual const std::vector<PdgIdPair>& requiredBeams() const {
       return info().beams();
     }
     /// Declare the allowed pairs of incoming beams required by this analysis.
     virtual Analysis& setRequiredBeams(const std::vector<PdgIdPair>& requiredBeams) {
       info().setBeams(requiredBeams);
       return *this;
     }
 
 
     /// Sets of valid beam energy pairs, in GeV
     virtual const std::vector<std::pair<double, double> >& requiredEnergies() const {
       return info().energies();
     }
 
     /// Get vector of analysis keywords
     virtual const std::vector<std::string> & keywords() const {
       return info().keywords();
     }
 
     /// Declare the list of valid beam energy pairs, in GeV
     virtual Analysis& setRequiredEnergies(const std::vector<std::pair<double, double> >& requiredEnergies) {
       info().setEnergies(requiredEnergies);
       return *this;
     }
 
 
     /// Return true if this analysis needs to know the process cross-section.
     /// @todo Remove this and require HepMC >= 2.06
     bool needsCrossSection() const {
       return info().needsCrossSection();
     }
     /// Declare whether this analysis needs to know the process cross-section from the generator.
     /// @todo Remove this and require HepMC >= 2.06
     Analysis& setNeedsCrossSection(bool needed=true) {
       info().setNeedsCrossSection(needed);
       return *this;
     }
 
     //@}
 
 
     /// @name Internal metadata modifying methods
     //@{
 
     /// Get the actual AnalysisInfo object in which all this metadata is stored (non-const).
     AnalysisInfo& info() {
       assert(_info && "No AnalysisInfo object :O");
       return *_info;
     }
 
     //@}
 
 
     /// @name Run conditions
     //@{
 
     /// Incoming beams for this run
     const ParticlePair& beams() const;
 
     /// Incoming beam IDs for this run
     const PdgIdPair beamIds() const;
 
     /// Centre of mass energy for this run
     double sqrtS() const;
 
     //@}
 
 
     /// @name Analysis / beam compatibility testing
     //@{
 
     /// Check if analysis is compatible with the provided beam particle IDs and energies
     bool isCompatible(const ParticlePair& beams) const;
 
     /// Check if analysis is compatible with the provided beam particle IDs and energies
     bool isCompatible(PdgId beam1, PdgId beam2, double e1, double e2) const;
 
     /// Check if analysis is compatible with the provided beam particle IDs and energies
     bool isCompatible(const PdgIdPair& beams, const std::pair<double,double>& energies) const;
 
     //@}
 
 
     /// Set the cross section from the generator
     Analysis& setCrossSection(double xs);
 
     /// Access the controlling AnalysisHandler object.
     AnalysisHandler& handler() const { return *_analysishandler; }
 
 
   protected:
 
     /// Get a Log object based on the name() property of the calling analysis object.
     Log& getLog() const;
 
     /// Get the process cross-section in pb. Throws if this hasn't been set.
     double crossSection() const;
 
     /// Get the process cross-section per generated event in pb. Throws if this
     /// hasn't been set.
     double crossSectionPerEvent() const;
 
     /// Get the number of events seen (via the analysis handler). Use in the
     /// finalize phase only.
     size_t numEvents() const;
 
     /// Get the sum of event weights seen (via the analysis handler). Use in the
     /// finalize phase only.
     double sumOfWeights() const;
 
 
   protected:
 
     /// @name Histogram paths
     //@{
 
     /// Get the canonical histogram "directory" path for this analysis.
     const std::string histoDir() const;
 
     /// Get the canonical histogram path for the named histogram in this analysis.
     const std::string histoPath(const std::string& hname) const;
 
     /// Get the canonical histogram path for the numbered histogram in this analysis.
     const std::string histoPath(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const;
 
     /// Get the internal histogram name for given d, x and y (cf. HepData)
     const std::string makeAxisCode(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const;
 
     //@}
 
 
     /// @name Histogram reference data
     //@{
 
     /// Get reference data for a named histo
-    /// @todo Move to the templated version when we have C++11 and can have a default fn template type
-    const YODA::Scatter2D& refData(const string& hname) const;
-
-    /// Get reference data for a numbered histo
-    /// @todo Move to the templated version when we have C++11 and can have a default fn template type
-    const YODA::Scatter2D& refData(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const;
-
-    /// Get reference data for a named histo
-    /// @todo Would be nice to just use these and ditch the S2D no-template version,
-    ///   but we need C++11 for default args in function templates
-    // template <typename T=Scatter2D>
     /// @todo SFINAE to ensure that the type inherits from YODA::AnalysisObject?
-    template <typename T>
+    template <typename T=YODA::Scatter2D>
     const T& refData(const string& hname) const {
       _cacheRefData();
       MSG_TRACE("Using histo bin edges for " << name() << ":" << hname);
       if (!_refdata[hname]) {
         MSG_ERROR("Can't find reference histogram " << hname);
         throw Exception("Reference data " + hname + " not found.");
       }
       return dynamic_cast<T&>(*_refdata[hname]);
     }
 
     /// Get reference data for a numbered histo
-    /// @todo Would be nice to just use these and ditch the S2D no-template version,
-    ///   but we need C++11 for default args in function templates
-    // template <typename T=Scatter2D>
     /// @todo SFINAE to ensure that the type inherits from YODA::AnalysisObject?
-    template <typename T>
+    template <typename T=YODA::Scatter2D>
     const T& refData(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const {
       const string hname = makeAxisCode(datasetId, xAxisId, yAxisId);
       return refData(hname);
     }
 
     //@}
 
 
     /// @name Counter booking
     //@{
 
     /// Book a counter.
     CounterPtr bookCounter(const std::string& name,
                            const std::string& title="");
                            // const std::string& valtitle=""
 
     /// Book a counter, using a path generated from the dataset and axis ID codes
     ///
     /// The paper, dataset and x/y-axis IDs will be used to build the histo name in the HepData standard way.
     CounterPtr bookCounter(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId,
                            const std::string& title="");
                            // const std::string& valtitle=""
 
     //@}
 
 
     /// @name 1D histogram booking
     //@{
 
     /// Book a 1D histogram with @a nbins uniformly distributed across the range @a lower - @a upper .
     Histo1DPtr bookHisto1D(const std::string& name,
                            size_t nbins, double lower, double upper,
                            const std::string& title="",
                            const std::string& xtitle="",
                            const std::string& ytitle="");
 
     /// Book a 1D histogram with non-uniform bins defined by the vector of bin edges @a binedges .
     Histo1DPtr bookHisto1D(const std::string& name,
                            const std::vector<double>& binedges,
                            const std::string& title="",
                            const std::string& xtitle="",
                            const std::string& ytitle="");
 
     /// Book a 1D histogram with binning from a reference scatter.
     Histo1DPtr bookHisto1D(const std::string& name,
                            const Scatter2D& refscatter,
                            const std::string& title="",
                            const std::string& xtitle="",
                            const std::string& ytitle="");
 
     /// Book a 1D histogram, using the binnings in the reference data histogram.
     Histo1DPtr bookHisto1D(const std::string& name,
                            const std::string& title="",
                            const std::string& xtitle="",
                            const std::string& ytitle="");
 
     /// Book a 1D histogram, using the binnings in the reference data histogram.
     ///
     /// The paper, dataset and x/y-axis IDs will be used to build the histo name in the HepData standard way.
     Histo1DPtr bookHisto1D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId,
                            const std::string& title="",
                            const std::string& xtitle="",
                            const std::string& ytitle="");
 
     //@}
 
 
     /// @name 2D histogram booking
     //@{
 
     /// Book a 2D histogram with @a nxbins and @a nybins uniformly
     /// distributed across the ranges @a xlower - @a xupper and @a
     /// ylower - @a yupper respectively along the x- and y-axis.
     Histo2DPtr bookHisto2D(const std::string& name,
                            size_t nxbins, double xlower, double xupper,
                            size_t nybins, double ylower, double yupper,
                            const std::string& title="",
                            const std::string& xtitle="",
                            const std::string& ytitle="",
                            const std::string& ztitle="");
 
     /// Book a 2D histogram with non-uniform bins defined by the
     /// vectorx of bin edges @a xbinedges and @a ybinedges.
     Histo2DPtr bookHisto2D(const std::string& name,
                            const std::vector<double>& xbinedges,
                            const std::vector<double>& ybinedges,
                            const std::string& title="",
                            const std::string& xtitle="",
                            const std::string& ytitle="",
                            const std::string& ztitle="");
 
     // /// Book a 2D histogram with binning from a reference scatter.
     // Histo2DPtr bookHisto2D(const std::string& name,
     //                        const Scatter3D& refscatter,
     //                        const std::string& title="",
     //                        const std::string& xtitle="",
     //                        const std::string& ytitle="",
     //                        const std::string& ztitle="");
 
     // /// Book a 2D histogram, using the binnings in the reference data histogram.
     // Histo2DPtr bookHisto2D(const std::string& name,
     //                        const std::string& title="",
     //                        const std::string& xtitle="",
     //                        const std::string& ytitle="",
     //                        const std::string& ztitle="");
 
     // /// Book a 2D histogram, using the binnings in the reference data histogram.
     // ///
     // /// The paper, dataset and x/y-axis IDs will be used to build the histo name in the HepData standard way.
     // Histo2DPtr bookHisto2D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId,
     //                        const std::string& title="",
     //                        const std::string& xtitle="",
     //                        const std::string& ytitle="",
     //                        const std::string& ztitle="");
 
     //@}
 
 
     /// @name 1D profile histogram booking
     //@{
 
     /// Book a 1D profile histogram with @a nbins uniformly distributed across the range @a lower - @a upper .
     Profile1DPtr bookProfile1D(const std::string& name,
                                size_t nbins, double lower, double upper,
                                const std::string& title="",
                                const std::string& xtitle="",
                                const std::string& ytitle="");
 
     /// Book a 1D profile histogram with non-uniform bins defined by the vector of bin edges @a binedges .
     Profile1DPtr bookProfile1D(const std::string& name,
                                const std::vector<double>& binedges,
                                const std::string& title="",
                                const std::string& xtitle="",
                                const std::string& ytitle="");
 
     /// Book a 1D profile histogram with binning from a reference scatter.
     Profile1DPtr bookProfile1D(const std::string& name,
                                const Scatter2D& refscatter,
                                const std::string& title="",
                                const std::string& xtitle="",
                                const std::string& ytitle="");
 
     /// Book a 1D profile histogram, using the binnings in the reference data histogram.
     Profile1DPtr bookProfile1D(const std::string& name,
                                const std::string& title="",
                                const std::string& xtitle="",
                                const std::string& ytitle="");
 
     /// Book a 1D profile histogram, using the binnings in the reference data histogram.
     ///
     /// The paper, dataset and x/y-axis IDs will be used to build the histo name in the HepData standard way.
     Profile1DPtr bookProfile1D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId,
                                const std::string& title="",
                                const std::string& xtitle="",
                                const std::string& ytitle="");
 
     //@}
 
 
     /// @name 2D profile histogram booking
     //@{
 
     /// Book a 2D profile histogram with @a nxbins and @a nybins uniformly
     /// distributed across the ranges @a xlower - @a xupper and @a ylower - @a
     /// yupper respectively along the x- and y-axis.
     Profile2DPtr bookProfile2D(const std::string& name,
                                size_t nxbins, double xlower, double xupper,
                                size_t nybins, double ylower, double yupper,
                                const std::string& title="",
                                const std::string& xtitle="",
                                const std::string& ytitle="",
                                const std::string& ztitle="");
 
     /// Book a 2D profile histogram with non-uniform bins defined by the vectorx
     /// of bin edges @a xbinedges and @a ybinedges.
     Profile2DPtr bookProfile2D(const std::string& name,
                                const std::vector<double>& xbinedges,
                                const std::vector<double>& ybinedges,
                                const std::string& title="",
                                const std::string& xtitle="",
                                const std::string& ytitle="",
                                const std::string& ztitle="");
 
     /// Book a 2D profile histogram with binning from a reference scatter.
     // Profile2DPtr bookProfile2D(const std::string& name,
     //                            const Scatter3D& refscatter,
     //                            const std::string& title="",
     //                            const std::string& xtitle="",
     //                            const std::string& ytitle="",
     //                            const std::string& ztitle="");
 
     // /// Book a 2D profile histogram, using the binnings in the reference data histogram.
     // Profile2DPtr bookProfile2D(const std::string& name,
     //                            const std::string& title="",
     //                            const std::string& xtitle="",
     //                            const std::string& ytitle="",
     //                            const std::string& ztitle="");
 
     // /// Book a 2D profile histogram, using the binnings in the reference data histogram.
     // ///
     // /// The paper, dataset and x/y-axis IDs will be used to build the histo name in the HepData standard way.
     // Profile2DPtr bookProfile2D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId,
     //                            const std::string& title="",
     //                            const std::string& xtitle="",
     //                            const std::string& ytitle="",
     //                            const std::string& ztitle="");
 
     //@}
 
 
     /// @name 2D scatter booking
     //@{
 
     /// @brief Book a 2-dimensional data point set with the given name.
     ///
     /// @note Unlike histogram booking, scatter booking by default makes no
     /// attempt to use reference data to pre-fill the data object. If you want
     /// this, which is sometimes useful e.g. when the x-position is not really
     /// meaningful and can't be extracted from the data, then set the @a
     /// copy_pts parameter to true. This creates points to match the reference
     /// data's x values and errors, but with the y values and errors zeroed...
     /// assuming that there is a reference histo with the same name: if there
     /// isn't, an exception will be thrown.
     Scatter2DPtr bookScatter2D(const std::string& name,
                                bool copy_pts=false,
                                const std::string& title="",
                                const std::string& xtitle="",
                                const std::string& ytitle="");
 
     /// @brief Book a 2-dimensional data point set, using the binnings in the reference data histogram.
     ///
     /// The paper, dataset and x/y-axis IDs will be used to build the histo name in the HepData standard way.
     ///
     /// @note Unlike histogram booking, scatter booking by default makes no
     /// attempt to use reference data to pre-fill the data object. If you want
     /// this, which is sometimes useful e.g. when the x-position is not really
     /// meaningful and can't be extracted from the data, then set the @a
     /// copy_pts parameter to true. This creates points to match the reference
     /// data's x values and errors, but with the y values and errors zeroed.
     Scatter2DPtr bookScatter2D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId,
                                bool copy_pts=false,
                                const std::string& title="",
                                const std::string& xtitle="",
                                const std::string& ytitle="");
 
     /// @brief Book a 2-dimensional data point set with equally spaced x-points in a range.
     ///
     /// The y values and errors will be set to 0.
     Scatter2DPtr bookScatter2D(const std::string& name,
                                size_t npts, double lower, double upper,
                                const std::string& title="",
                                const std::string& xtitle="",
                                const std::string& ytitle="");
 
     /// @brief Book a 2-dimensional data point set based on provided contiguous "bin edges".
     ///
     /// The y values and errors will be set to 0.
     Scatter2DPtr bookScatter2D(const std::string& hname,
                                const std::vector<double>& binedges,
                                const std::string& title,
                                const std::string& xtitle,
                                const std::string& ytitle);
 
     //@}
 
 
   public:
 
 
     /// @name Analysis object manipulation
     /// @todo Should really be protected: only public to keep BinnedHistogram happy for now...
     //@{
 
     /// Multiplicatively scale the given counter, @a cnt, by factor @s factor.
     void scale(CounterPtr cnt, double factor);
 
     /// Multiplicatively scale the given counters, @a cnts, by factor @s factor.
     /// @note Constness intentional, if weird, to allow passing rvalue refs of smart ptrs (argh)
     /// @todo Use SFINAE for a generic iterable of CounterPtrs
     void scale(const std::vector<CounterPtr>& cnts, double factor) {
       for (auto& c : cnts) scale(c, factor);
     }
     /// @todo YUCK!
     template <std::size_t array_size>
     void scale(const CounterPtr (&cnts)[array_size], double factor) {
       // for (size_t i = 0; i < std::extent<decltype(cnts)>::value; ++i) scale(cnts[i], factor);
       for (auto& c : cnts) scale(c, factor);
     }
 
 
     /// Normalize the given histogram, @a histo, to area = @a norm.
     void normalize(Histo1DPtr histo, double norm=1.0, bool includeoverflows=true);
 
     /// Normalize the given histograms, @a histos, to area = @a norm.
     /// @note Constness intentional, if weird, to allow passing rvalue refs of smart ptrs (argh)
     /// @todo Use SFINAE for a generic iterable of Histo1DPtrs
     void normalize(const std::vector<Histo1DPtr>& histos, double norm=1.0, bool includeoverflows=true) {
       for (auto& h : histos) normalize(h, norm, includeoverflows);
     }
     /// @todo YUCK!
     template <std::size_t array_size>
     void normalize(const Histo1DPtr (&histos)[array_size], double norm=1.0, bool includeoverflows=true) {
       for (auto& h : histos) normalize(h, norm, includeoverflows);
     }
 
     /// Multiplicatively scale the given histogram, @a histo, by factor @s factor.
     void scale(Histo1DPtr histo, double factor);
 
     /// Multiplicatively scale the given histograms, @a histos, by factor @s factor.
     /// @note Constness intentional, if weird, to allow passing rvalue refs of smart ptrs (argh)
     /// @todo Use SFINAE for a generic iterable of Histo1DPtrs
     void scale(const std::vector<Histo1DPtr>& histos, double factor) {
       for (auto& h : histos) scale(h, factor);
     }
     /// @todo YUCK!
     template <std::size_t array_size>
     void scale(const Histo1DPtr (&histos)[array_size], double factor) {
       for (auto& h : histos) scale(h, factor);
     }
 
 
     /// Normalize the given histogram, @a histo, to area = @a norm.
     void normalize(Histo2DPtr histo, double norm=1.0, bool includeoverflows=true);
 
     /// Normalize the given histograms, @a histos, to area = @a norm.
     /// @note Constness intentional, if weird, to allow passing rvalue refs of smart ptrs (argh)
     /// @todo Use SFINAE for a generic iterable of Histo2DPtrs
     void normalize(const std::vector<Histo2DPtr>& histos, double norm=1.0, bool includeoverflows=true) {
       for (auto& h : histos) normalize(h, norm, includeoverflows);
     }
     /// @todo YUCK!
     template <std::size_t array_size>
     void normalize(const Histo2DPtr (&histos)[array_size], double norm=1.0, bool includeoverflows=true) {
       for (auto& h : histos) normalize(h, norm, includeoverflows);
     }
 
     /// Multiplicatively scale the given histogram, @a histo, by factor @s factor.
     void scale(Histo2DPtr histo, double factor);
 
     /// Multiplicatively scale the given histograms, @a histos, by factor @s factor.
     /// @note Constness intentional, if weird, to allow passing rvalue refs of smart ptrs (argh)
     /// @todo Use SFINAE for a generic iterable of Histo2DPtrs
     void scale(const std::vector<Histo2DPtr>& histos, double factor) {
       for (auto& h : histos) scale(h, factor);
     }
     /// @todo YUCK!
     template <std::size_t array_size>
     void scale(const Histo2DPtr (&histos)[array_size], double factor) {
       for (auto& h : histos) scale(h, factor);
     }
 
 
     /// Helper for counter division.
     ///
     /// @note Assigns to the (already registered) output scatter, @a s. Preserves the path information of the target.
     void divide(CounterPtr c1, CounterPtr c2, Scatter1DPtr s) const;
 
     /// Helper for histogram division with raw YODA objects.
     ///
     /// @note Assigns to the (already registered) output scatter, @a s. Preserves the path information of the target.
     void divide(const YODA::Counter& c1, const YODA::Counter& c2, Scatter1DPtr s) const;
 
 
     /// Helper for histogram division.
     ///
     /// @note Assigns to the (already registered) output scatter, @a s. Preserves the path information of the target.
     void divide(Histo1DPtr h1, Histo1DPtr h2, Scatter2DPtr s) const;
 
     /// Helper for histogram division with raw YODA objects.
     ///
     /// @note Assigns to the (already registered) output scatter, @a s. Preserves the path information of the target.
     void divide(const YODA::Histo1D& h1, const YODA::Histo1D& h2, Scatter2DPtr s) const;
 
 
     /// Helper for profile histogram division.
     ///
     /// @note Assigns to the (already registered) output scatter, @a s. Preserves the path information of the target.
     void divide(Profile1DPtr p1, Profile1DPtr p2, Scatter2DPtr s) const;
 
     /// Helper for profile histogram division with raw YODA objects.
     ///
     /// @note Assigns to the (already registered) output scatter, @a s. Preserves the path information of the target.
     void divide(const YODA::Profile1D& p1, const YODA::Profile1D& p2, Scatter2DPtr s) const;
 
 
     /// Helper for 2D histogram division.
     ///
     /// @note Assigns to the (already registered) output scatter, @a s. Preserves the path information of the target.
     void divide(Histo2DPtr h1, Histo2DPtr h2, Scatter3DPtr s) const;
 
     /// Helper for 2D histogram division with raw YODA objects.
     ///
     /// @note Assigns to the (already registered) output scatter, @a s. Preserves the path information of the target.
     void divide(const YODA::Histo2D& h1, const YODA::Histo2D& h2, Scatter3DPtr s) const;
 
 
     /// Helper for 2D profile histogram division.
     ///
     /// @note Assigns to the (already registered) output scatter, @a s. Preserves the path information of the target.
     void divide(Profile2DPtr p1, Profile2DPtr p2, Scatter3DPtr s) const;
 
     /// Helper for 2D profile histogram division with raw YODA objects
     ///
     /// @note Assigns to the (already registered) output scatter, @a s.  Preserves the path information of the target.
     void divide(const YODA::Profile2D& p1, const YODA::Profile2D& p2, Scatter3DPtr s) const;
 
 
     /// Helper for histogram efficiency calculation.
     ///
     /// @note Assigns to the (already registered) output scatter, @a s. Preserves the path information of the target.
     void efficiency(Histo1DPtr h1, Histo1DPtr h2, Scatter2DPtr s) const;
 
     /// Helper for histogram efficiency calculation.
     ///
     /// @note Assigns to the (already registered) output scatter, @a s. Preserves the path information of the target.
     void efficiency(const YODA::Histo1D& h1, const YODA::Histo1D& h2, Scatter2DPtr s) const;
 
 
     /// Helper for histogram asymmetry calculation.
     ///
     /// @note Assigns to the (already registered) output scatter, @a s. Preserves the path information of the target.
     void asymm(Histo1DPtr h1, Histo1DPtr h2, Scatter2DPtr s) const;
 
     /// Helper for histogram asymmetry calculation.
     ///
     /// @note Assigns to the (already registered) output scatter, @a s. Preserves the path information of the target.
     void asymm(const YODA::Histo1D& h1, const YODA::Histo1D& h2, Scatter2DPtr s) const;
 
 
     /// Helper for converting a differential histo to an integral one.
     ///
     /// @note Assigns to the (already registered) output scatter, @a s. Preserves the path information of the target.
     void integrate(Histo1DPtr h, Scatter2DPtr s) const;
 
     /// Helper for converting a differential histo to an integral one.
     ///
     /// @note Assigns to the (already registered) output scatter, @a s. Preserves the path information of the target.
     void integrate(const Histo1D& h, Scatter2DPtr s) const;
 
     //@}
 
 
   public:
 
     /// List of registered analysis data objects
     const vector<AnalysisObjectPtr>& analysisObjects() const {
       return _analysisobjects;
     }
 
 
   protected:
 
     /// @name Data object registration, retrieval, and removal
     //@{
 
     /// Register a data object in the histogram system
     void addAnalysisObject(AnalysisObjectPtr ao);
 
     /// Get a data object from the histogram system
-    /// @todo Use this default function template arg in C++11
-    // template <typename AO=AnalysisObjectPtr>
-    template <typename AO>
+    template <typename AO=YODA::AnalysisObject>
     const std::shared_ptr<AO> getAnalysisObject(const std::string& name) const {
       foreach (const AnalysisObjectPtr& ao, analysisObjects()) {
         if (ao->path() == histoPath(name)) return dynamic_pointer_cast<AO>(ao);
       }
       throw Exception("Data object " + histoPath(name) + " not found");
     }
 
     /// Get a data object from the histogram system (non-const)
-    /// @todo Use this default function template arg in C++11
-    // template <typename AO=AnalysisObjectPtr>
-    template <typename AO>
+    template <typename AO=YODA::AnalysisObject>
     std::shared_ptr<AO> getAnalysisObject(const std::string& name) {
       foreach (const AnalysisObjectPtr& ao, analysisObjects()) {
         if (ao->path() == histoPath(name)) return dynamic_pointer_cast<AO>(ao);
       }
       throw Exception("Data object " + histoPath(name) + " not found");
     }
 
     /// Unregister a data object from the histogram system (by name)
     void removeAnalysisObject(const std::string& path);
 
     /// Unregister a data object from the histogram system (by pointer)
     void removeAnalysisObject(AnalysisObjectPtr ao);
 
 
     /// Get a named Histo1D object from the histogram system
     const Histo1DPtr getHisto1D(const std::string& name) const {
       return getAnalysisObject<Histo1D>(name);
     }
 
     /// Get a named Histo1D object from the histogram system (non-const)
     Histo1DPtr getHisto1D(const std::string& name) {
       return getAnalysisObject<Histo1D>(name);
     }
 
     /// Get a Histo1D object from the histogram system by axis ID codes (non-const)
     const Histo1DPtr getHisto1D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const {
       return getAnalysisObject<Histo1D>(makeAxisCode(datasetId, xAxisId, yAxisId));
     }
 
     /// Get a Histo1D object from the histogram system by axis ID codes (non-const)
     Histo1DPtr getHisto1D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) {
       return getAnalysisObject<Histo1D>(makeAxisCode(datasetId, xAxisId, yAxisId));
     }
 
 
-    // /// Get a named Histo2D object from the histogram system
-    // const Histo2DPtr getHisto2D(const std::string& name) const {
-    //   return getAnalysisObject<Histo2D>(name);
-    // }
+    /// Get a named Histo2D object from the histogram system
+    const Histo2DPtr getHisto2D(const std::string& name) const {
+      return getAnalysisObject<Histo2D>(name);
+    }
 
-    // /// Get a named Histo2D object from the histogram system (non-const)
-    // Histo2DPtr getHisto2D(const std::string& name) {
-    //   return getAnalysisObject<Histo2D>(name);
-    // }
+    /// Get a named Histo2D object from the histogram system (non-const)
+    Histo2DPtr getHisto2D(const std::string& name) {
+      return getAnalysisObject<Histo2D>(name);
+    }
 
-    // /// Get a Histo2D object from the histogram system by axis ID codes (non-const)
-    // const Histo2DPtr getHisto2D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const {
-    //   return getAnalysisObject<Histo2D>(makeAxisCode(datasetId, xAxisId, yAxisId));
-    // }
+    /// Get a Histo2D object from the histogram system by axis ID codes (non-const)
+    const Histo2DPtr getHisto2D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const {
+      return getAnalysisObject<Histo2D>(makeAxisCode(datasetId, xAxisId, yAxisId));
+    }
 
-    // /// Get a Histo2D object from the histogram system by axis ID codes (non-const)
-    // Histo2DPtr getHisto2D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) {
-    //   return getAnalysisObject<Histo2D>(makeAxisCode(datasetId, xAxisId, yAxisId));
-    // }
+    /// Get a Histo2D object from the histogram system by axis ID codes (non-const)
+    Histo2DPtr getHisto2D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) {
+      return getAnalysisObject<Histo2D>(makeAxisCode(datasetId, xAxisId, yAxisId));
+    }
 
 
     /// Get a named Profile1D object from the histogram system
     const Profile1DPtr getProfile1D(const std::string& name) const {
       return getAnalysisObject<Profile1D>(name);
     }
 
     /// Get a named Profile1D object from the histogram system (non-const)
     Profile1DPtr getProfile1D(const std::string& name) {
       return getAnalysisObject<Profile1D>(name);
     }
 
     /// Get a Profile1D object from the histogram system by axis ID codes (non-const)
     const Profile1DPtr getProfile1D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const {
       return getAnalysisObject<Profile1D>(makeAxisCode(datasetId, xAxisId, yAxisId));
     }
 
     /// Get a Profile1D object from the histogram system by axis ID codes (non-const)
     Profile1DPtr getProfile1D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) {
       return getAnalysisObject<Profile1D>(makeAxisCode(datasetId, xAxisId, yAxisId));
     }
 
 
-    // /// Get a named Profile2D object from the histogram system
-    // const Profile2DPtr getProfile2D(const std::string& name) const {
-    //   return getAnalysisObject<Profile2D>(name);
-    // }
+    /// Get a named Profile2D object from the histogram system
+    const Profile2DPtr getProfile2D(const std::string& name) const {
+      return getAnalysisObject<Profile2D>(name);
+    }
 
-    // /// Get a named Profile2D object from the histogram system (non-const)
-    // Profile2DPtr getProfile2D(const std::string& name) {
-    //   return getAnalysisObject<Profile2D>(name);
-    // }
+    /// Get a named Profile2D object from the histogram system (non-const)
+    Profile2DPtr getProfile2D(const std::string& name) {
+      return getAnalysisObject<Profile2D>(name);
+    }
 
-    // /// Get a Profile2D object from the histogram system by axis ID codes (non-const)
-    // const Profile2DPtr getProfile2D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const {
-    //   return getAnalysisObject<Profile2D>(makeAxisCode(datasetId, xAxisId, yAxisId));
-    // }
+    /// Get a Profile2D object from the histogram system by axis ID codes (non-const)
+    const Profile2DPtr getProfile2D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const {
+      return getAnalysisObject<Profile2D>(makeAxisCode(datasetId, xAxisId, yAxisId));
+    }
 
-    // /// Get a Profile2D object from the histogram system by axis ID codes (non-const)
-    // Profile2DPtr getProfile2D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) {
-    //   return getAnalysisObject<Profile2D>(makeAxisCode(datasetId, xAxisId, yAxisId));
-    // }
+    /// Get a Profile2D object from the histogram system by axis ID codes (non-const)
+    Profile2DPtr getProfile2D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) {
+      return getAnalysisObject<Profile2D>(makeAxisCode(datasetId, xAxisId, yAxisId));
+    }
 
 
     /// Get a named Scatter2D object from the histogram system
     const Scatter2DPtr getScatter2D(const std::string& name) const {
       return getAnalysisObject<Scatter2D>(name);
     }
 
     /// Get a named Scatter2D object from the histogram system (non-const)
     Scatter2DPtr getScatter2D(const std::string& name) {
       return getAnalysisObject<Scatter2D>(name);
     }
 
     /// Get a Scatter2D object from the histogram system by axis ID codes (non-const)
     const Scatter2DPtr getScatter2D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const {
       return getAnalysisObject<Scatter2D>(makeAxisCode(datasetId, xAxisId, yAxisId));
     }
 
     /// Get a Scatter2D object from the histogram system by axis ID codes (non-const)
     Scatter2DPtr getScatter2D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) {
       return getAnalysisObject<Scatter2D>(makeAxisCode(datasetId, xAxisId, yAxisId));
     }
 
     //@}
 
 
   private:
 
     /// Name passed to constructor (used to find .info analysis data file, and as a fallback)
     string _defaultname;
 
     /// Pointer to analysis metadata object
     unique_ptr<AnalysisInfo> _info;
 
     /// Storage of all plot objects
     /// @todo Make this a map for fast lookup by path?
     vector<AnalysisObjectPtr> _analysisobjects;
     bool _haveReadData;
     /// @name Cross-section variables
     //@{
     double _crossSection;
     bool _gotCrossSection;
     //@}
 
     /// The controlling AnalysisHandler object.
     AnalysisHandler* _analysishandler;
 
     /// Collection of cached refdata to speed up many autobookings: the
     /// reference data file should only be read once.
     mutable std::map<std::string, AnalysisObjectPtr> _refdata;
 
 
   private:
 
     /// @name Utility functions
     //@{
 
     /// Get the reference data for this paper and cache it.
     void _cacheRefData() const;
 
     //@}
 
 
     /// The assignment operator is private and must never be called.
     /// In fact, it should not even be implemented.
     Analysis& operator=(const Analysis&);
 
   };
 
 
 }
 
 
 // Include definition of analysis plugin system so that analyses automatically see it when including Analysis.hh
 #include "Rivet/AnalysisBuilder.hh"
 
 /// @def DECLARE_RIVET_PLUGIN
 /// Preprocessor define to prettify the global-object plugin hook mechanism.
 #define DECLARE_RIVET_PLUGIN(clsname) Rivet::AnalysisBuilder<clsname> plugin_ ## clsname
 
 /// @def DECLARE_ALIASED_RIVET_PLUGIN
 /// Preprocessor define to prettify the global-object plugin hook mechanism, with an extra alias name for this analysis.
 // #define DECLARE_ALIASED_RIVET_PLUGIN(clsname, alias) Rivet::AnalysisBuilder<clsname> plugin_ ## clsname ## ( ## #alias ## )
 #define DECLARE_ALIASED_RIVET_PLUGIN(clsname, alias) DECLARE_RIVET_PLUGIN(clsname)( #alias )
 
 /// @def DEFAULT_RIVET_ANALYSIS_CONSTRUCTOR
 /// Preprocessor define to prettify the manky constructor with name string argument
 #define DEFAULT_RIVET_ANALYSIS_CONSTRUCTOR(clsname) clsname() : Analysis(# clsname) {}
 
 /// @def DEFAULT_RIVET_ANALYSIS_CTOR
 /// Slight abbreviation for DEFAULT_RIVET_ANALYSIS_CONSTRUCTOR
 #define DEFAULT_RIVET_ANALYSIS_CTOR(clsname) DEFAULT_RIVET_ANALYSIS_CONSTRUCTOR(clsname)
 
 
 
 #endif
diff --git a/include/Rivet/AnalysisHandler.hh b/include/Rivet/AnalysisHandler.hh
--- a/include/Rivet/AnalysisHandler.hh
+++ b/include/Rivet/AnalysisHandler.hh
@@ -1,255 +1,262 @@
 // -*- C++ -*-
 #ifndef RIVET_RivetHandler_HH
 #define RIVET_RivetHandler_HH
 
 #include "Rivet/Config/RivetCommon.hh"
 #include "Rivet/Particle.hh"
 #include "Rivet/AnalysisLoader.hh"
 #include "Rivet/Tools/RivetYODA.hh"
 
 namespace Rivet {
 
 
   // Forward declaration and smart pointer for Analysis
   class Analysis;
   typedef std::shared_ptr<Analysis> AnaHandle;
 
 
   // Needed to make smart pointers compare equivalent in the STL set
   struct CmpAnaHandle {
     bool operator() (const AnaHandle& a, const AnaHandle& b) {
       return a.get() < b.get();
     }
   };
 
 
   /// A class which handles a number of analysis objects to be applied to
   /// generated events. An {@link Analysis}' AnalysisHandler is also responsible
   /// for handling the final writing-out of histograms.
   class AnalysisHandler {
   public:
 
     /// @name Constructors and destructors. */
     //@{
 
     /// Preferred constructor, with optional run name.
     AnalysisHandler(const string& runname="");
 
     /// @brief Destructor
     /// The destructor is not virtual, as this class should not be inherited from.
     ~AnalysisHandler();
 
     //@}
 
 
   private:
 
     /// Get a logger object.
     Log& getLog() const;
 
 
   public:
 
     /// @name Run properties
     //@{
 
     /// Get the name of this run.
     string runName() const;
 
 
     /// Get the number of events seen. Should only really be used by external
     /// steering code or analyses in the finalize phase.
     size_t numEvents() const;
 
     /// Get the sum of the event weights seen - the weighted equivalent of the
     /// number of events. Should only really be used by external steering code
     /// or analyses in the finalize phase.
     double sumOfWeights() const;
 
     /// Set sum of weights. This is useful if Rivet is steered externally and
     /// the analyses are run for a sub-contribution of the events
     /// (but of course have to be normalised to the total sum of weights)
     void setSumOfWeights(const double& sum);
 
 
     /// Is cross-section information required by at least one child analysis?
     bool needCrossSection() const;
 
     /// Set the cross-section for the process being generated.
     AnalysisHandler& setCrossSection(double xs);
 
     /// Get the cross-section known to the handler.
     double crossSection() const {
       return _xs;
     }
 
     /// Whether the handler knows about a cross-section.
     bool hasCrossSection() const;
 
 
     /// Set the beam particles for this run
     AnalysisHandler& setRunBeams(const ParticlePair& beams) {
       _beams = beams;
       MSG_DEBUG("Setting run beams = " << beams << " @ " << sqrtS()/GeV << " GeV");
       return *this;
     }
 
     /// Get the beam particles for this run, usually determined from the first event.
     const ParticlePair& beams() const { return _beams; }
 
     /// Get beam IDs for this run, usually determined from the first event.
     /// @deprecated Use standalone beamIds(ah.beams()), to clean AH interface
     PdgIdPair beamIds() const;
 
     /// Get energy for this run, usually determined from the first event.
     /// @deprecated Use standalone sqrtS(ah.beams()), to clean AH interface
     double sqrtS() const;
 
     /// Setter for _ignoreBeams
     void setIgnoreBeams(bool ignore=true);
 
     //@}
 
 
     /// @name Handle analyses
     //@{
 
     /// Get a list of the currently registered analyses' names.
     std::vector<std::string> analysisNames() const;
 
     /// Get the collection of currently registered analyses.
     const std::set<AnaHandle, CmpAnaHandle>& analyses() const {
       return _analyses;
     }
 
     /// Get a registered analysis by name.
     const AnaHandle analysis(const std::string& analysisname) const;
 
 
     /// Add an analysis to the run list by object
     AnalysisHandler& addAnalysis(Analysis* analysis);
 
     /// @brief Add an analysis to the run list using its name.
     ///
     /// The actual Analysis to be used will be obtained via
     /// AnalysisLoader::getAnalysis(string).  If no matching analysis is found,
     /// no analysis is added (i.e. the null pointer is checked and discarded.
     AnalysisHandler& addAnalysis(const std::string& analysisname);
 
     /// @brief Add analyses to the run list using their names.
     ///
     /// The actual {@link Analysis}' to be used will be obtained via
     /// AnalysisHandler::addAnalysis(string), which in turn uses
     /// AnalysisLoader::getAnalysis(string). If no matching analysis is found
     /// for a given name, no analysis is added, but also no error is thrown.
     AnalysisHandler& addAnalyses(const std::vector<std::string>& analysisnames);
 
 
     /// Remove an analysis from the run list using its name.
     AnalysisHandler& removeAnalysis(const std::string& analysisname);
 
     /// Remove analyses from the run list using their names.
     AnalysisHandler& removeAnalyses(const std::vector<std::string>& analysisnames);
 
     //@}
 
 
     /// @name Main init/execute/finalise
     //@{
 
     /// Initialize a run, with the run beams taken from the example event.
     void init(const GenEvent& event);
 
     /// @brief Analyze the given \a event by reference.
     ///
     /// This function will call the AnalysisBase::analyze() function of all
     /// included analysis objects.
     void analyze(const GenEvent& event);
 
     /// @brief Analyze the given \a event by pointer.
     ///
     /// This function will call the AnalysisBase::analyze() function of all
     /// included analysis objects, after checking the event pointer validity.
     void analyze(const GenEvent* event);
 
     /// Finalize a run. This function calls the AnalysisBase::finalize()
     /// functions of all included analysis objects.
     void finalize();
 
     /// Function for postprocessing is introduced. This allows for further processing
     /// e. g. additional analyses which were done in the past but should be included
     /// in a certain analysis in one way or the other
     void post();
     
     /// Method reads YODA files and adds the contained AnalysisObjects
     /// to the member map "_readObjects".
     void readData(const std::string& filename);
 
     //@}
 
 
     /// @name Histogram / data object access
     //@{
 
+    /// Add a vector of analysis objects to the current state.
+    void addData(const std::vector<AnalysisObjectPtr>& aos);
+
+    /// Read analysis plots into the histo collection (via addData) from the named file.
+    void readData(const std::string& filename);
+
     /// Get all analyses' plots as a vector of analysis objects.
     std::vector<AnalysisObjectPtr> getData() const;
 
-    /// Write all analyses' plots to the named file.
+    /// Write all analyses' plots (via getData) to the named file.
     void writeData(const std::string& filename) const;
 
     //@}
 
 
   private:
     
     /// Map containing read YODA objects.
     std::map< std::string, AnalysisObjectPtr > _readObjects;
     bool _haveReadData;
 
     /// The collection of Analysis objects to be used.
     set<AnaHandle, CmpAnaHandle> _analyses;
 
 
     /// @name Run properties
     //@{
 
     /// Run name
     std::string _runname;
 
     /// Number of events seen.
     /// @todo Replace by a counter
     unsigned int _numEvents;
     /// Sum of event weights seen.
     /// @todo Replace by a counter
     double _sumOfWeights, _sumOfWeightsSq;
 
     /// Cross-section known to AH
     double _xs, _xserr;
 
     /// Beams used by this run.
     ParticlePair _beams;
 
     /// Flag to check if init has been called
     bool _initialised;
 
     /// Flag whether input event beams should be ignored in compatibility check
     bool _ignoreBeams;
 
     //@}
 
+
   private:
 
     /// The assignment operator is private and must never be called.
     /// In fact, it should not even be implemented.
     AnalysisHandler& operator=(const AnalysisHandler&);
 
     /// The copy constructor is private and must never be called.  In
     /// fact, it should not even be implemented.
     AnalysisHandler(const AnalysisHandler&);
 
   };
 
 
 }
 
 #endif
diff --git a/include/Rivet/Jet.fhh b/include/Rivet/Jet.fhh
--- a/include/Rivet/Jet.fhh
+++ b/include/Rivet/Jet.fhh
@@ -1,19 +1,38 @@
 // -*- C++ -*-
 #ifndef RIVET_Jet_FHH
 #define RIVET_Jet_FHH
 
 #include "Rivet/Tools/RivetSTL.hh"
 #include "Rivet/Tools/RivetFastJet.hh"
 
 namespace Rivet {
 
+
+  /// @name Jet declarations
+  //@{
+
   // Forward declaration
   class Jet;
 
   /// Typedef for a collection of Jet objects.
   typedef std::vector<Jet> Jets;
 
+  //@}
+
+
+  /// @name Jet function/functor declarations
+  //@{
+
+  /// std::function instantiation for functors taking a Jet and returning a bool
+  using JetSelector = function<bool(const Jet&)>;
+
+  /// std::function instantiation for functors taking two Jets and returning a bool
+  using JetSorter = function<bool(const Jet&, const Jet&)>;
+
+  //@}
+
+
 }
 
 
 #endif
diff --git a/include/Rivet/Jet.hh b/include/Rivet/Jet.hh
--- a/include/Rivet/Jet.hh
+++ b/include/Rivet/Jet.hh
@@ -1,274 +1,271 @@
 // -*- C++ -*-
 #ifndef RIVET_Jet_HH
 #define RIVET_Jet_HH
 
 #include "Rivet/Config/RivetCommon.hh"
 #include "Rivet/Jet.fhh"
 #include "Rivet/Particle.hh"
 #include "Rivet/Tools/Cuts.hh"
 #include "Rivet/Tools/Utils.hh"
 #include "Rivet/Tools/RivetFastJet.hh"
 #include "Rivet/Math/LorentzTrans.hh"
 #include <numeric>
 
 namespace Rivet {
 
 
   /// @brief Representation of a clustered jet of particles.
   class Jet : public ParticleBase {
   public:
 
     /// @name Constructors
     //@{
 
     /// Constructor from a FastJet PseudoJet, with optional full particle constituents information.
     Jet(const fastjet::PseudoJet& pj, const Particles& particles=Particles(), const Particles& tags=Particles()) {
       setState(pj, particles, tags);
     }
 
     /// Set the jet data, with optional full particle information.
     Jet(const FourMomentum& pjet, const Particles& particles=Particles(), const Particles& tags=Particles()) {
       setState(pjet, particles, tags);
     }
 
     /// Default constructor -- only for STL storability
     Jet() { clear(); }
 
     //@}
 
 
     /// @name Access jet constituents
     //@{
 
     /// Number of particles in this jet.
     size_t size() const { return _particles.size(); }
 
     /// Get the particles in this jet.
     Particles& particles() { return _particles; }
     /// Get the particles in this jet (const version)
     const Particles& particles() const { return _particles; }
     /// Get the particles in this jet which pass a cut (const)
-    const Particles particles(const Cut& c) const { return filterBy(_particles, c); }
+    const Particles particles(const Cut& c) const { return filter_select(_particles, c); }
+    /// Get the particles in this jet which pass a filtering functor (const)
+    const Particles particles(const ParticleSelector& s) const { return filter_select(_particles, s); }
 
     /// Get the particles in this jet (FastJet-like alias)
     Particles& constituents() { return particles(); }
     /// Get the particles in this jet (FastJet-like alias, const version)
     const Particles& constituents() const { return particles(); }
     /// Get the particles in this jet which pass a cut (FastJet-like alias, const)
     const Particles constituents(const Cut& c) const { return particles(c); }
+    /// Get the particles in this jet which pass a filtering functor (FastJet-like alias, const)
+    const Particles constituents(const ParticleSelector& s) const { return particles(s); }
 
     /// Check whether this jet contains a particular particle.
     bool containsParticle(const Particle& particle) const;
     /// Nicer alias for containsParticleId
     bool containsPID(const Particle& particle) const { return containsParticle(particle); }
 
     /// Check whether this jet contains a certain particle type.
     bool containsParticleId(PdgId pid) const;
     /// Nicer alias for containsParticleId
     bool containsPID(PdgId pid) const { return containsParticleId(pid); }
 
     /// Check whether this jet contains at least one of certain particle types.
     bool containsParticleId(const vector<PdgId>& pids) const;
     /// Nicer alias for containsParticleId
     bool containsPID(const vector<PdgId>& pids) const { return containsParticleId(pids); }
 
     //@}
 
 
     /// @name Tagging
     ///
     /// @note General sources of tag particles are planned. The default jet finding
     /// adds b-hadron, c-hadron, and tau tags by ghost association.
     //@{
 
     /// @brief Particles which have been tag-matched to this jet
     Particles& tags() { return _tags; }
     /// @brief Particles which have been tag-matched to this jet (const version)
     const Particles& tags() const { return _tags; }
     /// @brief Particles which have been tag-matched to this jet _and_ pass a selector function
     ///
     /// @note Note the less efficient return by value, due to the filtering.
-    template <typename FN>
-    Particles tags(const FN& f) const { return filter_select(tags(), f); }
+    Particles tags(const ParticleSelector& f) const { return filter_select(tags(), f); }
     /// @brief Particles which have been tag-matched to this jet _and_ pass a Cut
     ///
     /// @note Note the less efficient return by value, due to the cut-pass filtering.
     Particles tags(const Cut& c) const;
 
 
     /// @brief b particles which have been tag-matched to this jet (and pass an optional Cut)
     ///
     /// The default jet finding adds b-hadron tags by ghost association.
     Particles bTags(const Cut& c=Cuts::open()) const;
     /// @brief b particles which have been tag-matched to this jet _and_ pass a selector function
-    template <typename FN>
-    Particles bTags(const FN& f) const { return filter_select(bTags(), f); }
+    Particles bTags(const ParticleSelector& f) const { return filter_select(bTags(), f); }
 
     /// Does this jet have at least one b-tag (that passes an optional Cut)?
     bool bTagged(const Cut& c=Cuts::open()) const { return !bTags(c).empty(); }
     /// Does this jet have at least one b-tag (that passes the supplied selector function)?
-    template <typename FN>
-    bool bTagged(const FN& f) const { return !bTags(f).empty(); }
+    bool bTagged(const ParticleSelector& f) const { return !bTags(f).empty(); }
 
 
     /// @brief c (and not b) particles which have been tag-matched to this jet (and pass an optional Cut)
     ///
     /// The default jet finding adds c-hadron tags by ghost association.
     Particles cTags(const Cut& c=Cuts::open()) const;
     /// @brief c (and not b) particles which have been tag-matched to this jet and pass a selector function
-    template <typename FN>
-    Particles cTags(const FN& f) const { return filter_select(cTags(), f); }
+    Particles cTags(const ParticleSelector& f) const { return filter_select(cTags(), f); }
 
     /// Does this jet have at least one c-tag (that passes an optional Cut)?
     bool cTagged(const Cut& c=Cuts::open()) const { return !cTags(c).empty(); }
     /// Does this jet have at least one c-tag (that passes the supplied selector function)?
-    template <typename FN>
-    bool cTagged(const FN& f) const { return !cTags(f).empty(); }
+    bool cTagged(const ParticleSelector& f) const { return !cTags(f).empty(); }
 
 
     /// @brief Tau particles which have been tag-matched to this jet (and pass an optional Cut)
     ///
     /// The default jet finding adds tau tags by ghost association.
     Particles tauTags(const Cut& c=Cuts::open()) const;
     /// @brief Tau particles which have been tag-matched to this jet and pass a selector function
-    template <typename FN>
-    Particles tauTags(const FN& f) const { return filter_select(tauTags(), f); }
+    Particles tauTags(const ParticleSelector& f) const { return filter_select(tauTags(), f); }
 
     /// Does this jet have at least one tau-tag (that passes an optional Cut)?
     bool tauTagged(const Cut& c=Cuts::open()) const { return !tauTags(c).empty(); }
     /// Does this jet have at least one tau-tag (that passes the supplied selector function)?
-    template <typename FN>
-    bool tauTagged(const FN& f) const { return !tauTags(f).empty(); }
+    bool tauTagged(const ParticleSelector& f) const { return !tauTags(f).empty(); }
 
 
     /// @brief Check whether this jet contains a bottom-flavoured hadron.
     ///
     /// @deprecated The bTags() or bTagged() function is probably what you want
     /// for tagging. This one ignores the tags() list and draws conclusions
     /// based directly on the jet constituents; the other gives a much better match
     /// to typical experimental methods.
     ///
     /// @note The decision is made by first trying to find a bottom-flavoured particle
     /// in the particles list. Most likely this will fail unless bottom hadrons
     /// are set stable. If @a include_decay_products is true (the default), a
     /// fallback is attempted, using the post-hadronization ancestor history of
     /// all constituents.
     DEPRECATED("Prefer the bTags() or bTagged() function")
     bool containsBottom(bool include_decay_products=true) const;
 
     /// @brief Check whether this jet contains a charm-flavoured hadron.
     ///
     /// @deprecated The cTags() or cTagged() function is probably what you want
     /// for tagging. This one ignores the tags() list and draws conclusions
     /// based directly on the jet constituents; the other gives a much better match
     /// to typical experimental methods.
     ///
     /// @note The decision is made by first trying to find a charm-flavoured particle
     /// in the particles list. Most likely this will fail unless charmed hadrons
     /// are set stable. If @a include_decay_products is true (the default), a
     /// fallback is attempted, using the post-hadronization ancestor history of
     /// all constituents.
     DEPRECATED("Prefer the cTags() or cTagged() function")
     bool containsCharm(bool include_decay_products=true) const;
 
     //@}
 
 
     /// @name Effective jet 4-vector properties
     //@{
 
     /// Get equivalent single momentum four-vector.
     const FourMomentum& momentum() const { return _momentum; }
 
     /// Apply an active Lorentz transform to this jet
     /// @note The Rivet jet momentum, constituent particles, and tag particles will be modified.
     /// @warning The FastJet cluster sequence and pseudojets will not be modified: don't use them after transformation!
     Jet& transformBy(const LorentzTransform& lt);
 
     /// Get the total energy of this jet.
     double totalEnergy() const { return momentum().E(); }
 
     /// Get the energy carried in this jet by neutral particles.
     double neutralEnergy() const;
 
     /// Get the energy carried in this jet by hadrons.
     double hadronicEnergy() const;
 
     //@}
 
 
     /// @name Interaction with FastJet
     //@{
 
     /// Access the internal FastJet3 PseudoJet (as a const reference)
     const fastjet::PseudoJet& pseudojet() const { return _pseudojet; }
 
     /// Cast operator to FastJet3 PseudoJet (as a const reference)
     operator const fastjet::PseudoJet& () const { return pseudojet(); }
 
     //@}
 
 
     /// @name Set the jet constituents and properties
     //@{
 
     /// @brief Set the jet data from a FastJet PseudoJet, with optional particle constituents and tags lists.
     ///
     /// @note The particles() list will be extracted from PseudoJet constituents
     /// by default, making use of an attached user info if one is found.
     Jet& setState(const fastjet::PseudoJet& pj, const Particles& particles=Particles(), const Particles& tags=Particles());
 
     /// Set all the jet data, with optional full particle constituent and tag information.
     Jet& setState(const FourMomentum& mom, const Particles& particles, const Particles& tags=Particles());
 
     /// @brief Set the particles collection with full particle information.
     ///
     /// If set, this overrides particle info extracted from the PseudoJet
     Jet& setParticles(const Particles& particles);
     Jet& setConstituents(const Particles& particles) { return setParticles(particles); }
 
     /// Reset this jet as empty.
     Jet& clear();
 
     //@}
 
 
   private:
 
     /// FJ3 PseudoJet member to unify PseudoJet and Jet
     fastjet::PseudoJet _pseudojet;
 
     /// Full constituent particle information. (Filled from PseudoJet if possible.)
     /// @todo Make these mutable or similar? Add a flag to force a cache rebuild?
     Particles _particles;
 
     /// Particles used to tag this jet (can be anything, but c and b hadrons are the most common)
     Particles _tags;
 
     /// Effective jet 4-vector (just for caching)
     mutable FourMomentum _momentum;
 
   };
 
 
   /// @name String representation and streaming support
   //@{
 
   /// Represent a Jet as a string.
   std::string to_str(const Jet& j);
 
   /// Allow a Jet to be passed to an ostream.
   inline std::ostream& operator<<(std::ostream& os, const Jet& j) {
     os << to_str(j);
     return os;
   }
 
   //@}
 
 
 }
 
 
 #include "Rivet/Tools/JetUtils.hh"
 
 #endif
diff --git a/include/Rivet/Makefile.am b/include/Rivet/Makefile.am
--- a/include/Rivet/Makefile.am
+++ b/include/Rivet/Makefile.am
@@ -1,157 +1,162 @@
 ## Internal headers - not to be installed
 nobase_dist_noinst_HEADERS =
 ## Public headers - to be installed
 nobase_pkginclude_HEADERS =
 
 
 ## Rivet interface
 nobase_pkginclude_HEADERS += \
   Rivet.hh \
   Run.hh \
   Event.hh \
   ParticleBase.hh \
   Particle.fhh Particle.hh \
   Jet.fhh Jet.hh \
   Projection.fhh Projection.hh \
   ProjectionApplier.hh \
   ProjectionHandler.hh \
   Analysis.hh \
   AnalysisHandler.hh \
   AnalysisInfo.hh \
   AnalysisBuilder.hh \
   AnalysisLoader.hh
 
 
 ## Build config stuff
 nobase_pkginclude_HEADERS += \
   Config/RivetCommon.hh \
   Config/RivetConfig.hh \
   Config/BuildOptions.hh
 
 
 ## Projections
 nobase_pkginclude_HEADERS += \
   Projections/AxesDefinition.hh \
   Projections/Beam.hh \
   Projections/BeamThrust.hh \
   Projections/CentralEtHCM.hh \
   Projections/Centrality.hh \
   Projections/ChargedFinalState.hh \
   Projections/ChargedLeptons.hh \
   Projections/ConstLossyFinalState.hh \
   Projections/DISFinalState.hh \
   Projections/DISKinematics.hh \
   Projections/DISLepton.hh \
   Projections/DressedLeptons.hh \
   Projections/FastJets.hh \
   Projections/FinalPartons.hh \
   Projections/FinalState.hh \
   Projections/FoxWolframMoments.hh \
   Projections/FParameter.hh \
   Projections/HadronicFinalState.hh \
   Projections/HeavyHadrons.hh \
   Projections/Hemispheres.hh \
   Projections/IdentifiedFinalState.hh \
   Projections/InitialQuarks.hh \
   Projections/InvMassFinalState.hh \
   Projections/JetAlg.hh \
   Projections/JetShape.hh \
   Projections/LeadingParticlesFinalState.hh \
   Projections/LossyFinalState.hh \
   Projections/MergedFinalState.hh \
   Projections/MissingMomentum.hh \
   Projections/NeutralFinalState.hh \
   Projections/NonHadronicFinalState.hh \
   Projections/NonPromptFinalState.hh \
   Projections/ParisiTensor.hh \
   Projections/ParticleFinder.hh \
   Projections/PartonicTops.hh \
   Projections/PrimaryHadrons.hh \
   Projections/PromptFinalState.hh \
   Projections/SmearedParticles.hh \
   Projections/SmearedJets.hh \
   Projections/SmearedMET.hh \
   Projections/Sphericity.hh \
   Projections/Spherocity.hh \
   Projections/TauFinder.hh \
   Projections/Thrust.hh \
   Projections/TriggerCDFRun0Run1.hh \
   Projections/TriggerCDFRun2.hh \
   Projections/TriggerUA5.hh \
   Projections/UnstableFinalState.hh \
   Projections/VetoedFinalState.hh \
   Projections/VisibleFinalState.hh \
   Projections/WFinder.hh \
   Projections/ZFinder.hh
 ## Meta-projection convenience headers
 nobase_pkginclude_HEADERS +=   \
   Projections/FinalStates.hh \
   Projections/Smearing.hh
 
 
 ## Analysis base class headers
+# TODO: Move to Rivet/AnalysisTools header dir?
 nobase_pkginclude_HEADERS += \
   Analyses/MC_ParticleAnalysis.hh \
   Analyses/MC_JetAnalysis.hh \
   Analyses/MC_JetSplittings.hh
 
 
 ## Tools
 nobase_pkginclude_HEADERS += \
   Tools/BeamConstraint.hh \
   Tools/BinnedHistogram.hh \
   Tools/CentralityBinner.hh \
   Tools/Cmp.fhh \
   Tools/Cmp.hh \
   Tools/Cutflow.hh \
   Tools/Cuts.fhh \
   Tools/Cuts.hh \
   Tools/Exceptions.hh \
   Tools/JetUtils.hh \
   Tools/Logging.hh  \
+  Tools/Random.hh  \
   Tools/ParticleBaseUtils.hh \
   Tools/ParticleIdUtils.hh \
   Tools/ParticleUtils.hh \
   Tools/ParticleName.hh \
   Tools/PrettyPrint.hh \
   Tools/RivetPaths.hh \
   Tools/RivetSTL.hh \
   Tools/RivetFastJet.hh \
   Tools/RivetHepMC.hh \
   Tools/RivetYODA.hh \
   Tools/RivetMT2.hh \
   Tools/SmearingFunctions.hh \
+  Tools/MomentumSmearingFunctions.hh \
+  Tools/ParticleSmearingFunctions.hh \
+  Tools/JetSmearingFunctions.hh \
   Tools/TypeTraits.hh \
   Tools/Utils.hh
 nobase_dist_noinst_HEADERS += \
   Tools/osdir.hh
 
 
 ## Maths
 nobase_pkginclude_HEADERS += \
   Math/Matrices.hh \
   Math/Vector3.hh \
   Math/VectorN.hh \
   Math/MatrixN.hh \
   Math/MatrixDiag.hh \
   Math/MathHeader.hh \
   Math/Vectors.hh \
   Math/LorentzTrans.hh \
   Math/Matrix3.hh \
   Math/MathUtils.hh \
   Math/Vector4.hh \
   Math/Math.hh \
   Math/Units.hh \
   Math/Constants.hh \
   Math/eigen/util.h \
   Math/eigen/regressioninternal.h \
   Math/eigen/regression.h \
   Math/eigen/vector.h \
   Math/eigen/ludecompositionbase.h \
   Math/eigen/ludecomposition.h \
   Math/eigen/linearsolver.h \
   Math/eigen/linearsolverbase.h \
   Math/eigen/matrix.h \
   Math/eigen/vectorbase.h \
   Math/eigen/projective.h \
   Math/eigen/matrixbase.h
diff --git a/include/Rivet/Math/MathUtils.hh b/include/Rivet/Math/MathUtils.hh
--- a/include/Rivet/Math/MathUtils.hh
+++ b/include/Rivet/Math/MathUtils.hh
@@ -1,597 +1,597 @@
 // -*- C++ -*-
 #ifndef RIVET_MathUtils_HH
 #define RIVET_MathUtils_HH
 
 #include "Rivet/Math/MathHeader.hh"
 #include <type_traits>
 #include <cassert>
 
 namespace Rivet {
 
 
   /// @name Comparison functions for safe (floating point) equality tests
   //@{
 
   /// @brief Compare a number to zero
   ///
   /// This version for floating point types has a degree of fuzziness expressed
   /// by the absolute @a tolerance parameter, for floating point safety.
   template <typename NUM>
   inline typename std::enable_if<std::is_floating_point<NUM>::value, bool>::type
   isZero(NUM val, double tolerance=1e-8) {
     return fabs(val) < tolerance;
   }
 
   /// @brief Compare a number to zero
   ///
   /// SFINAE template specialisation for integers, since there is no FP
   /// precision issue.
   template <typename NUM>
   inline typename std::enable_if<std::is_integral<NUM>::value, bool>::type
-    isZero(NUM val, double UNUSED(tolerance)=1e-8) {
+  isZero(NUM val, double=1e-5) { //< NB. unused tolerance parameter for ints, still needs a default value!
     return val == 0;
   }
 
 
   /// @brief Compare two numbers for equality with a degree of fuzziness
   ///
   /// This version for floating point types (if any argument is FP) has a degree
   /// of fuzziness expressed by the fractional @a tolerance parameter, for
   /// floating point safety.
   template <typename N1, typename N2>
   inline typename std::enable_if<
     std::is_arithmetic<N1>::value && std::is_arithmetic<N2>::value &&
    (std::is_floating_point<N1>::value || std::is_floating_point<N2>::value), bool>::type
   fuzzyEquals(N1 a, N2 b, double tolerance=1e-5) {
     const double absavg = (std::abs(a) + std::abs(b))/2.0;
     const double absdiff = std::abs(a - b);
     const bool rtn = (isZero(a) && isZero(b)) || absdiff < tolerance*absavg;
     return rtn;
   }
 
   /// @brief Compare two numbers for equality with a degree of fuzziness
   ///
   /// Simpler SFINAE template specialisation for integers, since there is no FP
   /// precision issue.
   template <typename N1, typename N2>
   inline typename std::enable_if<
     std::is_integral<N1>::value && std::is_integral<N2>::value, bool>::type
-  fuzzyEquals(N1 a, N2 b, double UNUSED(tolerance)=1e-5) {
+    fuzzyEquals(N1 a, N2 b, double) { //< NB. unused tolerance parameter for ints, still needs a default value!
     return a == b;
   }
 
 
   /// @brief Compare two numbers for >= with a degree of fuzziness
   ///
   /// The @a tolerance parameter on the equality test is as for @c fuzzyEquals.
   template <typename N1, typename N2>
   inline typename std::enable_if<
     std::is_arithmetic<N1>::value && std::is_arithmetic<N2>::value, bool>::type
   fuzzyGtrEquals(N1 a, N2 b, double tolerance=1e-5) {
     return a > b || fuzzyEquals(a, b, tolerance);
   }
 
 
   /// @brief Compare two floating point numbers for <= with a degree of fuzziness
   ///
   /// The @a tolerance parameter on the equality test is as for @c fuzzyEquals.
   template <typename N1, typename N2>
   inline typename std::enable_if<
     std::is_arithmetic<N1>::value && std::is_arithmetic<N2>::value, bool>::type
   fuzzyLessEquals(N1 a, N2 b, double tolerance=1e-5) {
     return a < b || fuzzyEquals(a, b, tolerance);
   }
 
   //@}
 
 
   /// @name Ranges and intervals
   //@{
 
   /// Represents whether an interval is open (non-inclusive) or closed (inclusive).
   ///
   /// For example, the interval \f$ [0, \pi) \f$ is closed (an inclusive
   /// boundary) at 0, and open (a non-inclusive boundary) at \f$ \pi \f$.
   enum RangeBoundary { OPEN=0, SOFT=0, CLOSED=1, HARD=1 };
 
   /// @brief Determine if @a value is in the range @a low to @a high, for floating point numbers
   ///
   /// Interval boundary types are defined by @a lowbound and @a highbound.
   template <typename N1, typename N2, typename N3>
   inline typename std::enable_if<
     std::is_arithmetic<N1>::value && std::is_arithmetic<N2>::value && std::is_arithmetic<N3>::value, bool>::type
   inRange(N1 value, N2 low, N3 high,
           RangeBoundary lowbound=CLOSED, RangeBoundary highbound=OPEN) {
     if (lowbound == OPEN && highbound == OPEN) {
       return (value > low && value < high);
     } else if (lowbound == OPEN && highbound == CLOSED) {
       return (value > low && value <= high);
     } else if (lowbound == CLOSED && highbound == OPEN) {
       return (value >= low && value < high);
     } else { // if (lowbound == CLOSED && highbound == CLOSED) {
       return (value >= low && value <= high);
     }
   }
 
   /// @brief Determine if @a value is in the range @a low to @a high, for floating point numbers
   ///
   /// Interval boundary types are defined by @a lowbound and @a highbound.
   /// Closed intervals are compared fuzzily.
   template <typename N1, typename N2, typename N3>
   inline typename std::enable_if<
     std::is_arithmetic<N1>::value && std::is_arithmetic<N2>::value && std::is_arithmetic<N3>::value, bool>::type
   fuzzyInRange(N1 value, N2 low, N3 high,
                RangeBoundary lowbound=CLOSED, RangeBoundary highbound=OPEN) {
     if (lowbound == OPEN && highbound == OPEN) {
       return (value > low && value < high);
     } else if (lowbound == OPEN && highbound == CLOSED) {
       return (value > low && fuzzyLessEquals(value, high));
     } else if (lowbound == CLOSED && highbound == OPEN) {
       return (fuzzyGtrEquals(value, low) && value < high);
     } else { // if (lowbound == CLOSED && highbound == CLOSED) {
       return (fuzzyGtrEquals(value, low) && fuzzyLessEquals(value, high));
     }
   }
 
   /// Alternative version of inRange which accepts a pair for the range arguments.
   template <typename N1, typename N2, typename N3>
   inline typename std::enable_if<
     std::is_arithmetic<N1>::value && std::is_arithmetic<N2>::value && std::is_arithmetic<N3>::value, bool>::type
   inRange(N1 value, pair<N2, N3> lowhigh,
           RangeBoundary lowbound=CLOSED, RangeBoundary highbound=OPEN) {
     return inRange(value, lowhigh.first, lowhigh.second, lowbound, highbound);
   }
 
 
   // Alternative forms, with snake_case names and boundary types in names rather than as args -- from MCUtils
 
   /// @brief Boolean function to determine if @a value is within the given range
   ///
   /// @note The interval is closed (inclusive) at the low end, and open (exclusive) at the high end.
   template <typename N1, typename N2, typename N3>
   inline typename std::enable_if<
     std::is_arithmetic<N1>::value && std::is_arithmetic<N2>::value && std::is_arithmetic<N3>::value, bool>::type
   in_range(N1 val, N2 low, N3 high) {
     return inRange(val, low, high, CLOSED, OPEN);
   }
 
   /// @brief Boolean function to determine if @a value is within the given range
   ///
   /// @note The interval is closed at both ends.
   template <typename N1, typename N2, typename N3>
   inline typename std::enable_if<
     std::is_arithmetic<N1>::value && std::is_arithmetic<N2>::value && std::is_arithmetic<N3>::value, bool>::type
   in_closed_range(N1 val, N2 low, N3 high) {
     return inRange(val, low, high, CLOSED, CLOSED);
   }
 
   /// @brief Boolean function to determine if @a value is within the given range
   ///
   /// @note The interval is open at both ends.
   template <typename N1, typename N2, typename N3>
   inline typename std::enable_if<
     std::is_arithmetic<N1>::value && std::is_arithmetic<N2>::value && std::is_arithmetic<N3>::value, bool>::type
   in_open_range(N1 val, N2 low, N3 high) {
     return inRange(val, low, high, OPEN, OPEN);
   }
 
   /// @todo Add pair-based versions of the named range-boundary functions
 
   //@}
 
 
   /// @name Miscellaneous numerical helpers
   //@{
 
   /// Named number-type squaring operation.
   template <typename NUM>
   inline typename std::enable_if<std::is_arithmetic<NUM>::value, NUM>::type
   sqr(NUM a) {
     return a*a;
   }
 
   /// @brief Named number-type addition in quadrature operation.
   ///
   /// @note Result has the sqrt operation applied.
   /// @todo When std::common_type can be used, generalise to multiple numeric types with appropriate return type.
   // template <typename N1, typename N2>
   template <typename NUM>
   inline typename std::enable_if<std::is_arithmetic<NUM>::value, NUM>::type
   //std::common_type<N1, N2>::type
   add_quad(NUM a, NUM b) {
     return sqrt(a*a + b*b);
   }
 
   /// Named number-type addition in quadrature operation.
   ///
   /// @note Result has the sqrt operation applied.
   /// @todo When std::common_type can be used, generalise to multiple numeric types with appropriate return type.
   // template <typename N1, typename N2>
   template <typename NUM>
   inline typename std::enable_if<std::is_arithmetic<NUM>::value, NUM>::type
   //std::common_type<N1, N2, N3>::type
   add_quad(NUM a, NUM b, NUM c) {
     return sqrt(a*a + b*b + c*c);
   }
 
   /// Return a/b, or @a fail if b = 0
   /// @todo When std::common_type can be used, generalise to multiple numeric types with appropriate return type.
   inline double safediv(double num, double den, double fail=0.0) {
     return (!isZero(den)) ? num/den : fail;
   }
 
   /// A more efficient version of pow for raising numbers to integer powers.
   template <typename NUM>
   inline typename std::enable_if<std::is_arithmetic<NUM>::value, NUM>::type
   intpow(NUM val, unsigned int exp) {
     assert(exp >= 0);
     if (exp == 0) return (NUM) 1;
     else if (exp == 1) return val;
     return val * intpow(val, exp-1);
   }
 
   /// Find the sign of a number
   template <typename NUM>
   inline typename std::enable_if<std::is_arithmetic<NUM>::value, int>::type
   sign(NUM val) {
     if (isZero(val)) return ZERO;
     const int valsign = (val > 0) ? PLUS : MINUS;
     return valsign;
   }
 
   //@}
 
 
   /// @name Physics statistical distributions
   //@{
 
   /// @brief CDF for the Breit-Wigner distribution
   inline double cdfBW(double x, double mu, double gamma) {
     // normalize to (0;1) distribution
     const double xn = (x - mu)/gamma;
     return std::atan(xn)/M_PI + 0.5;
   }
 
   /// @brief Inverse CDF for the Breit-Wigner distribution
   inline double invcdfBW(double p, double mu, double gamma) {
     const double xn = std::tan(M_PI*(p-0.5));
     return gamma*xn + mu;
   }
 
   //@}
 
 
   /// @name Binning helper functions
   //@{
 
   /// @brief Make a list of @a nbins + 1 values equally spaced between @a start and @a end inclusive.
   ///
   /// NB. The arg ordering and the meaning of the nbins variable is "histogram-like",
   /// as opposed to the Numpy/Matlab version.
   inline vector<double> linspace(size_t nbins, double start, double end, bool include_end=true) {
     assert(end >= start);
     assert(nbins > 0);
     vector<double> rtn;
     const double interval = (end-start)/static_cast<double>(nbins);
     for (size_t i = 0; i < nbins; ++i) {
       rtn.push_back(start + i*interval);
     }
     assert(rtn.size() == nbins);
     if (include_end) rtn.push_back(end); //< exact end, not result of n * interval
     return rtn;
   }
 
 
   /// @brief Make a list of @a nbins + 1 values exponentially spaced between @a start and @a end inclusive.
   ///
   /// NB. The arg ordering and the meaning of the nbins variable is "histogram-like",
   /// as opposed to the Numpy/Matlab version, and the start and end arguments are expressed
   /// in "normal" space, rather than as the logarithms of the start/end values as in Numpy/Matlab.
   inline vector<double> logspace(size_t nbins, double start, double end, bool include_end=true) {
     assert(end >= start);
     assert(start > 0);
     assert(nbins > 0);
     const double logstart = std::log(start);
     const double logend = std::log(end);
     const vector<double> logvals = linspace(nbins, logstart, logend, false);
     assert(logvals.size() == nbins);
     vector<double> rtn; rtn.reserve(nbins+1);
     rtn.push_back(start); //< exact start, not exp(log(start))
     for (size_t i = 1; i < logvals.size(); ++i) {
       rtn.push_back(std::exp(logvals[i]));
     }
     assert(rtn.size() == nbins);
     if (include_end) rtn.push_back(end); //< exact end, not exp(n * loginterval)
     return rtn;
   }
 
 
   /// @brief Make a list of @a nbins + 1 values spaced for equal area
   /// Breit-Wigner binning between @a start and @a end inclusive. @a
   /// mu and @a gamma are the Breit-Wigner parameters.
   ///
   /// @note The arg ordering and the meaning of the nbins variable is "histogram-like",
   /// as opposed to the Numpy/Matlab version, and the start and end arguments are expressed
   /// in "normal" space.
   inline vector<double> bwspace(size_t nbins, double start, double end, double mu, double gamma) {
     assert(end >= start);
     assert(nbins > 0);
     const double pmin = cdfBW(start, mu, gamma);
     const double pmax = cdfBW(end,   mu, gamma);
     const vector<double> edges = linspace(nbins, pmin, pmax);
     assert(edges.size() == nbins+1);
     vector<double> rtn;
     for (double edge : edges) {
       rtn.push_back(invcdfBW(edge, mu, gamma));
     }
     assert(rtn.size() == nbins+1);
     return rtn;
   }
 
 
   /// @brief Return the bin index of the given value, @a val, given a vector of bin edges
   ///
   /// An underflow always returns -1. If allow_overflow is false (default) an overflow
   /// also returns -1, otherwise it returns the Nedge-1, the index of an inclusive bin
   /// starting at the last edge.
   ///
   /// @note The @a binedges vector must be sorted
   /// @todo Use std::common_type<NUM1, NUM2>::type x = val; ?
   template <typename NUM1, typename NUM2>
   inline typename std::enable_if<std::is_arithmetic<NUM1>::value && std::is_arithmetic<NUM2>::value, int>::type
   binIndex(NUM1 val, const vector<NUM2>& binedges, bool allow_overflow=false) {
     if (val < binedges.front()) return -1; ///< Below/out of histo range
     if (val >= binedges.back()) return allow_overflow ? int(binedges.size())-1 : -1; ///< Above/out of histo range
     return std::distance(binedges.begin(), --std::upper_bound(binedges.begin(), binedges.end(), val));
     //
     // int index = -1;
     // for (size_t i = 1; i < binedges.size(); ++i) {
     //   if (val < binedges[i]) {
     //     index = i-1;
     //     break;
     //   }
     // }
     // assert(inRange(index, -1, int(binedges.size())-1));
     // return index;
   }
 
   //@}
 
 
   /// @name Discrete statistics functions
   //@{
 
   /// Calculate the median of a sample
   /// @todo Support multiple container types via SFINAE
   template <typename NUM>
   inline typename std::enable_if<std::is_arithmetic<NUM>::value, NUM>::type
   median(const vector<NUM>& sample) {
     if (sample.empty()) throw RangeError("Can't compute median of an empty set");
     vector<NUM> tmp = sample;
     std::sort(tmp.begin(), tmp.end());
     const size_t imid = tmp.size()/2; // len1->idx0, len2->idx1, len3->idx1, len4->idx2, ...
     if (sample.size() % 2 == 0) return (tmp.at(imid-1) + tmp.at(imid)) / 2.0;
     else return tmp.at(imid);
   }
 
 
   /// Calculate the mean of a sample
   /// @todo Support multiple container types via SFINAE
   template <typename NUM>
   inline typename std::enable_if<std::is_arithmetic<NUM>::value, double>::type
   mean(const vector<NUM>& sample) {
     if (sample.empty()) throw RangeError("Can't compute mean of an empty set");
     double mean = 0.0;
     for (size_t i = 0; i < sample.size(); ++i) {
       mean += sample[i];
     }
     return mean/sample.size();
   }
 
   // Calculate the error on the mean, assuming Poissonian errors
   /// @todo Support multiple container types via SFINAE
   template <typename NUM>
   inline typename std::enable_if<std::is_arithmetic<NUM>::value, double>::type
   mean_err(const vector<NUM>& sample) {
     if (sample.empty()) throw RangeError("Can't compute mean_err of an empty set");
     double mean_e = 0.0;
     for (size_t i = 0; i < sample.size(); ++i) {
       mean_e += sqrt(sample[i]);
     }
     return mean_e/sample.size();
   }
 
 
   /// Calculate the covariance (variance) between two samples
   /// @todo Support multiple container types via SFINAE
   template <typename NUM>
   inline typename std::enable_if<std::is_arithmetic<NUM>::value, double>::type
   covariance(const vector<NUM>& sample1, const vector<NUM>& sample2) {
     if (sample1.empty() || sample2.empty()) throw RangeError("Can't compute covariance of an empty set");
     if (sample1.size() != sample2.size()) throw RangeError("Sizes of samples must be equal for covariance calculation");
     const double mean1 = mean(sample1);
     const double mean2 = mean(sample2);
     const size_t N = sample1.size();
     double cov = 0.0;
     for (size_t i = 0; i < N; i++) {
       const double cov_i = (sample1[i] - mean1)*(sample2[i] - mean2);
       cov += cov_i;
     }
     if (N > 1) return cov/(N-1);
     else return 0.0;
   }
 
   /// Calculate the error on the covariance (variance) of two samples, assuming poissonian errors
   /// @todo Support multiple container types via SFINAE
   template <typename NUM>
   inline typename std::enable_if<std::is_arithmetic<NUM>::value, double>::type
   covariance_err(const vector<NUM>& sample1, const vector<NUM>& sample2) {
     if (sample1.empty() || sample2.empty()) throw RangeError("Can't compute covariance_err of an empty set");
     if (sample1.size() != sample2.size()) throw RangeError("Sizes of samples must be equal for covariance_err calculation");
     const double mean1 = mean(sample1);
     const double mean2 = mean(sample2);
     const double mean1_e = mean_err(sample1);
     const double mean2_e = mean_err(sample2);
     const size_t N = sample1.size();
     double cov_e = 0.0;
     for (size_t i = 0; i < N; i++) {
       const double cov_i = (sqrt(sample1[i]) - mean1_e)*(sample2[i] - mean2) +
         (sample1[i] - mean1)*(sqrt(sample2[i]) - mean2_e);
       cov_e += cov_i;
     }
     if (N > 1) return cov_e/(N-1);
     else return 0.0;
   }
 
 
   /// Calculate the correlation strength between two samples
   /// @todo Support multiple container types via SFINAE
   template <typename NUM>
   inline typename std::enable_if<std::is_arithmetic<NUM>::value, double>::type
   correlation(const vector<NUM>& sample1, const vector<NUM>& sample2) {
     const double cov = covariance(sample1, sample2);
     const double var1 = covariance(sample1, sample1);
     const double var2 = covariance(sample2, sample2);
     const double correlation = cov/sqrt(var1*var2);
     const double corr_strength = correlation*sqrt(var2/var1);
     return corr_strength;
   }
 
   /// Calculate the error of the correlation strength between two samples assuming Poissonian errors
   /// @todo Support multiple container types via SFINAE
   template <typename NUM>
   inline typename std::enable_if<std::is_arithmetic<NUM>::value, double>::type
   correlation_err(const vector<NUM>& sample1, const vector<NUM>& sample2) {
     const double cov = covariance(sample1, sample2);
     const double var1 = covariance(sample1, sample1);
     const double var2 = covariance(sample2, sample2);
     const double cov_e = covariance_err(sample1, sample2);
     const double var1_e = covariance_err(sample1, sample1);
     const double var2_e = covariance_err(sample2, sample2);
 
     // Calculate the correlation
     const double correlation = cov/sqrt(var1*var2);
     // Calculate the error on the correlation
     const double correlation_err = cov_e/sqrt(var1*var2) -
       cov/(2*pow(3./2., var1*var2)) * (var1_e * var2 + var1 * var2_e);
 
     // Calculate the error on the correlation strength
     const double corr_strength_err = correlation_err*sqrt(var2/var1) +
       correlation/(2*sqrt(var2/var1)) * (var2_e/var1 - var2*var1_e/pow(2, var2));
 
     return corr_strength_err;
   }
 
   //@}
 
 
   /// @name Angle range mappings
   //@{
 
   /// @brief Reduce any number to the range [-2PI, 2PI]
   ///
   /// Achieved by repeated addition or subtraction of 2PI as required. Used to
   /// normalise angular measures.
   inline double _mapAngleM2PITo2Pi(double angle) {
     double rtn = fmod(angle, TWOPI);
     if (isZero(rtn)) return 0;
     assert(rtn >= -TWOPI && rtn <= TWOPI);
     return rtn;
   }
 
   /// Map an angle into the range (-PI, PI].
   inline double mapAngleMPiToPi(double angle) {
     double rtn = _mapAngleM2PITo2Pi(angle);
     if (isZero(rtn)) return 0;
     if (rtn > PI) rtn -= TWOPI;
     if (rtn <= -PI) rtn += TWOPI;
     assert(rtn > -PI && rtn <= PI);
     return rtn;
   }
 
   /// Map an angle into the range [0, 2PI).
   inline double mapAngle0To2Pi(double angle) {
     double rtn = _mapAngleM2PITo2Pi(angle);
     if (isZero(rtn)) return 0;
     if (rtn < 0) rtn += TWOPI;
     if (rtn == TWOPI) rtn = 0;
     assert(rtn >= 0 && rtn < TWOPI);
     return rtn;
   }
 
   /// Map an angle into the range [0, PI].
   inline double mapAngle0ToPi(double angle) {
     double rtn = fabs(mapAngleMPiToPi(angle));
     if (isZero(rtn)) return 0;
     assert(rtn > 0 && rtn <= PI);
     return rtn;
   }
 
   /// Map an angle into the enum-specified range.
   inline double mapAngle(double angle, PhiMapping mapping) {
     switch (mapping) {
     case MINUSPI_PLUSPI:
       return mapAngleMPiToPi(angle);
     case ZERO_2PI:
       return mapAngle0To2Pi(angle);
     case ZERO_PI:
       return mapAngle0To2Pi(angle);
     default:
       throw Rivet::UserError("The specified phi mapping scheme is not implemented");
     }
   }
 
   //@}
 
 
-  /// @name Phase space measure helpers
+  /// @name Phase-space measure helpers
   //@{
 
   /// @brief Calculate the difference between two angles in radians
   ///
   /// Returns in the range [0, PI].
   inline double deltaPhi(double phi1, double phi2) {
     return mapAngle0ToPi(phi1 - phi2);
   }
 
   /// Calculate the abs difference between two pseudorapidities
   ///
   /// @note Just a cosmetic name for analysis code clarity.
   inline double deltaEta(double eta1, double eta2) {
     return fabs(eta1 - eta2);
   }
 
   /// Calculate the abs difference between two rapidities
   ///
   /// @note Just a cosmetic name for analysis code clarity.
   inline double deltaRap(double y1, double y2) {
     return fabs(y1 - y2);
   }
 
   /// Calculate the distance between two points in 2D rapidity-azimuthal
   /// ("\f$ \eta-\phi \f$") space. The phi values are given in radians.
   inline double deltaR(double rap1, double phi1, double rap2, double phi2) {
     const double dphi = deltaPhi(phi1, phi2);
     return sqrt( sqr(rap1-rap2) + sqr(dphi) );
   }
 
   /// Calculate a rapidity value from the supplied energy @a E and longitudinal momentum @a pz.
   inline double rapidity(double E, double pz) {
     if (isZero(E - pz)) {
       throw std::runtime_error("Divergent positive rapidity");
       return MAXDOUBLE;
     }
     if (isZero(E + pz)) {
       throw std::runtime_error("Divergent negative rapidity");
       return -MAXDOUBLE;
     }
     return 0.5*log((E+pz)/(E-pz));
   }
 
   //@}
 
 
 }
 
 
 #endif
diff --git a/include/Rivet/Math/Vector4.hh b/include/Rivet/Math/Vector4.hh
--- a/include/Rivet/Math/Vector4.hh
+++ b/include/Rivet/Math/Vector4.hh
@@ -1,1390 +1,1411 @@
 #ifndef RIVET_MATH_VECTOR4
 #define RIVET_MATH_VECTOR4
 
 #include "Rivet/Math/MathHeader.hh"
 #include "Rivet/Math/MathUtils.hh"
 #include "Rivet/Math/VectorN.hh"
 #include "Rivet/Math/Vector3.hh"
 
 namespace Rivet {
 
 
   class FourVector;
   class FourMomentum;
   class LorentzTransform;
   typedef FourVector Vector4;
   FourVector transform(const LorentzTransform& lt, const FourVector& v4);
 
 
   /// @brief Specialisation of VectorN to a general (non-momentum) Lorentz 4-vector.
   ///
   /// @todo Add composite set/mk methods from different coord systems
   class FourVector : public Vector<4> {
     friend FourVector multiply(const double a, const FourVector& v);
     friend FourVector multiply(const FourVector& v, const double a);
     friend FourVector add(const FourVector& a, const FourVector& b);
     friend FourVector transform(const LorentzTransform& lt, const FourVector& v4);
 
   public:
 
     FourVector() : Vector<4>() { }
 
     template<typename V4>
     FourVector(const V4& other) {
       this->setT(other.t());
       this->setX(other.x());
       this->setY(other.y());
       this->setZ(other.z());
     }
 
     FourVector(const Vector<4>& other)
       : Vector<4>(other) { }
 
     FourVector(const double t, const double x, const double y, const double z) {
       this->setT(t);
       this->setX(x);
       this->setY(y);
       this->setZ(z);
     }
 
     virtual ~FourVector() { }
 
   public:
 
     double t() const { return get(0); }
     double t2() const { return sqr(t()); }
     FourVector& setT(const double t) { set(0, t); return *this; }
 
     double x() const { return get(1); }
     double x2() const { return sqr(x()); }
     FourVector& setX(const double x) { set(1, x); return *this; }
 
     double y() const { return get(2); }
     double y2() const { return sqr(y()); }
     FourVector& setY(const double y) { set(2, y); return *this; }
 
     double z() const { return get(3); }
     double z2() const { return sqr(z()); }
     FourVector& setZ(const double z) { set(3, z); return *this; }
 
     double invariant() const {
       // Done this way for numerical precision
       return (t() + z())*(t() - z()) - x()*x() - y()*y();
     }
 
     bool isNull() const {
       return Rivet::isZero(invariant());
     }
 
     /// Angle between this vector and another
     double angle(const FourVector& v) const {
       return vector3().angle( v.vector3() );
     }
     /// Angle between this vector and another (3-vector)
     double angle(const Vector3& v3) const {
       return vector3().angle(v3);
     }
 
     /// @brief Mod-square of the projection of the 3-vector on to the \f$ x-y \f$ plane
     /// This is a more efficient function than @c polarRadius, as it avoids the square root.
     /// Use it if you only need the squared value, or e.g. an ordering by magnitude.
     double polarRadius2() const {
       return vector3().polarRadius2();
     }
     /// Synonym for polarRadius2
     double perp2() const {
       return vector3().perp2();
     }
     /// Synonym for polarRadius2
     double rho2() const {
       return vector3().rho2();
     }
 
     /// Magnitude of projection of 3-vector on to the \f$ x-y \f$ plane
     double polarRadius() const {
       return vector3().polarRadius();
     }
     /// Synonym for polarRadius
     double perp() const {
       return vector3().perp();
     }
     /// Synonym for polarRadius
     double rho() const {
       return vector3().rho();
     }
 
     /// Projection of 3-vector on to the \f$ x-y \f$ plane
     Vector3 polarVec() const {
       return vector3().polarVec();
     }
     /// Synonym for polarVec
     Vector3 perpVec() const {
       return vector3().perpVec();
     }
     /// Synonym for polarVec
     Vector3 rhoVec() const {
       return vector3().rhoVec();
     }
 
     /// Angle subtended by the 3-vector's projection in x-y and the x-axis.
     double azimuthalAngle(const PhiMapping mapping=ZERO_2PI) const {
       return vector3().azimuthalAngle(mapping);
     }
     /// Synonym for azimuthalAngle.
     double phi(const PhiMapping mapping=ZERO_2PI) const {
       return vector3().phi(mapping);
     }
 
     /// Angle subtended by the 3-vector and the z-axis.
     double polarAngle() const {
       return vector3().polarAngle();
     }
     /// Synonym for polarAngle.
     double theta() const {
       return vector3().theta();
     }
 
     /// Pseudorapidity (defined purely by the 3-vector components)
     double pseudorapidity() const {
       return vector3().pseudorapidity();
     }
     /// Synonym for pseudorapidity.
     double eta() const {
       return vector3().eta();
     }
 
     /// Get the \f$ |\eta| \f$ directly.
     double abspseudorapidity() const { return fabs(eta()); }
     /// Get the \f$ |\eta| \f$ directly (alias).
     double abseta() const { return fabs(eta()); }
 
     /// Get the spatial part of the 4-vector as a 3-vector.
     Vector3 vector3() const {
       return Vector3(get(1), get(2), get(3));
     }
 
 
   public:
 
     /// Contract two 4-vectors, with metric signature (+ - - -).
     double contract(const FourVector& v) const {
       const double result = t()*v.t() - x()*v.x() - y()*v.y() - z()*v.z();
       return result;
     }
 
     /// Contract two 4-vectors, with metric signature (+ - - -).
     double dot(const FourVector& v) const {
       return contract(v);
     }
 
     /// Contract two 4-vectors, with metric signature (+ - - -).
     double operator*(const FourVector& v) const {
       return contract(v);
     }
 
     /// Multiply by a scalar.
     FourVector& operator*=(double a) {
       _vec = multiply(a, *this)._vec;
       return *this;
     }
 
     /// Divide by a scalar.
     FourVector& operator/=(double a) {
       _vec = multiply(1.0/a, *this)._vec;
       return *this;
     }
 
     /// Add to this 4-vector.
     FourVector& operator+=(const FourVector& v) {
       _vec = add(*this, v)._vec;
       return *this;
     }
 
     /// Subtract from this 4-vector. NB time as well as space components are subtracted.
     FourVector& operator-=(const FourVector& v) {
       _vec = add(*this, -v)._vec;
       return *this;
     }
 
     /// Multiply all components (space and time) by -1.
     FourVector operator-() const {
       FourVector result;
       result._vec = -_vec;
       return result;
     }
 
     /// Multiply space components only by -1.
     FourVector reverse() const {
       FourVector result = -*this;
       result.setT(-result.t());
       return result;
     }
 
   };
 
 
   /// Contract two 4-vectors, with metric signature (+ - - -).
   inline double contract(const FourVector& a, const FourVector& b) {
     return a.contract(b);
   }
 
   /// Contract two 4-vectors, with metric signature (+ - - -).
   inline double dot(const FourVector& a, const FourVector& b) {
     return contract(a, b);
   }
 
   inline FourVector multiply(const double a, const FourVector& v) {
     FourVector result;
     result._vec = a * v._vec;
     return result;
   }
 
   inline FourVector multiply(const FourVector& v, const double a) {
     return multiply(a, v);
   }
 
   inline FourVector operator*(const double a, const FourVector& v) {
     return multiply(a, v);
   }
 
   inline FourVector operator*(const FourVector& v, const double a) {
     return multiply(a, v);
   }
 
   inline FourVector operator/(const FourVector& v, const double a) {
     return multiply(1.0/a, v);
   }
 
   inline FourVector add(const FourVector& a, const FourVector& b) {
     FourVector result;
     result._vec = a._vec + b._vec;
     return result;
   }
 
   inline FourVector operator+(const FourVector& a, const FourVector& b) {
     return add(a, b);
   }
 
   inline FourVector operator-(const FourVector& a, const FourVector& b) {
     return add(a, -b);
   }
 
   /// Calculate the Lorentz self-invariant of a 4-vector.
   /// \f$ v_\mu v^\mu = g_{\mu\nu} x^\mu x^\nu \f$.
   inline double invariant(const FourVector& lv) {
     return lv.invariant();
   }
 
   /// Angle (in radians) between spatial parts of two Lorentz vectors.
   inline double angle(const FourVector& a, const FourVector& b) {
     return a.angle(b);
   }
 
   /// Angle (in radians) between spatial parts of two Lorentz vectors.
   inline double angle(const Vector3& a, const FourVector& b) {
     return angle( a, b.vector3() );
   }
 
   /// Angle (in radians) between spatial parts of two Lorentz vectors.
   inline double angle(const FourVector& a, const Vector3& b) {
     return a.angle(b);
   }
 
 
   ////////////////////////////////////////////////
 
 
   /// Specialized version of the FourVector with momentum/energy functionality.
   class FourMomentum : public FourVector {
     friend FourMomentum multiply(const double a, const FourMomentum& v);
     friend FourMomentum multiply(const FourMomentum& v, const double a);
     friend FourMomentum add(const FourMomentum& a, const FourMomentum& b);
     friend FourMomentum transform(const LorentzTransform& lt, const FourMomentum& v4);
 
   public:
     FourMomentum() { }
 
     template<typename V4>
     FourMomentum(const V4& other) {
       this->setE(other.t());
       this->setPx(other.x());
       this->setPy(other.y());
       this->setPz(other.z());
     }
 
     FourMomentum(const Vector<4>& other)
       : FourVector(other) { }
 
     FourMomentum(const double E, const double px, const double py, const double pz) {
       this->setE(E);
       this->setPx(px);
       this->setPy(py);
       this->setPz(pz);
     }
 
     ~FourMomentum() {}
 
   public:
 
 
     /// @name Coordinate setters
     //@{
 
     /// Set energy \f$ E \f$ (time component of momentum).
     FourMomentum& setE(double E) {
       setT(E);
       return *this;
     }
 
     /// Set x-component of momentum \f$ p_x \f$.
     FourMomentum& setPx(double px) {
       setX(px);
       return *this;
     }
 
     /// Set y-component of momentum \f$ p_y \f$.
     FourMomentum& setPy(double py) {
       setY(py);
       return *this;
     }
 
     /// Set z-component of momentum \f$ p_z \f$.
     FourMomentum& setPz(double pz) {
       setZ(pz);
       return *this;
     }
 
 
     /// Set the p coordinates and energy simultaneously
     FourMomentum& setPE(double px, double py, double pz, double E) {
       if (E < 0)
         throw std::invalid_argument("Negative energy given as argument: " + to_str(E));
       setPx(px); setPy(py); setPz(pz); setE(E);
       return *this;
     }
     /// Alias for setPE
     FourMomentum& setXYZE(double px, double py, double pz, double E) {
       return setPE(px, py, pz, E);
     }
     // /// Near-alias with switched arg order
     // FourMomentum& setEP(double E, double px, double py, double pz) {
     //   return setPE(px, py, pz, E);
     // }
     // /// Alias for setEP
     // FourMomentum& setEXYZ(double E, double px, double py, double pz) {
     //   return setEP(E, px, py, pz);
     // }
 
 
     /// Set the p coordinates and mass simultaneously
     FourMomentum& setPM(double px, double py, double pz, double mass) {
       if (mass < 0)
         throw std::invalid_argument("Negative mass given as argument: " + to_str(mass));
       const double E = sqrt( sqr(mass) + sqr(px) + sqr(py) + sqr(pz) );
       // setPx(px); setPy(py); setPz(pz); setE(E);
       return setPE(px, py, pz, E);
     }
     /// Alias for setPM
     FourMomentum& setXYZM(double px, double py, double pz, double mass) {
       return setPM(px, py, pz, mass);
     }
 
 
     /// Set the vector state from (eta,phi,energy) coordinates and the mass
     ///
     /// eta = -ln(tan(theta/2))
     /// -> theta = 2 atan(exp(-eta))
     FourMomentum& setEtaPhiME(double eta, double phi, double mass, double E) {
       if (mass < 0)
         throw std::invalid_argument("Negative mass given as argument");
       if (E < 0)
         throw std::invalid_argument("Negative energy given as argument");
       const double theta = 2 * atan(exp(-eta));
       if (theta < 0 || theta > M_PI)
         throw std::domain_error("Polar angle outside 0..pi in calculation");
       setThetaPhiME(theta, phi, mass, E);
       return *this;
     }
 
     /// Set the vector state from (eta,phi,pT) coordinates and the mass
     ///
     /// eta = -ln(tan(theta/2))
     /// -> theta = 2 atan(exp(-eta))
     FourMomentum& setEtaPhiMPt(double eta, double phi, double mass, double pt) {
       if (mass < 0)
         throw std::invalid_argument("Negative mass given as argument");
       if (pt < 0)
         throw std::invalid_argument("Negative transverse momentum given as argument");
       const double theta = 2 * atan(exp(-eta));
       if (theta < 0 || theta > M_PI)
         throw std::domain_error("Polar angle outside 0..pi in calculation");
       const double p = pt / sin(theta);
       const double E = sqrt( sqr(p) + sqr(mass) );
       setThetaPhiME(theta, phi, mass, E);
       return *this;
     }
 
     /// Set the vector state from (y,phi,energy) coordinates and the mass
     ///
     /// y = 0.5 * ln((E+pz)/(E-pz))
     /// -> (E^2 - pz^2) exp(2y) = (E+pz)^2
     ///  & (E^2 - pz^2) exp(-2y) = (E-pz)^2
     /// -> E = sqrt(pt^2 + m^2) cosh(y)
     /// -> pz = sqrt(pt^2 + m^2) sinh(y)
     /// -> sqrt(pt^2 + m^2) = E / cosh(y)
     FourMomentum& setRapPhiME(double y, double phi, double mass, double E) {
       if (mass < 0)
         throw std::invalid_argument("Negative mass given as argument");
       if (E < 0)
         throw std::invalid_argument("Negative energy given as argument");
       const double sqrt_pt2_m2 = E / cosh(y);
       const double pt = sqrt( sqr(sqrt_pt2_m2) - sqr(mass) );
       if (pt < 0)
         throw std::domain_error("Negative transverse momentum in calculation");
       const double pz = sqrt_pt2_m2 * sinh(y);
       const double px = pt * cos(phi);
       const double py = pt * sin(phi);
       setPE(px, py, pz, E);
       return *this;
     }
 
     /// Set the vector state from (y,phi,pT) coordinates and the mass
     ///
     /// y = 0.5 * ln((E+pz)/(E-pz))
     /// -> E = sqrt(pt^2 + m^2) cosh(y)  [see above]
     FourMomentum& setRapPhiMPt(double y, double phi, double mass, double pt) {
       if (mass < 0)
         throw std::invalid_argument("Negative mass given as argument");
       if (pt < 0)
         throw std::invalid_argument("Negative transverse mass given as argument");
       const double E = sqrt( sqr(pt) + sqr(mass) ) * cosh(y);
       if (E < 0)
         throw std::domain_error("Negative energy in calculation");
       setRapPhiME(y, phi, mass, E);
       return *this;
     }
 
     /// Set the vector state from (theta,phi,energy) coordinates and the mass
     ///
     /// p = sqrt(E^2 - mass^2)
     /// pz = p cos(theta)
     /// pt = p sin(theta)
     FourMomentum& setThetaPhiME(double theta, double phi, double mass, double E) {
       if (theta < 0 || theta > M_PI)
         throw std::invalid_argument("Polar angle outside 0..pi given as argument");
       if (mass < 0)
         throw std::invalid_argument("Negative mass given as argument");
       if (E < 0)
         throw std::invalid_argument("Negative energy given as argument");
       const double p = sqrt( sqr(E) - sqr(mass) );
       const double pz = p * cos(theta);
       const double pt = p * sin(theta);
       if (pt < 0)
         throw std::invalid_argument("Negative transverse momentum in calculation");
       const double px = pt * cos(phi);
       const double py = pt * sin(phi);
       setPE(px, py, pz, E);
       return *this;
     }
 
     /// Set the vector state from (theta,phi,pT) coordinates and the mass
     ///
     /// p = pt / sin(theta)
     /// pz = p cos(theta)
     /// E = sqrt(p^2 + mass^2)
     FourMomentum& setThetaPhiMPt(double theta, double phi, double mass, double pt) {
       if (theta < 0 || theta > M_PI)
         throw std::invalid_argument("Polar angle outside 0..pi given as argument");
       if (mass < 0)
         throw std::invalid_argument("Negative mass given as argument");
       if (pt < 0)
         throw std::invalid_argument("Negative transverse momentum given as argument");
       const double p = pt / sin(theta);
       const double px = pt * cos(phi);
       const double py = pt * sin(phi);
       const double pz = p * cos(theta);
       const double E = sqrt( sqr(p) + sqr(mass) );
       setPE(px, py, pz, E);
       return *this;
     }
 
     /// Set the vector state from (pT,phi,energy) coordinates and the mass
     ///
     /// pz = sqrt(E^2 - mass^2 - pt^2)
     FourMomentum& setPtPhiME(double pt, double phi, double mass, double E) {
       if (pt < 0)
         throw std::invalid_argument("Negative transverse momentum given as argument");
       if (mass < 0)
         throw std::invalid_argument("Negative mass given as argument");
       if (E < 0)
         throw std::invalid_argument("Negative energy given as argument");
       const double px = pt * cos(phi);
       const double py = pt * sin(phi);
       const double pz = sqrt(sqr(E) - sqr(mass) - sqr(pt));
       setPE(px, py, pz, E);
       return *this;
     }
 
     //@}
 
 
     /// @name Accessors
     //@{
 
     /// Get energy \f$ E \f$ (time component of momentum).
     double E() const { return t(); }
     /// Get energy-squared \f$ E^2 \f$.
     double E2() const { return t2(); }
 
     /// Get x-component of momentum \f$ p_x \f$.
     double px() const { return x(); }
     /// Get x-squared \f$ p_x^2 \f$.
     double px2() const { return x2(); }
 
     /// Get y-component of momentum \f$ p_y \f$.
     double py() const { return y(); }
     /// Get y-squared \f$ p_y^2 \f$.
     double py2() const { return y2(); }
 
     /// Get z-component of momentum \f$ p_z \f$.
     double pz() const { return z(); }
     /// Get z-squared \f$ p_z^2 \f$.
     double pz2() const { return z2(); }
 
 
     /// @brief Get the mass \f$ m = \sqrt{E^2 - p^2} \f$ (the Lorentz self-invariant).
     ///
     /// For spacelike momenta, the mass will be -sqrt(|mass2|).
     double mass() const {
       // assert(Rivet::isZero(mass2()) || mass2() > 0);
       // if (Rivet::isZero(mass2())) {
       //   return 0.0;
       // } else {
       //   return sqrt(mass2());
       // }
       return sign(mass2()) * sqrt(fabs(mass2()));
     }
 
     /// Get the squared mass \f$ m^2 = E^2 - p^2 \f$ (the Lorentz self-invariant).
     double mass2() const {
       return invariant();
     }
 
 
     /// Get 3-momentum part, \f$ p \f$.
     Vector3 p3() const { return vector3(); }
 
     /// Get the modulus of the 3-momentum
     double p() const {
       return p3().mod();
     }
 
     /// Get the modulus-squared of the 3-momentum
     double p2() const {
       return p3().mod2();
     }
 
 
     /// Calculate the rapidity.
     double rapidity() const {
       return 0.5 * std::log( (E() + pz()) / (E() - pz()) );
     }
     /// Alias for rapidity.
     double rap() const {
       return rapidity();
     }
 
     /// Absolute rapidity.
     double absrapidity() const {
       return fabs(rapidity());
     }
     /// Absolute rapidity.
     double absrap() const {
       return fabs(rap());
     }
 
     /// Calculate the transverse momentum vector \f$ \vec{p}_T \f$.
     Vector3 pTvec() const {
       return p3().polarVec();
     }
     /// Synonym for pTvec
     Vector3 ptvec() const {
       return pTvec();
     }
 
     /// Calculate the squared transverse momentum \f$ p_T^2 \f$.
     double pT2() const {
       return vector3().polarRadius2();
     }
     /// Calculate the squared transverse momentum \f$ p_T^2 \f$.
     double pt2() const {
       return vector3().polarRadius2();
     }
 
     /// Calculate the transverse momentum \f$ p_T \f$.
     double pT() const {
       return sqrt(pT2());
     }
     /// Calculate the transverse momentum \f$ p_T \f$.
     double pt() const {
       return sqrt(pT2());
     }
 
     /// Calculate the transverse energy \f$ E_T^2 = E^2 \sin^2{\theta} \f$.
     double Et2() const {
       return Et() * Et();
     }
     /// Calculate the transverse energy \f$ E_T = E \sin{\theta} \f$.
     double Et() const {
       return E() * sin(polarAngle());
     }
 
     //@}
 
 
     /// @name Lorentz boost factors and vectors
     //@{
 
     /// Calculate the boost factor \f$ \gamma \f$.
     /// @note \f$ \gamma = E/mc^2 \f$ so we rely on the c=1 convention
     double gamma() const {
       return sqrt(E2()/mass2());
     }
 
     /// Calculate the boost vector \f$ \vec{\gamma} \f$.
     /// @note \f$ \gamma = E/mc^2 \f$ so we rely on the c=1 convention
     Vector3 gammaVec() const {
       return gamma() * p3().unit();
     }
 
     /// Calculate the boost factor \f$ \beta \f$.
     /// @note \f$ \beta = pc/E \f$ so we rely on the c=1 convention
     double beta() const {
       return p()/E();
     }
 
     /// Calculate the boost vector \f$ \vec{\beta} \f$.
     /// @note \f$ \beta = pc/E \f$ so we rely on the c=1 convention
     Vector3 betaVec() const {
       // return Vector3(px()/E(), py()/E(), pz()/E());
       return p3()/E();
     }
 
     /// @brief Deprecated alias for betaVec
     /// @deprecated This will be removed; use betaVec() instead
     Vector3 boostVector() const { return betaVec(); }
 
     //@}
 
 
     ////////////////////////////////////////
 
 
     /// @name Sorting helpers
     //@{
 
     /// Struct for sorting by increasing energy
     struct byEAscending {
       bool operator()(const FourMomentum& left, const FourMomentum& right) const{
         const double pt2left = left.E();
         const double pt2right = right.E();
         return pt2left < pt2right;
       }
 
       bool operator()(const FourMomentum* left, const FourMomentum* right) const{
         return (*this)(*left, *right);
       }
     };
 
 
     /// Struct for sorting by decreasing energy
     struct byEDescending {
       bool operator()(const FourMomentum& left, const FourMomentum& right) const{
         return byEAscending()(right, left);
       }
 
       bool operator()(const FourMomentum* left, const FourVector* right) const{
         return (*this)(*left, *right);
       }
     };
 
     //@}
 
 
     ////////////////////////////////////////
 
 
     /// @name Arithmetic operators
     //@{
 
     /// Multiply by a scalar
     FourMomentum& operator*=(double a) {
       _vec = multiply(a, *this)._vec;
       return *this;
     }
 
     /// Divide by a scalar
     FourMomentum& operator/=(double a) {
       _vec = multiply(1.0/a, *this)._vec;
       return *this;
     }
 
     /// Add to this 4-vector. NB time as well as space components are added.
     FourMomentum& operator+=(const FourMomentum& v) {
       _vec = add(*this, v)._vec;
       return *this;
     }
 
     /// Subtract from this 4-vector. NB time as well as space components are subtracted.
     FourMomentum& operator-=(const FourMomentum& v) {
       _vec = add(*this, -v)._vec;
       return *this;
     }
 
     /// Multiply all components (time and space) by -1.
     FourMomentum operator-() const {
       FourMomentum result;
       result._vec = -_vec;
       return result;
     }
 
     /// Multiply space components only by -1.
     FourMomentum reverse() const {
       FourMomentum result = -*this;
       result.setE(-result.E());
       return result;
     }
 
     //@}
 
 
     ////////////////////////////////////////
 
 
     /// @name Factory functions
     //@{
 
     /// Make a vector from (px,py,pz,E) coordinates
     static FourMomentum mkXYZE(double px, double py, double pz, double E) {
       return FourMomentum().setPE(px, py, pz, E);
     }
 
     /// Make a vector from (px,py,pz) coordinates and the mass
     static FourMomentum mkXYZM(double px, double py, double pz, double mass) {
       return FourMomentum().setPM(px, py, pz, mass);
     }
 
     /// Make a vector from (eta,phi,energy) coordinates and the mass
     static FourMomentum mkEtaPhiME(double eta, double phi, double mass, double E) {
       return FourMomentum().setEtaPhiME(eta, phi, mass, E);
     }
 
     /// Make a vector from (eta,phi,pT) coordinates and the mass
     static FourMomentum mkEtaPhiMPt(double eta, double phi, double mass, double pt) {
       return FourMomentum().setEtaPhiMPt(eta, phi, mass, pt);
     }
 
     /// Make a vector from (y,phi,energy) coordinates and the mass
     static FourMomentum mkRapPhiME(double y, double phi, double mass, double E) {
       return FourMomentum().setRapPhiME(y, phi, mass, E);
     }
 
     /// Make a vector from (y,phi,pT) coordinates and the mass
     static FourMomentum mkRapPhiMPt(double y, double phi, double mass, double pt) {
       return FourMomentum().setRapPhiMPt(y, phi, mass, pt);
     }
 
     /// Make a vector from (theta,phi,energy) coordinates and the mass
     static FourMomentum mkThetaPhiME(double theta, double phi, double mass, double E) {
       return FourMomentum().setThetaPhiME(theta, phi, mass, E);
     }
 
     /// Make a vector from (theta,phi,pT) coordinates and the mass
     static FourMomentum mkThetaPhiMPt(double theta, double phi, double mass, double pt) {
       return FourMomentum().setThetaPhiMPt(theta, phi, mass, pt);
     }
 
     /// Make a vector from (pT,phi,energy) coordinates and the mass
     static FourMomentum mkPtPhiME(double pt, double phi, double mass, double E) {
       return FourMomentum().setPtPhiME(pt, phi, mass, E);
     }
 
     //@}
 
 
   };
 
 
 
   inline FourMomentum multiply(const double a, const FourMomentum& v) {
     FourMomentum result;
     result._vec = a * v._vec;
     return result;
   }
 
   inline FourMomentum multiply(const FourMomentum& v, const double a) {
     return multiply(a, v);
   }
 
   inline FourMomentum operator*(const double a, const FourMomentum& v) {
     return multiply(a, v);
   }
 
   inline FourMomentum operator*(const FourMomentum& v, const double a) {
     return multiply(a, v);
   }
 
   inline FourMomentum operator/(const FourMomentum& v, const double a) {
     return multiply(1.0/a, v);
   }
 
   inline FourMomentum add(const FourMomentum& a, const FourMomentum& b) {
     FourMomentum result;
     result._vec = a._vec + b._vec;
     return result;
   }
 
   inline FourMomentum operator+(const FourMomentum& a, const FourMomentum& b) {
     return add(a, b);
   }
 
   inline FourMomentum operator-(const FourMomentum& a, const FourMomentum& b) {
     return add(a, -b);
   }
 
 
   //////////////////////////////////////////////////////
 
 
   /// @name \f$ \Delta R \f$ calculations from 4-vectors
   //@{
 
   /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two four-vectors.
   /// There is a scheme ambiguity for momentum-type four vectors as to whether
   /// the pseudorapidity (a purely geometric concept) or the rapidity (a
   /// relativistic energy-momentum quantity) is to be used: this can be chosen
   /// via the optional scheme parameter. Use of this scheme option is
   /// discouraged in this case since @c RAPIDITY is only a valid option for
   /// vectors whose type is really the FourMomentum derived class.
   inline double deltaR(const FourVector& a, const FourVector& b,
                        RapScheme scheme = PSEUDORAPIDITY) {
     switch (scheme) {
     case PSEUDORAPIDITY :
       return deltaR(a.vector3(), b.vector3());
     case RAPIDITY:
       {
         const FourMomentum* ma = dynamic_cast<const FourMomentum*>(&a);
         const FourMomentum* mb = dynamic_cast<const FourMomentum*>(&b);
         if (!ma || !mb) {
           string err = "deltaR with scheme RAPIDITY can only be called with FourMomentum objects, not FourVectors";
           throw std::runtime_error(err);
         }
         return deltaR(*ma, *mb, scheme);
       }
     default:
       throw std::runtime_error("The specified deltaR scheme is not yet implemented");
     }
   }
 
 
   /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two four-vectors.
   /// There is a scheme ambiguity for momentum-type four vectors
   /// as to whether the pseudorapidity (a purely geometric concept) or the
   /// rapidity (a relativistic energy-momentum quantity) is to be used: this can
   /// be chosen via the optional scheme parameter.
   inline double deltaR(const FourVector& v,
                        double eta2, double phi2,
                        RapScheme scheme = PSEUDORAPIDITY) {
     switch (scheme) {
     case PSEUDORAPIDITY :
       return deltaR(v.vector3(), eta2, phi2);
     case RAPIDITY:
       {
         const FourMomentum* mv = dynamic_cast<const FourMomentum*>(&v);
         if (!mv) {
           string err = "deltaR with scheme RAPIDITY can only be called with FourMomentum objects, not FourVectors";
           throw std::runtime_error(err);
         }
         return deltaR(*mv, eta2, phi2, scheme);
       }
     default:
       throw std::runtime_error("The specified deltaR scheme is not yet implemented");
     }
   }
 
 
   /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two four-vectors.
   /// There is a scheme ambiguity for momentum-type four vectors
   /// as to whether the pseudorapidity (a purely geometric concept) or the
   /// rapidity (a relativistic energy-momentum quantity) is to be used: this can
   /// be chosen via the optional scheme parameter.
   inline double deltaR(double eta1, double phi1,
                        const FourVector& v,
                        RapScheme scheme = PSEUDORAPIDITY) {
     switch (scheme) {
     case PSEUDORAPIDITY :
       return deltaR(eta1, phi1, v.vector3());
     case RAPIDITY:
       {
         const FourMomentum* mv = dynamic_cast<const FourMomentum*>(&v);
         if (!mv) {
           string err = "deltaR with scheme RAPIDITY can only be called with FourMomentum objects, not FourVectors";
           throw std::runtime_error(err);
         }
         return deltaR(eta1, phi1, *mv, scheme);
       }
     default:
       throw std::runtime_error("The specified deltaR scheme is not yet implemented");
     }
   }
 
 
   /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two four-vectors.
   /// There is a scheme ambiguity for momentum-type four vectors
   /// as to whether the pseudorapidity (a purely geometric concept) or the
   /// rapidity (a relativistic energy-momentum quantity) is to be used: this can
   /// be chosen via the optional scheme parameter.
   inline double deltaR(const FourMomentum& a, const FourMomentum& b,
                        RapScheme scheme = PSEUDORAPIDITY) {
     switch (scheme) {
     case PSEUDORAPIDITY:
       return deltaR(a.vector3(), b.vector3());
     case RAPIDITY:
       return deltaR(a.rapidity(), a.azimuthalAngle(), b.rapidity(), b.azimuthalAngle());
     default:
       throw std::runtime_error("The specified deltaR scheme is not yet implemented");
     }
   }
 
   /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two four-vectors.
   /// There is a scheme ambiguity for momentum-type four vectors
   /// as to whether the pseudorapidity (a purely geometric concept) or the
   /// rapidity (a relativistic energy-momentum quantity) is to be used: this can
   /// be chosen via the optional scheme parameter.
   inline double deltaR(const FourMomentum& v,
                        double eta2, double phi2,
                        RapScheme scheme = PSEUDORAPIDITY) {
     switch (scheme) {
     case PSEUDORAPIDITY:
       return deltaR(v.vector3(), eta2, phi2);
     case RAPIDITY:
       return deltaR(v.rapidity(), v.azimuthalAngle(), eta2, phi2);
     default:
       throw std::runtime_error("The specified deltaR scheme is not yet implemented");
     }
   }
 
 
   /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two four-vectors.
   /// There is a scheme ambiguity for momentum-type four vectors
   /// as to whether the pseudorapidity (a purely geometric concept) or the
   /// rapidity (a relativistic energy-momentum quantity) is to be used: this can
   /// be chosen via the optional scheme parameter.
   inline double deltaR(double eta1, double phi1,
                        const FourMomentum& v,
                        RapScheme scheme = PSEUDORAPIDITY) {
     switch (scheme) {
     case PSEUDORAPIDITY:
       return deltaR(eta1, phi1, v.vector3());
     case RAPIDITY:
       return deltaR(eta1, phi1, v.rapidity(), v.azimuthalAngle());
     default:
       throw std::runtime_error("The specified deltaR scheme is not yet implemented");
     }
   }
 
   /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two four-vectors.
   /// There is a scheme ambiguity for momentum-type four vectors
   /// as to whether the pseudorapidity (a purely geometric concept) or the
   /// rapidity (a relativistic energy-momentum quantity) is to be used: this can
   /// be chosen via the optional scheme parameter.
   inline double deltaR(const FourMomentum& a, const FourVector& b,
                        RapScheme scheme = PSEUDORAPIDITY) {
     switch (scheme) {
     case PSEUDORAPIDITY:
       return deltaR(a.vector3(), b.vector3());
     case RAPIDITY:
       return deltaR(a.rapidity(), a.azimuthalAngle(), FourMomentum(b).rapidity(), b.azimuthalAngle());
     default:
       throw std::runtime_error("The specified deltaR scheme is not yet implemented");
     }
   }
 
   /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two four-vectors.
   /// There is a scheme ambiguity for momentum-type four vectors
   /// as to whether the pseudorapidity (a purely geometric concept) or the
   /// rapidity (a relativistic energy-momentum quantity) is to be used: this can
   /// be chosen via the optional scheme parameter.
   inline double deltaR(const FourVector& a, const FourMomentum& b,
                        RapScheme scheme = PSEUDORAPIDITY) {
     return deltaR(b, a, scheme);
   }
 
   /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between a
   /// three-vector and a four-vector.
   inline double deltaR(const FourMomentum& a, const Vector3& b) {
     return deltaR(a.vector3(), b);
   }
 
   /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between a
   /// three-vector and a four-vector.
   inline double deltaR(const Vector3& a, const FourMomentum& b) {
     return deltaR(a, b.vector3());
   }
 
   /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between a
   /// three-vector and a four-vector.
   inline double deltaR(const FourVector& a, const Vector3& b) {
     return deltaR(a.vector3(), b);
   }
 
   /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between a
   /// three-vector and a four-vector.
   inline double deltaR(const Vector3& a, const FourVector& b) {
     return deltaR(a, b.vector3());
   }
 
   //@}
 
 
   //////////////////////////////////////////////////////
 
 
   /// @name \f$ \Delta phi \f$ calculations from 4-vectors
   //@{
 
   /// Calculate the difference in azimuthal angle between two vectors.
   inline double deltaPhi(const FourMomentum& a, const FourMomentum& b) {
     return deltaPhi(a.vector3(), b.vector3());
   }
 
   /// Calculate the difference in azimuthal angle between two vectors.
   inline double deltaPhi(const FourMomentum& v, double phi2) {
     return deltaPhi(v.vector3(), phi2);
   }
 
   /// Calculate the difference in azimuthal angle between two vectors.
   inline double deltaPhi(double phi1, const FourMomentum& v) {
     return deltaPhi(phi1, v.vector3());
   }
 
   /// Calculate the difference in azimuthal angle between two vectors.
   inline double deltaPhi(const FourVector& a, const FourVector& b) {
     return deltaPhi(a.vector3(), b.vector3());
   }
 
   /// Calculate the difference in azimuthal angle between two vectors.
   inline double deltaPhi(const FourVector& v, double phi2) {
     return deltaPhi(v.vector3(), phi2);
   }
 
   /// Calculate the difference in azimuthal angle between two vectors.
   inline double deltaPhi(double phi1, const FourVector& v) {
     return deltaPhi(phi1, v.vector3());
   }
 
   /// Calculate the difference in azimuthal angle between two vectors.
   inline double deltaPhi(const FourVector& a, const FourMomentum& b) {
     return deltaPhi(a.vector3(), b.vector3());
   }
 
   /// Calculate the difference in azimuthal angle between two vectors.
   inline double deltaPhi(const FourMomentum& a, const FourVector& b) {
     return deltaPhi(a.vector3(), b.vector3());
   }
 
   /// Calculate the difference in azimuthal angle between two vectors.
   inline double deltaPhi(const FourVector& a, const Vector3& b) {
     return deltaPhi(a.vector3(), b);
   }
 
   /// Calculate the difference in azimuthal angle between two vectors.
   inline double deltaPhi(const Vector3& a, const FourVector& b) {
     return deltaPhi(a, b.vector3());
   }
 
   /// Calculate the difference in azimuthal angle between two vectors.
   inline double deltaPhi(const FourMomentum& a, const Vector3& b) {
     return deltaPhi(a.vector3(), b);
   }
 
   /// Calculate the difference in azimuthal angle between two vectors.
   inline double deltaPhi(const Vector3& a, const FourMomentum& b) {
     return deltaPhi(a, b.vector3());
   }
 
   //@}
 
 
   //////////////////////////////////////////////////////
 
 
   /// @name \f$ |\Delta eta| \f$ calculations from 4-vectors
   //@{
 
   /// Calculate the difference in pseudorapidity between two vectors.
   inline double deltaEta(const FourMomentum& a, const FourMomentum& b) {
     return deltaEta(a.vector3(), b.vector3());
   }
 
   /// Calculate the difference in pseudorapidity between two vectors.
   inline double deltaEta(const FourMomentum& v, double eta2) {
     return deltaEta(v.vector3(), eta2);
   }
 
   /// Calculate the difference in pseudorapidity between two vectors.
   inline double deltaEta(double eta1, const FourMomentum& v) {
     return deltaEta(eta1, v.vector3());
   }
 
   /// Calculate the difference in pseudorapidity between two vectors.
   inline double deltaEta(const FourVector& a, const FourVector& b) {
     return deltaEta(a.vector3(), b.vector3());
   }
 
   /// Calculate the difference in pseudorapidity between two vectors.
   inline double deltaEta(const FourVector& v, double eta2) {
     return deltaEta(v.vector3(), eta2);
   }
 
   /// Calculate the difference in pseudorapidity between two vectors.
   inline double deltaEta(double eta1, const FourVector& v) {
     return deltaEta(eta1, v.vector3());
   }
 
   /// Calculate the difference in pseudorapidity between two vectors.
   inline double deltaEta(const FourVector& a, const FourMomentum& b) {
     return deltaEta(a.vector3(), b.vector3());
   }
 
   /// Calculate the difference in pseudorapidity between two vectors.
   inline double deltaEta(const FourMomentum& a, const FourVector& b) {
     return deltaEta(a.vector3(), b.vector3());
   }
 
   /// Calculate the difference in pseudorapidity between two vectors.
   inline double deltaEta(const FourVector& a, const Vector3& b) {
     return deltaEta(a.vector3(), b);
   }
 
   /// Calculate the difference in pseudorapidity between two vectors.
   inline double deltaEta(const Vector3& a, const FourVector& b) {
     return deltaEta(a, b.vector3());
   }
 
   /// Calculate the difference in pseudorapidity between two vectors.
   inline double deltaEta(const FourMomentum& a, const Vector3& b) {
     return deltaEta(a.vector3(), b);
   }
 
   /// Calculate the difference in pseudorapidity between two vectors.
   inline double deltaEta(const Vector3& a, const FourMomentum& b) {
     return deltaEta(a, b.vector3());
   }
 
   //@}
 
 
   /// @name \f$ |\Delta y| \f$ calculations from 4-momentum vectors
   //@{
 
   /// Calculate the difference in rapidity between two 4-momentum vectors.
   inline double deltaRap(const FourMomentum& a, const FourMomentum& b) {
     return deltaRap(a.rapidity(), b.rapidity());
   }
 
   /// Calculate the difference in rapidity between two 4-momentum vectors.
   inline double deltaRap(const FourMomentum& v, double y2) {
     return deltaRap(v.rapidity(), y2);
   }
 
   /// Calculate the difference in rapidity between two 4-momentum vectors.
   inline double deltaRap(double y1, const FourMomentum& v) {
     return deltaRap(y1, v.rapidity());
   }
 
   //@}
 
 
   //////////////////////////////////////////////////////
 
 
   /// @name 4-vector comparison functions (for sorting)
   //@{
 
   /// Comparison to give a sorting by decreasing pT
   inline bool cmpMomByPt(const FourMomentum& a, const FourMomentum& b) {
     return a.pt() > b.pt();
   }
   /// Comparison to give a sorting by increasing pT
   inline bool cmpMomByAscPt(const FourMomentum& a, const FourMomentum& b) {
     return a.pt() < b.pt();
   }
 
   /// Comparison to give a sorting by decreasing 3-momentum magnitude |p|
   inline bool cmpMomByP(const FourMomentum& a, const FourMomentum& b) {
     return a.vector3().mod() > b.vector3().mod();
   }
   /// Comparison to give a sorting by increasing 3-momentum magnitude |p|
   inline bool cmpMomByAscP(const FourMomentum& a, const FourMomentum& b) {
     return a.vector3().mod() < b.vector3().mod();
   }
 
   /// Comparison to give a sorting by decreasing transverse energy
   inline bool cmpMomByEt(const FourMomentum& a, const FourMomentum& b) {
     return a.Et() > b.Et();
   }
   /// Comparison to give a sorting by increasing transverse energy
   inline bool cmpMomByAscEt(const FourMomentum& a, const FourMomentum& b) {
     return a.Et() < b.Et();
   }
 
   /// Comparison to give a sorting by decreasing energy
   inline bool cmpMomByE(const FourMomentum& a, const FourMomentum& b) {
     return a.E() > b.E();
   }
   /// Comparison to give a sorting by increasing energy
   inline bool cmpMomByAscE(const FourMomentum& a, const FourMomentum& b) {
     return a.E() < b.E();
   }
 
   /// Comparison to give a sorting by decreasing mass
   inline bool cmpMomByMass(const FourMomentum& a, const FourMomentum& b) {
     return a.mass() > b.mass();
   }
   /// Comparison to give a sorting by increasing mass
   inline bool cmpMomByAscMass(const FourMomentum& a, const FourMomentum& b) {
     return a.mass() < b.mass();
   }
 
   /// Comparison to give a sorting by increasing eta (pseudorapidity)
   inline bool cmpMomByEta(const FourMomentum& a, const FourMomentum& b) {
     return a.eta() < b.eta();
   }
 
   /// Comparison to give a sorting by decreasing eta (pseudorapidity)
   inline bool cmpMomByDescEta(const FourMomentum& a, const FourMomentum& b) {
     return a.pseudorapidity() > b.pseudorapidity();
   }
 
   /// Comparison to give a sorting by increasing absolute eta (pseudorapidity)
   inline bool cmpMomByAbsEta(const FourMomentum& a, const FourMomentum& b) {
     return fabs(a.eta()) < fabs(b.eta());
   }
 
   /// Comparison to give a sorting by increasing absolute eta (pseudorapidity)
   inline bool cmpMomByDescAbsEta(const FourMomentum& a, const FourMomentum& b) {
     return fabs(a.eta()) > fabs(b.eta());
   }
 
   /// Comparison to give a sorting by increasing rapidity
   inline bool cmpMomByRap(const FourMomentum& a, const FourMomentum& b) {
     return a.rapidity() < b.rapidity();
   }
 
   /// Comparison to give a sorting by decreasing rapidity
   inline bool cmpMomByDescRap(const FourMomentum& a, const FourMomentum& b) {
     return a.rapidity() > b.rapidity();
   }
 
   /// Comparison to give a sorting by increasing absolute rapidity
   inline bool cmpMomByAbsRap(const FourMomentum& a, const FourMomentum& b) {
     return fabs(a.rapidity()) < fabs(b.rapidity());
   }
 
   /// Comparison to give a sorting by decreasing absolute rapidity
   inline bool cmpMomByDescAbsRap(const FourMomentum& a, const FourMomentum& b) {
     return fabs(a.rapidity()) > fabs(b.rapidity());
   }
 
   /// @todo Add sorting by phi [0..2PI]
 
 
   /// Sort a container of momenta by cmp and return by reference for non-const inputs
   template<typename MOMS, typename CMP>
   inline MOMS& sortBy(MOMS& pbs, const CMP& cmp) {
     std::sort(pbs.begin(), pbs.end(), cmp);
     return pbs;
   }
   /// Sort a container of momenta by cmp and return by value for const inputs
   template<typename MOMS, typename CMP>
   inline MOMS sortBy(const MOMS& pbs, const CMP& cmp) {
     MOMS rtn = pbs;
     std::sort(rtn.begin(), rtn.end(), cmp);
     return rtn;
   }
 
   /// Sort a container of momenta by pT (decreasing) and return by reference for non-const inputs
   template<typename MOMS>
   inline MOMS& sortByPt(MOMS& pbs) {
     return sortBy(pbs, cmpMomByPt);
   }
   /// Sort a container of momenta by pT (decreasing) and return by value for const inputs
   template<typename MOMS>
   inline MOMS sortByPt(const MOMS& pbs) {
     return sortBy(pbs, cmpMomByPt);
   }
 
   /// Sort a container of momenta by E (decreasing) and return by reference for non-const inputs
   template<typename MOMS>
   inline MOMS& sortByE(MOMS& pbs) {
     return sortBy(pbs, cmpMomByE);
   }
   /// Sort a container of momenta by E (decreasing) and return by value for const inputs
   template<typename MOMS>
   inline MOMS sortByE(const MOMS& pbs) {
     return sortBy(pbs, cmpMomByE);
   }
 
   /// Sort a container of momenta by Et (decreasing) and return by reference for non-const inputs
   template<typename MOMS>
   inline MOMS& sortByEt(MOMS& pbs) {
     return sortBy(pbs, cmpMomByEt);
   }
   /// Sort a container of momenta by Et (decreasing) and return by value for const inputs
   template<typename MOMS>
   inline MOMS sortByEt(const MOMS& pbs) {
     return sortBy(pbs, cmpMomByEt);
   }
 
   //@}
 
 
+  /// @name MT calculation
+  //@{
+
+  /// Calculate transverse mass of a visible and an invisible 3-vector
+  inline double mT(const Vector3& vis, const Vector3& invis) {
+    return sqrt(2*vis.perp()*invis.perp() * (1 - cos(deltaPhi(vis, invis))) );
+  }
+
+  /// Calculate transverse mass of a visible and an invisible 4-vector
+  inline double mT(const FourMomentum& vis, const FourMomentum& invis) {
+    return mT(vis.p3(), invis.p3());
+  }
+
+  /// Calculate transverse mass of a visible 4-vector and an invisible 3-vector
+  inline double mT(const FourMomentum& vis, const Vector3& invis) {
+    return mT(vis.p3(), invis);
+  }
+
+  //@}
+
+
   //////////////////////////////////////////////////////
 
 
   /// @name 4-vector string representations
   //@{
 
   /// Render a 4-vector as a string.
   inline std::string toString(const FourVector& lv) {
     ostringstream out;
     out << "("  << (fabs(lv.t()) < 1E-30 ? 0.0 : lv.t())
         << "; " << (fabs(lv.x()) < 1E-30 ? 0.0 : lv.x())
         << ", " << (fabs(lv.y()) < 1E-30 ? 0.0 : lv.y())
         << ", " << (fabs(lv.z()) < 1E-30 ? 0.0 : lv.z())
         << ")";
     return out.str();
   }
 
   /// Write a 4-vector to an ostream.
   inline std::ostream& operator<<(std::ostream& out, const FourVector& lv) {
     out << toString(lv);
     return out;
   }
 
   //@}
 
 
   /// @name Typedefs of vector types to short names
   /// @todo Switch canonical and alias names
   //@{
   //typedef FourVector V4; //< generic
   typedef FourVector X4; //< spatial
   typedef FourMomentum P4; //< momentum
   //@}
 
 
 }
 
 #endif
diff --git a/include/Rivet/Particle.fhh b/include/Rivet/Particle.fhh
--- a/include/Rivet/Particle.fhh
+++ b/include/Rivet/Particle.fhh
@@ -1,42 +1,54 @@
 // -*- C++ -*-
 #ifndef RIVET_Particle_FHH
 #define RIVET_Particle_FHH
 
 #include "Rivet/Tools/RivetSTL.hh"
 
 namespace Rivet {
 
 
   /// @name Particle declarations
   //@{
 
   // Forward declaration
   class Particle;
 
   /// Typedefs for a vector of Particle objects.
   typedef std::vector<Particle> Particles; //< New form, cf. Jets
   /// @deprecated Use Particles instead. Will be removed
   typedef std::vector<Particle> ParticleVector; //< Old form
 
   /// Typedef for a pair of Particle objects.
   typedef std::pair<Particle, Particle> ParticlePair;
 
   //@}
 
 
+  /// @name Particle function/functor declarations
+  //@{
+
+  /// std::function instantiation for functors taking a Particle and returning a bool
+  using ParticleSelector = function<bool(const Particle&)>;
+
+  /// std::function instantiation for functors taking two Particles and returning a bool
+  using ParticleSorter = function<bool(const Particle&, const Particle&)>;
+
+  //@}
+
+
   /// @name PdgId declarations
   //@{
 
   /// Typedefs for a PDG ID code.
   typedef int PdgId;
   //typedef PdgId PID; //< can't do this, because it's also a (sub)namespace
 
   /// Typedef for a pair of particle names.
   typedef std::pair<PdgId, PdgId> PdgIdPair;
 
   //@}
 
 
 }
 
 #endif
diff --git a/include/Rivet/Particle.hh b/include/Rivet/Particle.hh
--- a/include/Rivet/Particle.hh
+++ b/include/Rivet/Particle.hh
@@ -1,423 +1,616 @@
 // -*- C++ -*-
 #ifndef RIVET_Particle_HH
 #define RIVET_Particle_HH
 
 #include "Rivet/Particle.fhh"
 #include "Rivet/ParticleBase.hh"
 #include "Rivet/Config/RivetCommon.hh"
 #include "Rivet/Tools/Cuts.hh"
 #include "Rivet/Tools/Utils.hh"
 #include "Rivet/Math/LorentzTrans.hh"
 // NOTE: Rivet/Tools/ParticleUtils.hh included at the end
 #include "fastjet/PseudoJet.hh"
 
 namespace Rivet {
 
 
   /// Particle representation, either from a HepMC::GenEvent or reconstructed.
   class Particle : public ParticleBase {
   public:
 
     /// @name Constructors
     //@{
 
     /// Default constructor.
     /// @note A particle without info is useless. This only exists to keep STL containers happy.
     Particle()
       : ParticleBase(),
-        _original(0), _id(0)
+        _original(nullptr), _id(PID::ANY)
     { }
 
     /// Constructor without GenParticle.
     Particle(PdgId pid, const FourMomentum& mom, const FourVector& pos=FourVector())
       : ParticleBase(),
-        _original(0), _id(pid), _momentum(mom), _origin(pos)
+        _original(nullptr), _id(pid), _momentum(mom), _origin(pos)
     { }
 
     /// Constructor from a HepMC GenParticle pointer.
     Particle(const GenParticle* gp)
       : ParticleBase(),
         _original(gp), _id(gp->pdg_id()),
         _momentum(gp->momentum())
     {
       const GenVertex* vprod = gp->production_vertex();
-      if (vprod != NULL)
+      if (vprod != nullptr) {
         setOrigin(vprod->position().t(), vprod->position().x(), vprod->position().y(), vprod->position().z());
+      }
     }
 
     /// Constructor from a HepMC GenParticle.
     Particle(const GenParticle& gp)
       : ParticleBase(),
         _original(&gp), _id(gp.pdg_id()),
         _momentum(gp.momentum())
     {
       const GenVertex* vprod = gp.production_vertex();
-      if (vprod != NULL)
+      if (vprod != nullptr) {
         setOrigin(vprod->position().t(), vprod->position().x(), vprod->position().y(), vprod->position().z());
+      }
     }
 
     //@}
 
 
     /// @name Other representations and implicit casts
     //@{
 
     /// Converter to FastJet3 PseudoJet
     virtual fastjet::PseudoJet pseudojet() const {
       return fastjet::PseudoJet(mom().px(), mom().py(), mom().pz(), mom().E());
     }
 
     /// Cast operator to FastJet3 PseudoJet
     operator PseudoJet () const { return pseudojet(); }
 
 
     /// Get a const pointer to the original GenParticle.
     const GenParticle* genParticle() const {
       return _original;
     }
 
     /// Cast operator for conversion to GenParticle*
     operator const GenParticle* () const { return genParticle(); }
 
     //@}
 
 
     /// @name Kinematic properties
     //@{
 
     /// The momentum.
     const FourMomentum& momentum() const {
       return _momentum;
     }
 
     /// Set the momentum.
     Particle& setMomentum(const FourMomentum& momentum) {
       _momentum = momentum;
       return *this;
     }
 
     /// Set the momentum via components.
     Particle& setMomentum(double E, double px, double py, double pz) {
       _momentum = FourMomentum(E, px, py, pz);
       return *this;
     }
 
     /// Apply an active Lorentz transform to this particle
     Particle& transformBy(const LorentzTransform& lt);
 
     //@
 
 
     /// @name Positional properties
     //@{
 
     /// The origin position.
     const FourVector& origin() const {
       return _origin;
     }
     /// Set the origin position.
     Particle& setOrigin(const FourVector& position) {
       _origin = position;
       return *this;
     }
     /// Set the origin position via components.
     Particle& setOrigin(double t, double x, double y, double z) {
       _origin = FourMomentum(t, x, y, z);
       return *this;
     }
 
     //@}
 
 
     /// @name Particle ID code accessors
     //@{
 
     /// This Particle's PDG ID code.
     PdgId pid() const { return _id; }
     /// Absolute value of the PDG ID code.
     PdgId abspid() const { return std::abs(_id); }
     /// This Particle's PDG ID code (alias).
     /// @deprecated Prefer the pid/abspid form
     PdgId pdgId() const { return _id; }
 
     //@}
 
 
     /// @name Particle species properties
     //@{
 
     /// The charge of this Particle.
     double charge() const { return PID::charge(pid()); }
 
     /// The absolute charge of this Particle.
     double abscharge() const { return PID::abscharge(pid()); }
 
     /// Three times the charge of this Particle (i.e. integer multiple of smallest quark charge).
     int charge3() const { return PID::charge3(pid()); }
 
     /// Alias for charge3
     /// @deprecated Use charge3
     int threeCharge() const { return PID::threeCharge(pid()); }
 
     /// Three times the absolute charge of this Particle (i.e. integer multiple of smallest quark charge).
     int abscharge3() const { return PID::abscharge3(pid()); }
 
     /// Is this a hadron?
     bool isHadron() const { return PID::isHadron(pid()); }
 
     /// Is this a meson?
     bool isMeson() const { return PID::isMeson(pid()); }
 
     /// Is this a baryon?
     bool isBaryon() const { return PID::isBaryon(pid()); }
 
     /// Is this a lepton?
     bool isLepton() const { return PID::isLepton(pid()); }
 
     /// Is this a neutrino?
     bool isNeutrino() const { return PID::isNeutrino(pid()); }
 
     /// Does this (hadron) contain a b quark?
     bool hasBottom() const { return PID::hasBottom(pid()); }
 
     /// Does this (hadron) contain a c quark?
     bool hasCharm() const { return PID::hasCharm(pid()); }
 
     // /// Does this (hadron) contain an s quark?
     // bool hasStrange() const { return PID::hasStrange(pid()); }
 
     /// Is this particle potentially visible in a detector?
     bool isVisible() const;
 
     //@}
 
 
     /// @name Ancestry properties
     //@{
 
-    /// @todo Add physicalAncestors, allAncestors?
-
     /// Get a list of the direct parents of the current particle (with optional selection Cut)
     ///
     /// @note This is valid in MC, but may not be answerable
     /// experimentally -- use this function with care when replicating
     /// experimental analyses!
     Particles parents(const Cut& c=Cuts::OPEN) const;
 
     /// Get a list of the direct parents of the current particle (with selector function)
     ///
     /// @note This is valid in MC, but may not be answerable
     /// experimentally -- use this function with care when replicating
     /// experimental analyses!
-    template <typename FN>
-    Particles parents(const FN& f) const {
+    Particles parents(const ParticleSelector& f) const {
       return filter_select(parents(), f);
     }
 
+    /// Check whether any particle in the particle's parent list has the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasParentWith(const ParticleSelector& f) const {
+      return !parents(f).empty();
+    }
+    /// Check whether any particle in the particle's parent list has the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasParentWith(const Cut& c) const;
+
+    /// Check whether any particle in the particle's parent list does not have the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasParentWithout(const ParticleSelector& f) const {
+      return hasParentWith([&](const Particle& p){ return !f(p); });
+    }
+    /// Check whether any particle in the particle's parent list does not have the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasParentWithout(const Cut& c) const;
+
     /// Check whether a given PID is found in the particle's parent list
     ///
     /// @note This question is valid in MC, but may not be answerable
     /// experimentally -- use this function with care when replicating
     /// experimental analyses!
     ///
-    /// @deprecated Prefer e.g. parents(Cut::pid == 123).size()
+    /// @deprecated Prefer e.g. hasParentWith(Cut::pid == 123)
+    //DEPRECATED("Prefer e.g. hasParentWith(Cut::pid == 123)");
     bool hasParent(PdgId pid) const;
 
-    /// Check whether a particle in the particle's parent list has the requested property
+
+
+    /// Get a list of the ancestors of the current particle (with optional selection Cut)
+    ///
+    /// @note By default only physical ancestors, with status=2, are returned.
+    ///
+    /// @note This is valid in MC, but may not be answerable experimentally --
+    /// use this function with care when replicating experimental analyses!
+    Particles ancestors(const Cut& c=Cuts::OPEN, bool only_physical=true) const;
+
+    /// Get a list of the direct parents of the current particle (with selector function)
+    ///
+    /// @note By default only physical ancestors, with status=2, are returned.
+    ///
+    /// @note This is valid in MC, but may not be answerable experimentally --
+    /// use this function with care when replicating experimental analyses!
+    Particles ancestors(const ParticleSelector& f, bool only_physical=true) const {
+      return filter_select(ancestors(Cuts::OPEN, only_physical), f);
+    }
+
+    /// Check whether any particle in the particle's ancestor list has the requested property
     ///
     /// @note This question is valid in MC, but may not be answerable
     /// experimentally -- use this function with care when replicating
     /// experimental analyses!
+    bool hasAncestorWith(const ParticleSelector& f, bool only_physical=true) const {
+      return !ancestors(f, only_physical).empty();
+    }
+    /// Check whether any particle in the particle's ancestor list has the requested property
     ///
-    /// @deprecated Prefer parents(Cut) or parents(FN) methods and .empty()
-    template <typename FN>
-    bool hasParentWith(const FN& f) const {
-      return _hasRelativeWith(HepMC::parents, f);
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasAncestorWith(const Cut& c, bool only_physical=true) const;
+
+    /// Check whether any particle in the particle's ancestor list does not have the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasAncestorWithout(const ParticleSelector& f, bool only_physical=true) const {
+      return hasAncestorWith([&](const Particle& p){ return !f(p); }, only_physical);
     }
-    bool hasParentWith(const Cut& c) const;
+    /// Check whether any particle in the particle's ancestor list does not have the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasAncestorWithout(const Cut& c, bool only_physical=true) const;
 
     /// Check whether a given PID is found in the particle's ancestor list
     ///
     /// @note This question is valid in MC, but may not be answerable
     /// experimentally -- use this function with care when replicating
     /// experimental analyses!
-    bool hasAncestor(PdgId pid) const;
+    ///
+    /// @deprecated Prefer hasAncestorWith(Cuts::pid == pid) etc.
+    //DEPRECATED("Prefer e.g. hasAncestorWith(Cut::pid == 123)");
+    bool hasAncestor(PdgId pid, bool only_physical=true) const;
 
-    /// Check whether a particle in the particle's ancestor list has the requested property
-    ///
-    /// @note This question is valid in MC, but may not be answerable
-    /// experimentally -- use this function with care when replicating
-    /// experimental analyses!
-    template <typename FN>
-    bool hasAncestorWith(const FN& f) const {
-      return _hasRelativeWith(HepMC::ancestors, f);
-    }
-    bool hasAncestorWith(const Cut& c) const;
 
     /// @brief Determine whether the particle is from a b-hadron decay
     ///
     /// @note This question is valid in MC, but may not be perfectly answerable
     /// experimentally -- use this function with care when replicating
     /// experimental analyses!
     bool fromBottom() const;
 
     /// @brief Determine whether the particle is from a c-hadron decay
     ///
     /// @note If a hadron contains b and c quarks it is considered a bottom
     /// hadron and NOT a charm hadron.
     ///
     /// @note This question is valid in MC, but may not be perfectly answerable
     /// experimentally -- use this function with care when replicating
     /// experimental analyses!
     bool fromCharm() const;
 
     // /// @brief Determine whether the particle is from a s-hadron decay
     // ///
     // /// @note If a hadron contains b or c quarks as well as strange it is
     // /// considered a b or c hadron, but NOT a strange hadron.
     // ///
     // /// @note This question is valid in MC, but may not be perfectly answerable
     // /// experimentally -- use this function with care when replicating
     // /// experimental analyses!
     // bool fromStrange() const;
 
     /// @brief Determine whether the particle is from a hadron decay
     ///
     /// @note This question is valid in MC, but may not be perfectly answerable
     /// experimentally -- use this function with care when replicating
     /// experimental analyses!
     bool fromHadron() const;
 
     /// @brief Determine whether the particle is from a tau decay
     ///
     /// @note This question is valid in MC, but may not be perfectly answerable
     /// experimentally -- use this function with care when replicating
     /// experimental analyses!
     bool fromTau(bool prompt_taus_only=false) const;
 
     /// @brief Determine whether the particle is from a prompt tau decay
     ///
     /// @note This question is valid in MC, but may not be perfectly answerable
     /// experimentally -- use this function with care when replicating
     /// experimental analyses!
     bool fromPromptTau() const { return fromTau(true); }
 
+    /// @brief Determine whether the particle is from a tau which decayed hadronically
+    ///
+    /// @note This question is valid in MC, but may not be perfectly answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool fromHadronicTau(bool prompt_taus_only=false) const;
+
     /// @brief Determine whether the particle is from a hadron or tau decay
     ///
     /// Specifically, walk up the ancestor chain until a status 2 hadron or
     /// tau is found, if at all.
     ///
     /// @note This question is valid in MC, but may not be perfectly answerable
     /// experimentally -- use this function with care when replicating
     /// experimental analyses!
+    ///
+    /// @deprecated Too vague: use fromHadron or fromHadronicTau
     bool fromDecay() const { return fromHadron() || fromPromptTau(); }
 
     /// @brief Shorthand definition of 'promptness' based on set definition flags
     ///
-    /// The boolean arguments allow a decay lepton to be considered prompt if
-    /// its parent was a "real" prompt lepton.
+    /// A "direct" particle is one directly connected to the hard process. It is a
+    /// preferred alias for "prompt", since it has no confusing implications about
+    /// distinguishability by timing information.
+    ///
+    /// The boolean arguments allow a decay lepton to be considered direct if
+    /// its parent was a "real" direct lepton.
     ///
     /// @note This one doesn't make any judgements about final-stateness
-    bool isPrompt(bool allow_from_prompt_tau=false, bool allow_from_prompt_mu=false) const;
+    bool isDirect(bool allow_from_direct_tau=false, bool allow_from_direct_mu=false) const;
+
+    /// Alias for isDirect
+    bool isPrompt(bool allow_from_prompt_tau=false, bool allow_from_prompt_mu=false) const {
+      return isDirect(allow_from_prompt_tau, allow_from_prompt_mu);
+    }
 
     //@}
 
 
     /// @name Decay info
     //@{
 
     /// Whether this particle is stable according to the generator
     bool isStable() const;
 
+    /// @todo isDecayed? How to restrict to physical particles?
+
+
     /// Get a list of the direct descendants from the current particle (with optional selection Cut)
     Particles children(const Cut& c=Cuts::OPEN) const;
 
     /// Get a list of the direct descendants from the current particle (with selector function)
-    template <typename FN>
-    Particles children(const FN& f) const {
+    Particles children(const ParticleSelector& f) const {
       return filter_select(children(), f);
     }
 
+    /// Check whether any direct child of this particle has the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasChildWith(const ParticleSelector& f) const {
+      return !children(f).empty();
+    }
+    /// Check whether any direct child of this particle has the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasChildWith(const Cut& c) const;
+
+    /// Check whether any direct child of this particle does not have the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasChildWithout(const ParticleSelector& f) const {
+      return hasChildWith([&](const Particle& p){ return !f(p); });
+    }
+    /// Check whether any direct child of this particle does not have the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasChildWithout(const Cut& c) const;
+
+
     /// Get a list of all the descendants from the current particle (with optional selection Cut)
     Particles allDescendants(const Cut& c=Cuts::OPEN, bool remove_duplicates=true) const;
 
     /// Get a list of all the descendants from the current particle (with selector function)
-    template <typename FN>
-    Particles allDescendants(const FN& f, bool remove_duplicates=true) const {
+    Particles allDescendants(const ParticleSelector& f, bool remove_duplicates=true) const {
       return filter_select(allDescendants(Cuts::OPEN, remove_duplicates), f);
     }
 
+    /// Check whether any descendant of this particle has the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasDescendantWith(const ParticleSelector& f, bool remove_duplicates=true) const {
+      return !allDescendants(f, remove_duplicates).empty();
+    }
+    /// Check whether any descendant of this particle has the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasDescendantWith(const Cut& c, bool remove_duplicates=true) const;
+
+    /// Check whether any descendant of this particle does not have the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasDescendantWithout(const ParticleSelector& f, bool remove_duplicates=true) const {
+      return hasDescendantWith([&](const Particle& p){ return !f(p); }, remove_duplicates);
+    }
+    /// Check whether any descendant of this particle does not have the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasDescendantWithout(const Cut& c, bool remove_duplicates=true) const;
+
+
     /// Get a list of all the stable descendants from the current particle (with optional selection Cut)
     ///
     /// @todo Use recursion through replica-avoiding MCUtils functions to avoid bookkeeping duplicates
     /// @todo Insist that the current particle is post-hadronization, otherwise throw an exception?
     Particles stableDescendants(const Cut& c=Cuts::OPEN) const;
 
     /// Get a list of all the stable descendants from the current particle (with selector function)
-    template <typename FN>
-    Particles stableDescendants(const FN& f) const {
+    Particles stableDescendants(const ParticleSelector& f) const {
       return filter_select(stableDescendants(), f);
     }
 
+    /// Check whether any stable descendant of this particle has the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasStableDescendantWith(const ParticleSelector& f) const {
+      return !stableDescendants(f).empty();
+    }
+    /// Check whether any stable descendant of this particle has the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasStableDescendantWith(const Cut& c) const;
+
+    /// Check whether any stable descendant of this particle does not have the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasStableDescendantWithout(const ParticleSelector& f) const {
+      return hasStableDescendantWith([&](const Particle& p){ return !f(p); });
+    }
+    /// Check whether any stable descendant of this particle does not have the requested property
+    ///
+    /// @note This question is valid in MC, but may not be answerable
+    /// experimentally -- use this function with care when replicating
+    /// experimental analyses!
+    bool hasStableDescendantWithout(const Cut& c) const;
+
+
     /// Flight length (divide by mm or cm to get the appropriate units)
     double flightLength() const;
 
     //@}
 
 
+    /// @name Duplicate testing
+    //@{
+
+    /// @brief Determine whether a particle is the first in a decay chain to meet the function requirement
+    inline bool isFirstWith(const ParticleSelector& f) const {
+      if (!f(*this)) return false; //< This doesn't even meet f, let alone being the last to do so
+      if (any(parents(), f)) return false; //< If a direct parent has this property, this isn't the first
+      return true;
+    }
+
+    /// @brief Determine whether a particle is the first in a decay chain not to meet the function requirement
+    inline bool isFirstWithout(const ParticleSelector& f) const {
+      return isFirstWith([&](const Particle& p){ return !f(p); });
+    }
+
+    /// @brief Determine whether a particle is the last in a decay chain to meet the function requirement
+    inline bool isLastWith(const ParticleSelector& f) const {
+      if (!f(*this)) return false; //< This doesn't even meet f, let alone being the last to do so
+      if (any(children(), f)) return false; //< If a child has this property, this isn't the last
+      return true;
+    }
+
+    /// @brief Determine whether a particle is the last in a decay chain not to meet the function requirement
+    inline bool isLastWithout(const ParticleSelector& f) const {
+      return isLastWith([&](const Particle& p){ return !f(p); });
+    }
+
+    //@}
+
+
   protected:
 
-    template <typename FN>
-    bool _hasRelativeWith(HepMC::IteratorRange relation, const FN& f) const {
-      for (const GenParticle* ancestor : particles(genParticle(), relation)) {
-        if (f(Particle(ancestor))) return true;
-      }
-      return false;
-    }
-
     /// A pointer to the original GenParticle from which this Particle is projected.
     const GenParticle* _original;
 
     /// The PDG ID code for this Particle.
     PdgId _id;
 
     /// The momentum of this particle.
     FourMomentum _momentum;
 
     /// The creation position of this particle.
     FourVector _origin;
 
   };
 
 
   /// @name String representation and streaming support
   //@{
 
   /// Represent a Particle as a string.
   std::string to_str(const Particle& p);
 
   /// Allow a Particle to be passed to an ostream.
   inline std::ostream& operator<<(std::ostream& os, const Particle& p) {
     os << to_str(p);
     return os;
   }
 
 
   /// Represent a ParticlePair as a string.
   std::string to_str(const ParticlePair& pair);
 
   /// Allow ParticlePair to be passed to an ostream.
   inline std::ostream& operator<<(std::ostream& os, const ParticlePair& pp) {
     os << to_str(pp);
     return os;
   }
 
   //@}
 
 
 }
 
 
 #include "Rivet/Tools/ParticleUtils.hh"
 
 #endif
diff --git a/include/Rivet/Projections/Beam.hh b/include/Rivet/Projections/Beam.hh
--- a/include/Rivet/Projections/Beam.hh
+++ b/include/Rivet/Projections/Beam.hh
@@ -1,206 +1,206 @@
 // -*- C++ -*-
 #ifndef RIVET_Beam_HH
 #define RIVET_Beam_HH
 
 #include "Rivet/Projection.hh"
 #include "Rivet/Event.hh"
 #include "Rivet/Particle.hh"
 #include "Rivet/Math/LorentzTrans.hh"
 
 namespace Rivet {
 
 
   /// @name Standalone beam kinematics functions
   //@{
 
   /// Get beam particles from an event
   ParticlePair beams(const Event& e);
 
   /// Get beam particle IDs from a pair of Particles
   /// @deprecated Use pids(beams)
   inline PdgIdPair beamIds(const ParticlePair& beams) { return pids(beams); }
 
   /// Get beam particle IDs from an event
   /// @deprecated Use pids(e.beams())
   inline PdgIdPair beamIds(const Event& e) { return pids(beams(e)); }
 
 
   /// Get beam centre-of-mass energy from a pair of beam momenta
   double sqrtS(const FourMomentum& pa, const FourMomentum& pb);
 
   /// Get beam centre-of-mass energy from a pair of Particles
   inline double sqrtS(const ParticlePair& beams) {
     return sqrtS(beams.first.momentum(), beams.second.momentum());
   }
 
   /// Get beam centre-of-mass energy from an Event
   inline double sqrtS(const Event& e) { return sqrtS(beams(e)); }
 
 
   /// Get per-nucleon beam centre-of-mass energy from a pair of beam momenta
   /// @note Uses a nominal nucleon mass of 0.939 GeV to convert masses to A
   double asqrtS(const FourMomentum& pa, const FourMomentum& pb);
 
   /// Get per-nucleon beam centre-of-mass energy from a pair of Particles
   /// @note Uses the sum of nuclear mass numbers A for each beam
   double asqrtS(const ParticlePair& beams);
 
   /// Get per-nucleon beam centre-of-mass energy from an Event
   /// @note Uses the sum of nuclear mass numbers A for each beam
   inline double asqrtS(const Event& e) { return asqrtS(beams(e)); }
 
 
   /// Get the Lorentz boost to the beam centre-of-mass system (CMS) from a pair of beam momenta
   inline FourMomentum cmsBoostVec(const FourMomentum& pa, const FourMomentum& pb) {
     return pa + pb;
   }
 
   /// Get the Lorentz boost to the beam centre-of-mass system (CMS) from a pair of Particles
   inline FourMomentum cmsBoostVec(const ParticlePair& beams) {
     return cmsBoostVec(beams.first, beams.second);
   }
 
   /// Get the Lorentz boost to the beam centre-of-mass system (CMS) from a pair of beam momenta
   FourMomentum acmsBoostVec(const FourMomentum& pa, const FourMomentum& pb);
 
   /// Get the Lorentz boost to the beam centre-of-mass system (CMS) from a pair of Particles
   FourMomentum acmsBoostVec(const ParticlePair& beams);
 
 
   /// Get the Lorentz boost to the beam centre-of-mass system (CMS) from a pair of beam momenta
   Vector3 cmsBetaVec(const FourMomentum& pa, const FourMomentum& pb);
 
   /// Get the Lorentz boost to the beam centre-of-mass system (CMS) from a pair of Particles
   inline Vector3 cmsBetaVec(const ParticlePair& beams) {
     return cmsBetaVec(beams.first, beams.second);
   }
 
 
   /// Get the Lorentz boost to the per-nucleon beam centre-of-mass system (ACMS) from a pair of beam momenta
   /// @note Uses a nominal nucleon mass of 0.939 GeV to convert masses to A
   Vector3 acmsBetaVec(const FourMomentum& pa, const FourMomentum& pb);
 
   /// Get the Lorentz boost to the per-nucleon beam centre-of-mass system (ACMS) from a pair of Particles
   /// @note Uses the sum of nuclear mass numbers A for each beam
   Vector3 acmsBetaVec(const ParticlePair& beams);
 
 
   /// Get the Lorentz boost to the beam centre-of-mass system (CMS) from a pair of beam momenta
   Vector3 cmsGammaVec(const FourMomentum& pa, const FourMomentum& pb);
 
   /// Get the Lorentz boost to the beam centre-of-mass system (CMS) from a pair of Particles
   inline Vector3 cmsGammaVec(const ParticlePair& beams) {
     return cmsGammaVec(beams.first, beams.second);
   }
 
 
   /// Get the Lorentz boost to the per-nucleon beam centre-of-mass system (ACMS) from a pair of beam momenta
   /// @note Uses a nominal nucleon mass of 0.939 GeV to convert masses to A
   Vector3 acmsGammaVec(const FourMomentum& pa, const FourMomentum& pb);
 
   /// Get the Lorentz boost to the per-nucleon beam centre-of-mass system (ACMS) from a pair of Particles
   /// @note Uses the sum of nuclear mass numbers A for each beam
   Vector3 acmsGammaVec(const ParticlePair& beams);
 
 
   /// Get the Lorentz transformation to the beam centre-of-mass system (CMS) from a pair of beam momenta
   LorentzTransform cmsTransform(const FourMomentum& pa, const FourMomentum& pb);
 
   /// Get the Lorentz transformation to the beam centre-of-mass system (CMS) from a pair of Particles
   inline LorentzTransform cmsTransform(const ParticlePair& beams) {
     return cmsTransform(beams.first, beams.second);
   }
 
 
   /// Get the Lorentz transformation to the per-nucleon beam centre-of-mass system (CMS) from a pair of beam momenta
   /// @note Uses a nominal nucleon mass of 0.939 GeV to convert masses to A
   LorentzTransform acmsTransform(const FourMomentum& pa, const FourMomentum& pb);
 
   /// Get the Lorentz transformation to the per-nucleon beam centre-of-mass system (CMS) from a pair of Particles
   /// @note Uses the sum of nuclear mass numbers A for each beam
   LorentzTransform acmsTransform(const ParticlePair& beams);
 
   //@}
 
 
 
 
   /// @brief Project out the incoming beams
   class Beam : public Projection {
   public:
 
     /// Default (and only) constructor
     Beam() { setName("Beam"); }
 
     /// Clone on the heap
     DEFAULT_RIVET_PROJ_CLONE(Beam);
 
 
     /// @name Beam particles and kinematics
     //@{
 
     /// The pair of beam particles in the current collision
     const ParticlePair& beams() const { return _theBeams; }
 
     /// The pair of beam particle PDG codes in the current collision
     /// @deprecated Use pids(beams())
     PdgIdPair beamIds() const { return pids(beams()); }
 
     /// Get centre of mass energy, \f$ \sqrt{s} \f$
     double sqrtS() const { return Rivet::sqrtS(beams()); }
 
     /// Get the Lorentz boost to the beam centre-of-mass
     FourMomentum cmsBoostVec() const { return Rivet::cmsBoostVec(beams()); }
 
     /// Get the Lorentz transform to the beam centre-of-mass
     LorentzTransform cmsTransform() const { return Rivet::cmsTransform(beams()); }
 
     /// Get the beta factor vector for the Lorentz boost to the beam centre-of-mass
     Vector3 cmsBetaVec() const { return Rivet::cmsBetaVec(beams()); }
 
     /// Get the gamma factor vector for the Lorentz boost to the beam centre-of-mass
     Vector3 cmsGammaVec() const { return Rivet::cmsGammaVec(beams()); }
 
     //@}
 
 
     /// @name Per-nucleon beam kinematics
     //@{
 
     /// Get per-nucleon centre of mass energy, \f$ \sqrt{s}/(A_1 + A_2) \f$
     double asqrtS() const { return Rivet::asqrtS(beams()); }
 
     /// Get the Lorentz boost to the per-nucleon beam centre-of-mass
     Vector3 acmsBetaVec() const { return Rivet::acmsBetaVec(beams()); }
 
     /// Get the Lorentz boost to the per-nucleon beam centre-of-mass
     Vector3 acmsGammaVec() const { return Rivet::acmsGammaVec(beams()); }
 
     /// Get the Lorentz transform to the per-nucleon beam centre-of-mass
     LorentzTransform acmsTransform() const { return Rivet::acmsTransform(beams()); }
 
     //@}
 
 
     /// Get the beam interaction primary vertex (PV) position
     FourVector pv() const;
 
 
     /// Project on to the Event
     virtual void project(const Event& e);
 
 
   private:
 
     /// Compare with other projections -- it's always the same, since there are no params
-    virtual int compare(const Projection& UNUSED(p)) const { return EQUIVALENT; }
+    virtual int compare(const Projection&) const { return EQUIVALENT; }
 
     /// The beam particles in the current collision
     ParticlePair _theBeams;
 
   };
 
 
 }
 
 #endif
diff --git a/include/Rivet/Projections/ChargedLeptons.hh b/include/Rivet/Projections/ChargedLeptons.hh
--- a/include/Rivet/Projections/ChargedLeptons.hh
+++ b/include/Rivet/Projections/ChargedLeptons.hh
@@ -1,50 +1,55 @@
 // -*- C++ -*-
 #ifndef RIVET_ChargedLeptons_HH
 #define RIVET_ChargedLeptons_HH
 
 #include "Rivet/Projection.hh"
 #include "Rivet/Projections/ChargedFinalState.hh"
 #include "Rivet/Particle.hh"
 #include "Rivet/Event.hh"
 
 namespace Rivet {
 
 
   /// @brief Get charged final-state leptons
   ///
   /// @todo This is just electrons and muons, unless you set taus stable!
   class ChargedLeptons : public FinalState {
   public:
 
     /// Constructor
-    ChargedLeptons(const FinalState& fsp)
-    {
+    ChargedLeptons(const FinalState& fsp=FinalState()) {
       setName("ChargedLeptons");
       addProjection(ChargedFinalState(fsp), "ChFS");
     }
 
+    /// Constructor via Cut
+    ChargedLeptons(const Cut& c)
+      : ChargedLeptons(FinalState(c))
+    {    }
+
+
     /// Clone on the heap.
     DEFAULT_RIVET_PROJ_CLONE(ChargedLeptons);
 
 
   protected:
 
     /// Apply the projection to the event.
     void project(const Event& evt);
 
     /// Compare projections.
     int compare(const Projection& other) const;
 
   public:
 
     /// Access the projected leptons.
     const Particles& chargedLeptons() const {
       return _theParticles;
     }
 
   };
 
 
 }
 
 #endif
diff --git a/include/Rivet/Projections/DISFinalState.hh b/include/Rivet/Projections/DISFinalState.hh
--- a/include/Rivet/Projections/DISFinalState.hh
+++ b/include/Rivet/Projections/DISFinalState.hh
@@ -1,59 +1,92 @@
 // -*- C++ -*-
 #ifndef RIVET_DISFinalState_HH
 #define RIVET_DISFinalState_HH
 
 #include "Rivet/Projections/FinalState.hh"
 #include "Rivet/Projections/DISKinematics.hh"
 
 namespace Rivet {
 
 
   /// @brief Final state particles boosted to the hadronic center of mass system.
   ///
   /// NB. The DIS scattered lepton is not included in the final state particles.
   class DISFinalState: public FinalState {
   public:
 
     /// Type of DIS boost to apply
-    enum BoostType { HCM, BREIT };
+    enum BoostType { HCM, BREIT, LAB };
 
 
     /// @name Constructors
     //@{
 
-    /// Constructor
-    DISFinalState(const DISKinematics& kinematicsp, BoostType boosttype)
+    /// Constructor with explicit FinalState
+    /// @note The DISKinematics has no parameters, hence explicitly passing it as an arg shouldn't be necessary.
+    DISFinalState(const FinalState& fs, BoostType boosttype, const DISKinematics& kinematicsp=DISKinematics())
       : _boosttype(boosttype)
     {
       setName("DISFinalState");
-      addProjection(kinematicsp, "Kinematics");
+      declare(fs, "FS");
+      declare(kinematicsp, "Kinematics");
     }
 
+    /// Constructor with optional FinalState
+    /// @note The DISKinematics has no parameters, hence explicitly passing it as an arg shouldn't be necessary.
+    DISFinalState(BoostType boosttype, const FinalState& fs=FinalState(), const DISKinematics& kinematicsp=DISKinematics())
+      : DISFinalState(fs, boosttype, kinematicsp)
+    {    }
+
+    /// Constructor with explicit cuts to define final-state particles
+    /// @note The DISKinematics has no parameters, hence explicitly passing it as an arg shouldn't be necessary.
+    DISFinalState(const Cut& c, BoostType boosttype, const DISKinematics& kinematicsp=DISKinematics())
+      : DISFinalState(FinalState(c), boosttype, kinematicsp)
+    {    }
+
+    /// Constructor with explicit cuts to define final-state particles
+    /// @note The DISKinematics has no parameters, hence explicitly passing it as an arg shouldn't be necessary.
+    DISFinalState(BoostType boosttype, const Cut& c, const DISKinematics& kinematicsp=DISKinematics())
+      : DISFinalState(FinalState(c), boosttype, kinematicsp)
+    {    }
+
+    // /// @brief Constructor with default FinalState
+    // /// @note The DISKinematics has no parameters, hence explicitly passing it as an arg shouldn't be necessary.
+    // DISFinalState(BoostType boosttype, const DISKinematics& kinematicsp=DISKinematics())
+    //   : DISFinalState(FinalState(), boosttype, kinematicsp)
+    // {    }
+
+    /// Backward compatible constructor with default FinalState
+    /// @deprecated Prefer a version that doesn't need a DISKinematics argument
+    DISFinalState(const DISKinematics& kinematicsp, BoostType boosttype)
+      : DISFinalState(FinalState(), boosttype, kinematicsp)
+    {    }
+
+
     /// Clone on the heap.
     DEFAULT_RIVET_PROJ_CLONE(DISFinalState);
 
     //@}
 
 
   protected:
 
     /// Apply the projection on the supplied event.
     void project(const Event& e);
 
     /// Compare projections.
     int compare(const Projection& p) const {
       const DISFinalState& other = dynamic_cast<const DISFinalState&>(p);
-      return mkNamedPCmp(p, "Kinematics") || cmp(_boosttype, other._boosttype);
+      return mkNamedPCmp(p, "Kinematics") || mkNamedPCmp(p, "FS") || cmp(_boosttype, other._boosttype);
     }
 
 
   private:
 
     BoostType _boosttype;
 
   };
 
 
 }
 
 #endif
diff --git a/include/Rivet/Projections/DISKinematics.hh b/include/Rivet/Projections/DISKinematics.hh
--- a/include/Rivet/Projections/DISKinematics.hh
+++ b/include/Rivet/Projections/DISKinematics.hh
@@ -1,105 +1,104 @@
 // -*- C++ -*-
 #ifndef RIVET_DISKinematics_HH
 #define RIVET_DISKinematics_HH
 
 #include "Rivet/Particle.hh"
 #include "Rivet/Event.hh"
 #include "Rivet/Projection.hh"
 #include "Rivet/Projections/DISLepton.hh"
 #include "Rivet/Projections/Beam.hh"
 
 namespace Rivet {
 
 
   /// @brief Get the DIS kinematic variables and relevant boosts for an event.
   class DISKinematics : public Projection {
-
   public:
 
     /// The default constructor.
     DISKinematics()
       : _theQ2(-1.0), _theW2(-1.0), _theX(-1.0), _theY(-1.0), _theS(-1.0)
     {
       setName("DISKinematics");
       //addPdgIdPair(ANY, hadid);
       addProjection(Beam(), "Beam");
       addProjection(DISLepton(), "Lepton");
     }
 
     /// Clone on the heap.
     DEFAULT_RIVET_PROJ_CLONE(DISKinematics);
 
 
   protected:
 
     /// Perform the projection operation on the supplied event.
     virtual void project(const Event& e);
 
     /// Compare with other projections.
     virtual int compare(const Projection& p) const;
 
 
   public:
 
     /// The \f$Q^2\f$.
     double Q2() const { return _theQ2; }
 
     /// The \f$W^2\f$.
     double W2() const { return _theW2; }
 
     /// The Bjorken \f$x\f$.
     double x() const { return _theX; }
 
-    /// The Inelasticity \f$y\f$
+    /// The inelasticity \f$y\f$
     double y() const { return _theY; }
 
     /// The centre of mass energy \f$s\f$
     double s() const { return _theS; }
 
 
 
     /// The LorentzRotation needed to boost a particle to the hadronic CM frame.
     const LorentzTransform& boostHCM() const {
       return _hcm;
     }
 
     /// The LorentzRotation needed to boost a particle to the hadronic Breit frame.
     const LorentzTransform& boostBreit() const {
       return _breit;
     }
 
     /// The incoming Hadron beam particle
     const Particle& beamHadron() const {
       return _inHadron;
     }
 
   private:
 
     /// The \f$Q^2\f$.
     double _theQ2;
 
     /// The \f$W^2\f$.
     double _theW2;
 
     /// The Bjorken \f$x\f$.
     double _theX;
 
     /// The Inelasticity \f$y\f$
     double _theY;
 
     /// The centre of mass energy \f$s\f$
     double _theS;
 
     Particle _inHadron;
 
     /// The LorentzRotation needed to boost a particle to the hadronic CM frame.
     LorentzTransform _hcm;
 
     /// The LorentzRotation needed to boost a particle to the hadronic Breit frame.
     LorentzTransform _breit;
   };
 
 
 }
 
 #endif
diff --git a/include/Rivet/Projections/DISLepton.hh b/include/Rivet/Projections/DISLepton.hh
--- a/include/Rivet/Projections/DISLepton.hh
+++ b/include/Rivet/Projections/DISLepton.hh
@@ -1,67 +1,73 @@
 // -*- C++ -*-
 #ifndef RIVET_DISLepton_HH
 #define RIVET_DISLepton_HH
 
 #include "Rivet/Projections/Beam.hh"
 #include "Rivet/Projections/FinalState.hh"
 #include "Rivet/Particle.hh"
 #include "Rivet/Event.hh"
 
 namespace Rivet {
 
 
   /// @brief Get the incoming and outgoing leptons in a DIS event.
   class DISLepton : public Projection {
 
   public:
 
     /// @name Constructors.
     //@{
 
     DISLepton(){
       setName("DISLepton");
       addProjection(Beam(), "Beam");
       addProjection(FinalState(), "FS");
     }
 
     /// Clone on the heap.
     DEFAULT_RIVET_PROJ_CLONE(DISLepton);
 
     //@}
 
 
   protected:
 
     /// Perform the projection operation on the supplied event.
     virtual void project(const Event& e);
 
     /// Compare with other projections.
     virtual int compare(const Projection& p) const;
 
+
   public:
 
     /// The incoming lepton.
     const Particle& in() const { return _incoming; }
 
     /// The outgoing lepton.
     const Particle& out() const { return _outgoing; }
 
-    const double &pzSign() const { return _sign; }
+    /// Sign of the incoming lepton pz component
+    const double& pzSign() const { return _sign; }
+
 
   private:
 
     /// The incoming lepton.
     Particle _incoming;
 
     /// The outgoing lepton.
     Particle _outgoing;
 
-    /// The sign of the PZ of the incoming lepton
+    /// The sign of the pz of the incoming lepton
     double _sign;
 
+    /// The current sign
+    int _charged;
+
   };
 
 }
 
 
 #endif
diff --git a/include/Rivet/Projections/DressedLeptons.hh b/include/Rivet/Projections/DressedLeptons.hh
--- a/include/Rivet/Projections/DressedLeptons.hh
+++ b/include/Rivet/Projections/DressedLeptons.hh
@@ -1,92 +1,103 @@
 // -*- C++ -*-
 #ifndef RIVET_DressedLeptons_HH
 #define RIVET_DressedLeptons_HH
 
 #include "Rivet/Projection.hh"
 #include "Rivet/Projections/FinalState.hh"
 #include "Rivet/Projections/IdentifiedFinalState.hh"
 #include "Rivet/Config/RivetCommon.hh"
 
 namespace Rivet {
 
 
   /// A charged lepton meta-particle created by clustering photons close to the bare lepton
   class DressedLepton : public Particle {
   public:
 
     DressedLepton(const Particle& lepton) :
       Particle(lepton.pid(), lepton.momentum()),
       _constituentLepton(lepton) {}
 
     void addPhoton(const Particle& p, bool cluster) {
       _constituentPhotons.push_back(p);
       if (cluster) setMomentum(momentum() + p.momentum());
     }
 
     const Particle& constituentLepton() const { return _constituentLepton; }
     const Particles& constituentPhotons() const { return _constituentPhotons; }
 
   private:
 
     Particles _constituentPhotons;
     Particle _constituentLepton;
   };
 
 
   /// @brief Cluster photons from a given FS to all charged particles (typically leptons)
   ///
   /// This stores the original (bare) charged particles and photons as particles()
   /// while the newly created clustered lepton objects are accessible as
   /// dressedLeptons(). The clustering is done by a delta(R) cone around each bare
   /// lepton, with double counting being avoided by only adding a photon to the _closest_
   /// bare lepton if it happens to be within the capture radius of more than one.
   class DressedLeptons : public FinalState {
   public:
 
-    /// @brief Constructor with a general (and optional) Cut argument
+    /// @brief Constructor with a single input FinalState (used for both photons and bare leptons)
+    ///
+    /// Provide final state projections used to select the photons and bare
+    /// leptons (wish we had put the first two args the other way around...),
+    /// a clustering delta(R) cone size around each bare lepton, and an optional
+    /// cut on the _dressed_ leptons (i.e. the momenta after clustering.)
+    /// The final two arguments are rarely used.
+    DressedLeptons(const FinalState& barefs,
+                   double dRmax, const Cut& cut=Cuts::open(),
+                   bool cluster=true, bool useDecayPhotons=false);
+
+    /// @brief Constructor with distinct photon and lepton FinalStates
     ///
     /// Provide final state projections used to select the photons and bare
     /// leptons (wish we had put the first two args the other way around...),
     /// a clustering delta(R) cone size around each bare lepton, and an optional
     /// cut on the _dressed_ leptons (i.e. the momenta after clustering.)
     /// The final two arguments are rarely used.
     DressedLeptons(const FinalState& photons, const FinalState& bareleptons,
                    double dRmax, const Cut& cut=Cuts::open(),
                    bool cluster=true, bool useDecayPhotons=false);
 
     /// Clone this projection
     DEFAULT_RIVET_PROJ_CLONE(DressedLeptons);
 
     /// Retrieve the dressed leptons
     const vector<DressedLepton>& dressedLeptons() const { return _clusteredLeptons; }
 
 
   protected:
 
     /// Apply the projection on the supplied event.
     void project(const Event& e);
 
     /// Compare projections.
     int compare(const Projection& p) const;
 
 
   private:
 
     /// Maximum cone radius to find photons in
     double _dRmax;
     /// Whether to actually add the photon momenta to clusteredLeptons
     bool _cluster;
-    /// Whether to include photons from hadron (particularly pi0) decays
+    /// Whether to include photons from hadron (particularly pi0) and hadronic tau decays
     bool _fromDecay;
 
     /// Container which stores the clustered lepton objects
     vector<DressedLepton> _clusteredLeptons;
 
   };
 
 
 
 }
 
 
 #endif
diff --git a/include/Rivet/Projections/FastJets.hh b/include/Rivet/Projections/FastJets.hh
--- a/include/Rivet/Projections/FastJets.hh
+++ b/include/Rivet/Projections/FastJets.hh
@@ -1,296 +1,292 @@
 // -*- C++ -*-
 #ifndef RIVET_FastJets_HH
 #define RIVET_FastJets_HH
 
 #include "Rivet/Jet.hh"
 #include "Rivet/Particle.hh"
 #include "Rivet/Projection.hh"
 #include "Rivet/Projections/JetAlg.hh"
 #include "Rivet/Projections/FinalState.hh"
 #include "Rivet/Tools/RivetFastJet.hh"
 
 #include "fastjet/SISConePlugin.hh"
 #include "fastjet/ATLASConePlugin.hh"
 #include "fastjet/CMSIterativeConePlugin.hh"
 #include "fastjet/CDFJetCluPlugin.hh"
 #include "fastjet/CDFMidPointPlugin.hh"
 #include "fastjet/D0RunIIConePlugin.hh"
 #include "fastjet/TrackJetPlugin.hh"
 #include "fastjet/JadePlugin.hh"
 //#include "fastjet/PxConePlugin.hh"
 
 namespace Rivet {
 
 
   /// Project out jets found using the FastJet package jet algorithms.
   class FastJets : public JetAlg {
   public:
 
     /// Wrapper enum for selected FastJet jet algorithms.
     /// @todo Move to JetAlg and alias here?
     enum JetAlgName { KT, CAM, SISCONE, ANTIKT,
                       // PXCONE,
                       ATLASCONE, CMSCONE,
                       CDFJETCLU, CDFMIDPOINT, D0ILCONE,
                       JADE, DURHAM, TRACKJET, GENKTEE };
 
 
     /// @name Constructors etc.
     //@{
 
     /// Constructor from a FastJet JetDefinition
     ///
     /// @warning The AreaDefinition pointer must be heap-allocated: it will be stored/deleted via a shared_ptr.
     FastJets(const FinalState& fsp,
              const fastjet::JetDefinition& jdef,
              JetAlg::MuonsStrategy usemuons=JetAlg::ALL_MUONS,
              JetAlg::InvisiblesStrategy useinvis=JetAlg::NO_INVISIBLES,
              fastjet::AreaDefinition* adef=nullptr)
       : JetAlg(fsp, usemuons, useinvis), _jdef(jdef), _adef(adef)
     {
       _initBase();
     }
 
     /// JetDefinition-based constructor with reordered args for easier specification of jet area definition
     ///
     /// @warning The AreaDefinition pointer must be heap-allocated: it will be stored/deleted via a shared_ptr.
     FastJets(const FinalState& fsp,
              const fastjet::JetDefinition& jdef,
              fastjet::AreaDefinition* adef,
              JetAlg::MuonsStrategy usemuons=JetAlg::ALL_MUONS,
              JetAlg::InvisiblesStrategy useinvis=JetAlg::NO_INVISIBLES)
       : FastJets(fsp, jdef, usemuons, useinvis, adef)
     {    }
 
     /// Native argument constructor, using FastJet alg/scheme enums.
     ///
     /// @warning The AreaDefinition pointer must be heap-allocated: it will be stored/deleted via a shared_ptr.
     FastJets(const FinalState& fsp,
              fastjet::JetAlgorithm type,
              fastjet::RecombinationScheme recom, double rparameter,
              JetAlg::MuonsStrategy usemuons=JetAlg::ALL_MUONS,
              JetAlg::InvisiblesStrategy useinvis=JetAlg::NO_INVISIBLES,
              fastjet::AreaDefinition* adef=nullptr)
       : FastJets(fsp, fastjet::JetDefinition(type, rparameter, recom), usemuons, useinvis, adef)
     {    }
 
     /// Native argument constructor with reordered args for easier specification of jet area definition
     ///
     /// @warning The AreaDefinition pointer must be heap-allocated: it will be stored/deleted via a shared_ptr.
     FastJets(const FinalState& fsp,
              fastjet::JetAlgorithm type,
              fastjet::RecombinationScheme recom, double rparameter,
              fastjet::AreaDefinition* adef,
              JetAlg::MuonsStrategy usemuons=JetAlg::ALL_MUONS,
              JetAlg::InvisiblesStrategy useinvis=JetAlg::NO_INVISIBLES)
       : FastJets(fsp, type, recom, rparameter, usemuons, useinvis, adef)
     {    }
 
     /// @brief Explicitly pass in an externally-constructed plugin
     ///
     /// @warning Provided plugin and area definition pointers must be heap-allocated; Rivet will store/delete via a shared_ptr
     FastJets(const FinalState& fsp,
              fastjet::JetDefinition::Plugin* plugin,
              JetAlg::MuonsStrategy usemuons=JetAlg::ALL_MUONS,
              JetAlg::InvisiblesStrategy useinvis=JetAlg::NO_INVISIBLES,
              fastjet::AreaDefinition* adef=nullptr)
       : FastJets(fsp, fastjet::JetDefinition(plugin), usemuons, useinvis, adef)
     {
       _plugin.reset(plugin);
     }
 
     /// @brief Explicitly pass in an externally-constructed plugin, with reordered args for easier specification of jet area definition
     ///
     /// @warning Provided plugin and area definition pointers must be heap-allocated; Rivet will store/delete via a shared_ptr
     FastJets(const FinalState& fsp,
              fastjet::JetDefinition::Plugin* plugin,
              fastjet::AreaDefinition* adef,
              JetAlg::MuonsStrategy usemuons=JetAlg::ALL_MUONS,
              JetAlg::InvisiblesStrategy useinvis=JetAlg::NO_INVISIBLES)
       : FastJets(fsp, plugin, usemuons, useinvis, adef)
     {    }
 
     /// @brief Convenience constructor using Rivet enums for most common jet algs (including some plugins).
     ///
     /// For the built-in algs, E-scheme recombination is used. For full control
     /// of FastJet built-in jet algs, use the constructors from native-args or a
     /// plugin pointer.
     ///
     /// @warning Provided area definition pointer must be heap-allocated; Rivet will store/delete via a shared_ptr
     FastJets(const FinalState& fsp,
              JetAlgName alg, double rparameter,
              JetAlg::MuonsStrategy usemuons=JetAlg::ALL_MUONS,
              JetAlg::InvisiblesStrategy useinvis=JetAlg::NO_INVISIBLES,
              fastjet::AreaDefinition* adef=nullptr,
              double seed_threshold=1.0)
       : JetAlg(fsp, usemuons, useinvis)
     {
       _initBase();
       _initJdef(alg, rparameter, seed_threshold);
     }
 
 
     // /// Same thing as above, but without an FS (for when we want to pass the particles directly to the calc method)
     // /// @todo Does this work properly, without internal HeavyQuarks etc.?
     // FastJets(JetAlgName alg, double rparameter, double seed_threshold=1.0) { _initJdef(alg, rparameter, seed_threshold); }
     // /// Same thing as above, but without an FS (for when we want to pass the particles directly to the calc method)
     // /// @todo Does this work properly, without internal HeavyQuarks etc.?
     // FastJets(fastjet::JetAlgorithm type, fastjet::RecombinationScheme recom, double rparameter) { _initJdef(type, recom, rparameter); }
     // /// Same thing as above, but without an FS (for when we want to pass the particles directly to the calc method)
     // /// @todo Does this work properly, without internal HeavyQuarks etc.?
     // FastJets(fastjet::JetDefinition::Plugin* plugin) : _jdef(plugin), _plugin(plugin) {
     //   // _plugin.reset(plugin);
     //   // _jdef = fastjet::JetDefinition(plugin);
     // }
 
 
     /// Clone on the heap.
     DEFAULT_RIVET_PROJ_CLONE(FastJets);
 
     //@}
 
 
+    /// @name Static helper functions for FastJet interaction, with tagging
+    //@{
+
+    /// Make PseudoJets for input to a ClusterSequence, with user_index codes for constituent- and tag-particle linking
+    static PseudoJets mkClusterInputs(const Particles& fsparticles, const Particles& tagparticles=Particles());
+    /// Make a Rivet Jet from a PseudoJet holding a user_index code for lookup of Rivet fsparticle or tagparticle links
+    static Jet mkJet(const PseudoJet& pj, const Particles& fsparticles, const Particles& tagparticles=Particles());
+    /// Convert a whole list of PseudoJets to a list of Jets, with mkJet-style unpacking
+    static Jets mkJets(const PseudoJets& pjs, const Particles& fsparticles, const Particles& tagparticles=Particles());
+
+    //@}
+
+
     /// Reset the projection. Jet def, etc. are unchanged.
     void reset();
 
 
     /// @brief Use provided jet area definition
     ///
     /// @warning The provided pointer must be heap-allocated: it will be stored/deleted via a shared_ptr.
     /// @note Provide an adef null pointer to re-disable jet area calculation
     void useJetArea(fastjet::AreaDefinition* adef) {
       _adef.reset(adef);
     }
 
 
     /// @name Access to the jets
     //@{
 
     /// Get the jets (unordered) with pT > ptmin.
     Jets _jets() const;
 
     /// Get the pseudo jets (unordered).
     PseudoJets pseudoJets(double ptmin=0.0) const;
     /// Alias
     PseudoJets pseudojets(double ptmin=0.0) const { return pseudoJets(ptmin); }
 
     /// Get the pseudo jets, ordered by \f$ p_T \f$.
     PseudoJets pseudoJetsByPt(double ptmin=0.0) const {
       return sorted_by_pt(pseudoJets(ptmin));
     }
     /// Alias
     PseudoJets pseudojetsByPt(double ptmin=0.0) const { return pseudoJetsByPt(ptmin); }
 
     /// Get the pseudo jets, ordered by \f$ E \f$.
     PseudoJets pseudoJetsByE(double ptmin=0.0) const {
       return sorted_by_E(pseudoJets(ptmin));
     }
     /// Alias
     PseudoJets pseudojetsByE(double ptmin=0.0) const { return pseudoJetsByE(ptmin); }
 
     /// Get the pseudo jets, ordered by rapidity.
     PseudoJets pseudoJetsByRapidity(double ptmin=0.0) const {
       return sorted_by_rapidity(pseudoJets(ptmin));
     }
     /// Alias
     PseudoJets pseudojetsByRapidity(double ptmin=0.0) const { return pseudoJetsByRapidity(ptmin); }
 
     /// Trim (filter) a jet, keeping tag and constituent info in the resulting jet
     Jet trimJet(const Jet& input, const fastjet::Filter& trimmer) const;
 
     //@}
 
 
     /// @name Access to the FastJet clustering objects such as jet def, area def, and cluster
     //@{
 
     /// Return the cluster sequence.
     /// @todo Care needed re. const shared_ptr<T> vs. shared_ptr<const T>
     const shared_ptr<fastjet::ClusterSequence> clusterSeq() const {
       return _cseq;
     }
-    // const fastjet::ClusterSequence* clusterSeq() const {
-    //   return _cseq.get();
-    // }
 
     /// Return the area-enabled cluster sequence (if an area defn exists, otherwise returns a null ptr).
     /// @todo Care needed re. const shared_ptr<T> vs. shared_ptr<const T>
     const shared_ptr<fastjet::ClusterSequenceArea> clusterSeqArea() const {
       return areaDef() ? dynamic_pointer_cast<fastjet::ClusterSequenceArea>(_cseq) : nullptr;
     }
-    // const fastjet::ClusterSequenceArea* clusterSeqArea() const {
-    //   return areaDef() ? dynamic_cast<fastjet::ClusterSequenceArea*>(_cseq.get()) : nullptr;
-    // }
 
     /// Return the jet definition.
     const fastjet::JetDefinition& jetDef() const {
       return _jdef;
     }
 
     /// @brief Return the area definition.
     ///
     /// @warning May be null!
     /// @todo Care needed re. const shared_ptr<T> vs. shared_ptr<const T>
     const shared_ptr<fastjet::AreaDefinition> areaDef() const {
       return _adef;
     }
-    // const fastjet::AreaDefinition* areaDef() const {
-    //   return _adef.get();
-    // }
 
     //@}
 
 
   private:
 
     /// Shared utility functions to implement constructor behaviour
-    /// @todo Replace with calls between constructors when C++11 available?
     void _initBase();
     void _initJdef(JetAlgName alg, double rparameter, double seed_threshold);
-    // void _init2(fastjet::JetAlgorithm type, fastjet::RecombinationScheme recom, double rparameter);
-    // void _init3(const fastjet::JetDefinition& plugin);
-    // void _init4(fastjet::JetDefinition::Plugin* plugin);
-
-    /// Function to make Rivet::Jet from fastjet::PseudoJet, including constituent and tag info
-    Jet _mkJet(const PseudoJet& pj) const;
 
   protected:
 
     /// Perform the projection on the Event.
     void project(const Event& e);
 
     /// Compare projections.
     int compare(const Projection& p) const;
 
   public:
 
     /// Do the calculation locally (no caching).
     void calc(const Particles& fsparticles, const Particles& tagparticles=Particles());
 
 
   private:
 
     /// Jet definition
     fastjet::JetDefinition _jdef;
 
     /// Pointer to user-handled area definition
     std::shared_ptr<fastjet::AreaDefinition> _adef;
 
     /// Cluster sequence
     std::shared_ptr<fastjet::ClusterSequence> _cseq;
 
     /// FastJet external plugin
     std::shared_ptr<fastjet::JetDefinition::Plugin> _plugin;
 
     /// Map of vectors of y scales. This is mutable so we can use caching/lazy evaluation.
     mutable std::map<int, vector<double> > _yscales;
 
-    /// set of particles sorted by their PT2
-    //set<Particle, ParticleBase::byPTAscending> _particles;
-    std::map<int, Particle> _particles;
+    /// Particles used for constituent and tag lookup
+    Particles _fsparticles, _tagparticles;
 
   };
 
 }
 
 #endif
diff --git a/include/Rivet/Projections/HeavyHadrons.hh b/include/Rivet/Projections/HeavyHadrons.hh
--- a/include/Rivet/Projections/HeavyHadrons.hh
+++ b/include/Rivet/Projections/HeavyHadrons.hh
@@ -1,89 +1,112 @@
 // -*- C++ -*-
 #ifndef RIVET_HeavyHadrons_HH
 #define RIVET_HeavyHadrons_HH
 
 #include "Rivet/Projections/FinalState.hh"
 #include "Rivet/Projections/UnstableFinalState.hh"
 #include "Rivet/Particle.hh"
 #include "Rivet/Event.hh"
 
 namespace Rivet {
 
 
   /// @brief Project out the last pre-decay b and c hadrons.
   ///
   /// This currently defines a c-hadron as one which contains a @a c quark and
   /// @a{not} a @a b quark.
   ///
   /// @todo This assumes that the heavy hadrons are unstable... should we also look for stable ones in case the decays are disabled?
   class HeavyHadrons : public FinalState {
   public:
 
     /// @name Constructors and destructors.
     //@{
 
     /// Constructor with specification of the minimum and maximum pseudorapidity
     /// \f$ \eta \f$ and the min \f$ p_T \f$ (in GeV).
     HeavyHadrons(const Cut& c=Cuts::open()) {
       setName("HeavyHadrons");
       addProjection(UnstableFinalState(c), "UFS");
     }
 
     /// Clone on the heap.
     DEFAULT_RIVET_PROJ_CLONE(HeavyHadrons);
 
     //@}
 
 
-    /// @name Particle accessors
+    /// @name b hadron accessors
     //@{
 
     /// Get all weakly decaying b hadrons (return by reference)
     const Particles& bHadrons() const {
       return _theBs;
     }
 
+    /// Get weakly decaying b hadrons with a Cut applied (return by value)
+    Particles bHadrons(const Cut& c) const {
+      return filter_select(bHadrons(), c);
+    }
+
     /// Get weakly decaying b hadrons with a pTmin cut (return by value)
-    Particles bHadrons(double pTmin) const {
-      Particles rtn;
-      foreach (const Particle& p, bHadrons())
-        if (p.pT() > pTmin) rtn += p;
-      return rtn;
+    /// @deprecated Prefer bHadrons(Cuts::pT > x)
+    Particles bHadrons(double ptmin) const {
+      return bHadrons(Cuts::pT > ptmin);
     }
 
+    /// Get weakly decaying b hadrons with a general filter function applied (return by value)
+    Particles bHadrons(const ParticleSelector& s) const {
+      return filter_select(bHadrons(), s);
+    }
+
+    //@}
+
+
+
+    /// @name b hadron accessors
+    //@{
+
     /// Get all weakly decaying c hadrons (return by reference)
     const Particles& cHadrons() const {
       return _theCs;
     }
 
+    /// Get weakly decaying c hadrons with a Cut applied (return by value)
+    Particles cHadrons(const Cut& c) const {
+      return filter_select(cHadrons(), c);
+    }
+
     /// Get weakly decaying c hadrons with a pTmin cut (return by value)
-    const Particles cHadrons(double pTmin) const {
-      Particles rtn;
-      foreach (const Particle& p, cHadrons())
-        if (p.pT() > pTmin) rtn += p;
-      return rtn;
+    /// @deprecated Prefer cHadrons(Cuts::pT > x)
+    Particles cHadrons(double ptmin) const {
+      return cHadrons(Cuts::pT > ptmin);
+    }
+
+    /// Get weakly decaying c hadrons with a general filter function applied (return by value)
+    Particles cHadrons(const ParticleSelector& s) const {
+      return filter_select(cHadrons(), s);
     }
 
     //@}
 
 
   protected:
 
     /// Apply the projection to the event.
     virtual void project(const Event& e);
 
     /// Compare projections (only difference is in UFS definition)
     virtual int compare(const Projection& p) const {
       return mkNamedPCmp(p, "UFS");
     }
 
     /// b and c hadron containers
     Particles _theBs, _theCs;
 
   };
 
 
 }
 
 
 #endif
diff --git a/include/Rivet/Projections/IdentifiedFinalState.hh b/include/Rivet/Projections/IdentifiedFinalState.hh
--- a/include/Rivet/Projections/IdentifiedFinalState.hh
+++ b/include/Rivet/Projections/IdentifiedFinalState.hh
@@ -1,138 +1,138 @@
 // -*- C++ -*-
 #ifndef RIVET_IdentifiedFinalState_HH
 #define RIVET_IdentifiedFinalState_HH
 
 #include "Rivet/Projections/FinalState.hh"
 
 namespace Rivet {
 
 
   /// @brief Produce a final state which only contains specified particle IDs.
   class IdentifiedFinalState : public FinalState {
   public:
 
     /// @name Constructors
     //@{
 
     /// Constructor with a FinalState and optional list of PDG ID codes.
     IdentifiedFinalState(const FinalState& fsp, const vector<PdgId>& pids=vector<PdgId>());
 
     /// Constructor with a list of PDG ID codes and a FinalState
     /// @deprecated Use the version with FinalState as 1st arg
     DEPRECATED("Use the version with FinalState as 1st arg")
     IdentifiedFinalState(const vector<PdgId>& pids, const FinalState& fsp);
 
-    /// Constructor with a FinalState and a single of PDG ID code.
+    /// Constructor with a FinalState and a single PDG ID code.
     IdentifiedFinalState(const FinalState& fsp, PdgId pid);
 
     /// Constructor with a single PDG ID code and a FinalState.
     /// @deprecated Use the version with FinalState as 1st arg
     DEPRECATED("Use the version with FinalState as 1st arg")
     IdentifiedFinalState(PdgId pid, const FinalState& fsp);
 
 
     /// Construction using optional Cuts object and optional list of PDG ID codes
     IdentifiedFinalState(const Cut& c=Cuts::open(), const vector<PdgId>& pids=vector<PdgId>());
 
     /// Construction using list of PDG ID codes and an optional Cuts object
     IdentifiedFinalState(const vector<PdgId>& pids, const Cut& c=Cuts::open());
 
     /// Construction using Cuts object and a single PDG ID code
     IdentifiedFinalState(const Cut& c, PdgId pid);
 
     /// Construction using a single PDG ID code and an optional Cuts object
     IdentifiedFinalState(PdgId pid, const Cut& c=Cuts::open());
 
 
     /// Clone on the heap.
     DEFAULT_RIVET_PROJ_CLONE(IdentifiedFinalState);
 
     //@}
 
 
     /// Get the list of particle IDs to accept.
     const set<PdgId>& acceptedIds() const {
       return _pids;
     }
 
     /// Add an accepted particle ID.
     IdentifiedFinalState& acceptId(PdgId pid) {
       _pids.insert(pid);
       return *this;
     }
 
     /// Add a set of accepted particle IDs.
     IdentifiedFinalState& acceptIds(const vector<PdgId>& pids) {
       foreach (const PdgId pid, pids) {
         _pids.insert(pid);
       }
       return *this;
     }
 
     /// Add an accepted particle ID and its antiparticle.
     IdentifiedFinalState& acceptIdPair(PdgId pid) {
       _pids.insert(pid);
       _pids.insert(-pid);
       return *this;
     }
 
     /// Add a set of accepted particle IDs and their antiparticles.
     IdentifiedFinalState& acceptIdPairs(const vector<PdgId>& pids) {
       foreach (const PdgId pid, pids) {
         _pids.insert(pid);
         _pids.insert(-pid);
       }
       return *this;
     }
 
     /// Accept all neutrinos (convenience method).
     IdentifiedFinalState& acceptNeutrinos() {
       acceptIdPair(PID::NU_E);
       acceptIdPair(PID::NU_MU);
       acceptIdPair(PID::NU_TAU);
       return *this;
     }
 
     /// Accept all charged leptons (convenience method).
     IdentifiedFinalState& acceptChLeptons() {
       acceptIdPair(PID::ELECTRON);
       acceptIdPair(PID::MUON);
       acceptIdPair(PID::TAU);
       return *this;
     }
 
     /// Reset the list of particle IDs to accept.
     void reset() {
       _pids.clear();
     }
 
     // The remaining particles
     virtual const Particles& remainingParticles() const {
       return _remainingParticles;
     }
 
 
   protected:
 
     /// Apply the projection on the supplied event.
     void project(const Event& e);
 
     /// Compare projections.
     int compare(const Projection& p) const;
 
 
   private:
 
     /// The final-state particles.
     set<PdgId> _pids;
 
     // A vector of all other particles in the final state
     Particles _remainingParticles;
 
   };
 
 
 }
 
 
 #endif
diff --git a/include/Rivet/Projections/JetAlg.hh b/include/Rivet/Projections/JetAlg.hh
--- a/include/Rivet/Projections/JetAlg.hh
+++ b/include/Rivet/Projections/JetAlg.hh
@@ -1,227 +1,232 @@
 // -*- C++ -*-
 #ifndef RIVET_JetAlg_HH
 #define RIVET_JetAlg_HH
 
 #include "Rivet/Projection.hh"
 #include "Rivet/Projections/FinalState.hh"
 #include "Rivet/Projections/VisibleFinalState.hh"
 #include "Rivet/Particle.hh"
 #include "Rivet/Jet.hh"
 
 namespace Rivet {
 
 
   /// Abstract base class for projections which can return a set of {@link Jet}s.
   class JetAlg : public Projection {
   public:
 
     /// Enum for the treatment of muons: whether to include all, some, or none in jet-finding
     enum MuonsStrategy { NO_MUONS, DECAY_MUONS, ALL_MUONS };
 
     /// Enum for the treatment of invisible particles: whether to include all, some, or none in jet-finding
     enum InvisiblesStrategy { NO_INVISIBLES, DECAY_INVISIBLES, ALL_INVISIBLES };
 
 
 
     /// Constructor
     JetAlg(const FinalState& fs, MuonsStrategy usemuons=JetAlg::ALL_MUONS, InvisiblesStrategy useinvis=JetAlg::NO_INVISIBLES);
 
     /// Default constructor
     JetAlg() {};
 
     /// Clone on the heap.
     virtual unique_ptr<Projection> clone() const = 0;
 
     /// Destructor
     virtual ~JetAlg() { }
 
 
     /// @name Control the treatment of muons and invisible particles
     ///
     /// Since MC-based jet calibration (and/or particle flow) can add back in
     /// particles that weren't seen in calorimeters/trackers.
     //@{
 
     /// @brief Include (some) muons in jet construction.
     ///
     /// The default behaviour is that jets are only constructed from visible
     /// particles. Some jet studies, including those from ATLAS, use a definition
     /// in which neutrinos from hadron decays are included via MC-based calibrations.
     /// Setting this flag to true avoids the automatic restriction to a VisibleFinalState.
     void useMuons(MuonsStrategy usemuons=ALL_MUONS) {
       _useMuons = usemuons;
     }
 
     /// @brief Include (some) invisible particles in jet construction.
     ///
     /// The default behaviour is that jets are only constructed from visible
     /// particles. Some jet studies, including those from ATLAS, use a definition
     /// in which neutrinos from hadron decays are included via MC-based calibrations.
     /// Setting this flag to true avoids the automatic restriction to a VisibleFinalState.
     void useInvisibles(InvisiblesStrategy useinvis=DECAY_INVISIBLES) {
       _useInvisibles = useinvis;
     }
 
     /// @brief Include (some) invisible particles in jet construction.
     ///
     /// The default behaviour is that jets are only constructed from visible
     /// particles. Some jet studies, including those from ATLAS, use a definition
     /// in which neutrinos from hadron decays are included via MC-based calibrations.
     /// Setting this flag to true avoids the automatic restriction to a VisibleFinalState.
     ///
     /// @deprecated Use the enum-arg version instead. Will be removed in Rivet v3
     void useInvisibles(bool useinvis) {
       _useInvisibles = useinvis ? DECAY_INVISIBLES : NO_INVISIBLES;
     }
 
     //@}
 
 
     /// @name Access to jet objects
     //@{
 
     /// Get jets in no guaranteed order, with an optional Cut
     /// @note Returns a copy rather than a reference, due to cuts
     virtual Jets jets(const Cut& c=Cuts::open()) const {
       return filter_select(_jets(), c);
       // const Jets rawjets = _jets();
       // // Just return a copy of rawjets if the cut is open
       // if (c == Cuts::open()) return rawjets;
       // // If there is a non-trivial cut...
       // /// @todo Use an STL erase(remove_if) and lambda function for this
       // Jets rtn;
       // rtn.reserve(size());
       // foreach (const Jet& j, rawjets)
       //   if (c->accept(j)) rtn.push_back(j);
       // return rtn;
     }
 
     /// Get jets in no guaranteed order, with a selection functor
     /// @note Returns a copy rather than a reference, due to cuts
     virtual Jets jets(const JetSelector& selector) const {
       return filter_select(_jets(), selector);
     }
 
 
     /// Get the jets with a Cut applied, and ordered by supplied sorting functor
     /// @note Returns a copy rather than a reference, due to cuts and sorting
     Jets jets(const Cut& c, const JetSorter& sorter) const {
       /// @todo Will the vector be efficiently std::move'd by value through this function chain?
       return sortBy(jets(c), sorter);
     }
 
     /// Get the jets, ordered by supplied sorting functor, with an optional Cut
     /// @note Returns a copy rather than a reference, due to cuts and sorting
     Jets jets(const JetSorter& sorter, const Cut& c=Cuts::open()) const {
       /// @todo Will the vector be efficiently std::move'd by value through this function chain?
       return jets(c, sorter);
     }
 
     /// Get the jets, ordered by supplied sorting function object, with optional cuts on \f$ p_\perp \f$ and rapidity.
     /// @note Returns a copy rather than a reference, due to cuts and sorting
     Jets jets(const JetSelector& selector, const JetSorter& sorter) const {
       /// @todo Will the vector be efficiently std::move'd by value through this function chain?
       return sortBy(jets(selector), sorter);
     }
 
     /// Get the jets, ordered by supplied sorting functor and with a selection functor applied
     /// @note Returns a copy rather than a reference, due to cuts and sorting
     Jets jets(const JetSorter& sorter, const JetSelector selector) const {
       /// @todo Will the vector be efficiently std::move'd by value through this function chain?
       return jets(selector, sorter);
     }
 
 
     /// Get the jets, ordered by \f$ p_T \f$, with optional cuts.
     ///
     /// @note Returns a copy rather than a reference, due to cuts and sorting
     ///
     /// This is a very common use-case, so is available as syntatic sugar for jets(c, cmpMomByPt).
     /// @todo The other sorted accessors should be removed in a cleanup.
     Jets jetsByPt(const Cut& c=Cuts::open()) const {
       return jets(c, cmpMomByPt);
     }
 
     /// Get the jets, ordered by \f$ p_T \f$, with cuts via a selection functor.
     ///
     /// @note Returns a copy rather than a reference, due to cuts and sorting
     ///
     /// This is a very common use-case, so is available as syntatic sugar for jets(c, cmpMomByPt).
     /// @todo The other sorted accessors should be removed in a cleanup.
     Jets jetsByPt(const JetSelector& selector) const {
       return jets(selector, cmpMomByPt);
     }
 
     /// Get the jets, ordered by \f$ p_T \f$, with a cut on \f$ p_\perp \f$.
     ///
     /// @deprecated Use the version with a Cut argument
     /// @note Returns a copy rather than a reference, due to cuts and sorting
     ///
     /// This is a very common use-case, so is available as syntatic sugar for jets(Cuts::pT >= ptmin, cmpMomByPt).
     /// @todo The other sorted accessors should be removed in a cleanup.
     Jets jetsByPt(double ptmin) const {
       return jets(Cuts::pT >= ptmin, cmpMomByPt);
     }
 
     //@}
 
 
   protected:
 
     /// @brief Internal pure virtual method for getting jets in no guaranteed order.
     virtual Jets _jets() const = 0;
 
 
   public:
 
     /// Count the jets
     size_t size() const { return jets().size(); }
     /// Count the jets after a Cut is applied.
     size_t size(const Cut& c) const { return jets(c).size(); }
     /// Count the jets after a selection functor is applied.
     size_t size(const JetSelector& s) const { return jets(s).size(); }
 
     /// Is this jet finder empty?
     bool empty() const { return size() == 0; }
     /// Is this jet finder empty after a Cut is applied?
     bool empty(const Cut& c) const { return size(c) == 0; }
     /// Is this jet finder empty after a selection functor is applied?
     bool empty(const JetSelector& s) const { return size(s) == 0; }
 
     /// Clear the projection.
     virtual void reset() = 0;
 
     typedef Jet entity_type;
     typedef Jets collection_type;
 
     /// Template-usable interface common to FinalState.
     collection_type entities() const { return jets(); }
 
     // /// Do the calculation locally (no caching).
     // virtual void calc(const Particles& constituents, const Particles& tagparticles=Particles()) = 0;
 
 
   protected:
 
     /// Perform the projection on the Event.
     virtual void project(const Event& e) = 0;
 
     /// Compare projections.
     virtual int compare(const Projection& p) const = 0;
 
 
   protected:
 
     /// Flag to determine whether or not to exclude (some) muons from the would-be constituents.
     MuonsStrategy _useMuons;
 
     /// Flag to determine whether or not to exclude (some) invisible particles from the would-be constituents.
     InvisiblesStrategy _useInvisibles;
 
 
   };
 
 
+  /// Compatibility typedef, for equivalence with ParticleFinder
+  /// @todo Should we make this the canonical name? Would "require" a header filename change -> breakage or ugly.
+  using JetFinder = JetAlg;
+
+
 }
 
 #endif
diff --git a/include/Rivet/Projections/PartonicTops.hh b/include/Rivet/Projections/PartonicTops.hh
--- a/include/Rivet/Projections/PartonicTops.hh
+++ b/include/Rivet/Projections/PartonicTops.hh
@@ -1,107 +1,107 @@
 // -*- C++ -*-
 #ifndef RIVET_PartonicTops_HH
 #define RIVET_PartonicTops_HH
 
 #include "Rivet/Projections/ParticleFinder.hh"
 
 namespace Rivet {
 
 
   /// @brief Convenience finder of partonic top quarks
   ///
   /// @warning Requires there to be tops in the event record. A fiducial pseudo-top
   /// analysis approach is strongly recommended instead of this.
   class PartonicTops : public ParticleFinder {
   public:
 
 
     /// @brief Enum for categorising top quark decay modes
     ///
     /// More specifically, the decay mode of the W from the top. We presume top decay to a W and b quark.
     enum DecayMode { ELECTRON, MUON, TAU, E_MU, E_MU_TAU, HADRONIC, ALL };
 
 
     /// @name Constructors
     //@{
 
     /// Constructor optionally taking cuts object
     PartonicTops(const Cut& c=Cuts::OPEN)
       : ParticleFinder(c), _decaymode(ALL), _emu_from_prompt_tau(true), _include_hadronic_taus(false)
     {  }
 
     /// Constructor taking decay mode details (and an optional cuts object)
     PartonicTops(DecayMode decaymode, bool emu_from_prompt_tau=true, bool include_hadronic_taus=false, const Cut& c=Cuts::OPEN)
       : ParticleFinder(c), _decaymode(decaymode),
         _emu_from_prompt_tau(emu_from_prompt_tau), _include_hadronic_taus(include_hadronic_taus)
     {  }
 
     /// Constructor taking decay mode details (and an optional cuts object)
     PartonicTops(DecayMode decaymode, const Cut& c, bool emu_from_prompt_tau=true, bool include_hadronic_taus=false)
       : ParticleFinder(c), _decaymode(decaymode),
         _emu_from_prompt_tau(emu_from_prompt_tau), _include_hadronic_taus(include_hadronic_taus)
     {  }
 
 
     /// Clone on the heap.
     DEFAULT_RIVET_PROJ_CLONE(PartonicTops);
 
     //@}
 
 
     /// Access to the found partonic tops
     const Particles& tops() const { return _theParticles; }
 
 
     /// Clear the projection
     void clear() {
       _theParticles.clear();
     }
 
 
   protected:
 
     /// Apply the projection on the supplied event.
     void project(const Event& event) {
       // Find partonic tops
       _theParticles = filter_select(event.allParticles(_cuts), lastParticleWith(isTop));
       // Filtering by decay mode
       if (_decaymode != ALL) {
         const auto fn = [&](const Particle& t) {
           const Particles descendants = t.allDescendants();
-          const bool prompt_e = any(descendants, [&](const Particle& p){ return p.abspid() == PID::ELECTRON && p.isPrompt(_emu_from_prompt_tau); });
-          const bool prompt_mu = any(descendants, [&](const Particle& p){ return p.abspid() == PID::MUON && p.isPrompt(_emu_from_prompt_tau); });
+          const bool prompt_e = any(descendants, [&](const Particle& p){ return p.abspid() == PID::ELECTRON && p.isPrompt(_emu_from_prompt_tau) && !p.hasAncestor(PID::PHOTON); });
+          const bool prompt_mu = any(descendants, [&](const Particle& p){ return p.abspid() == PID::MUON && p.isPrompt(_emu_from_prompt_tau) && !p.hasAncestor(PID::PHOTON); });
           if (prompt_e && (_decaymode == ELECTRON || _decaymode == E_MU || _decaymode == E_MU_TAU)) return true;
           if (prompt_mu && (_decaymode == MUON || _decaymode == E_MU || _decaymode == E_MU_TAU)) return true;
           const bool prompt_tau = any(descendants, [&](const Particle& p){ return p.abspid() == PID::TAU && p.isPrompt(); });
           const bool prompt_hadronic_tau = any(descendants, [&](const Particle& p){ return p.abspid() == PID::TAU && p.isPrompt() && none(p.children(), isChargedLepton); });
           if (prompt_tau && (_decaymode == TAU || _decaymode == E_MU_TAU)) return (_include_hadronic_taus || !prompt_hadronic_tau);
           if (_decaymode == HADRONIC && (!prompt_e && !prompt_mu && (!prompt_tau || (_include_hadronic_taus && prompt_hadronic_tau)))) return true; //< logical hairiness...
           return false;
         };
         ifilter_select(_theParticles, fn);
       }
     }
 
 
     /// Compare projections.
     int compare(const Projection& p) const {
       const PartonicTops& other = dynamic_cast<const PartonicTops&>(p);
       return cmp(_cuts, other._cuts) || cmp(_decaymode, other._decaymode) ||
         cmp(_emu_from_prompt_tau, other._emu_from_prompt_tau) ||
         cmp(_include_hadronic_taus, other._include_hadronic_taus);
     }
 
 
   private:
 
     DecayMode _decaymode;
 
     bool _emu_from_prompt_tau, _include_hadronic_taus;
 
   };
 
 
 }
 
 
 #endif
diff --git a/include/Rivet/Projections/PromptFinalState.hh b/include/Rivet/Projections/PromptFinalState.hh
--- a/include/Rivet/Projections/PromptFinalState.hh
+++ b/include/Rivet/Projections/PromptFinalState.hh
@@ -1,66 +1,70 @@
 // -*- C++ -*-
 #ifndef RIVET_PromptFinalState_HH
 #define RIVET_PromptFinalState_HH
 
 #include "Rivet/Projections/FinalState.hh"
 
 namespace Rivet {
 
 
   /// @brief Find final state particles directly connected to the hard process.
   ///
   /// The definition of "prompt" used in Rivet is that from high-scale physics, i.e.
   /// particles directly connected to the hard process in an interaction, regardless
   /// of realistic reconstructibility of displaced vertices, etc. By construction
   /// hadrons cannot be considered prompt as they will be colour connected to other
   /// parts of the event through non-perturbative effects: this projection can
   /// return electrons, muons, photons, and exotic particles which do not have a
   /// hadron in their post-hadronization ancestor chain. Flags exist to choose
   /// whether intermediate tau or muon decays invalidate a particle's promptness.
   ///
   /// @todo Decide how to treat brem photons off prompt leptons -- are they also prompt? "Decay" does not change the lepton PID...
   class PromptFinalState : public FinalState {
   public:
 
     /// @name Constructors
     //@{
 
     // Constructor from a final state.
     PromptFinalState(const FinalState& fsp, bool accepttaudecays=false, bool acceptmudecays=false);
 
     /// Constructor from a Cut.
     PromptFinalState(const Cut& c, bool accepttaudecays=false, bool acceptmudecays=false);
 
     // /// Constructor from a Cut and optional FinalState.
     // PromptFinalState(const Cut& c, const FinalState& fsp=FinalState(), bool accepttaudecays, bool acceptmudecays);
 
     /// Clone on the heap.
     DEFAULT_RIVET_PROJ_CLONE(PromptFinalState);
 
     //@}
 
-    /// Accept particles from decays of prompt muons as themselves being prompt?
+    /// Accept leptons from decays of prompt muons as themselves being prompt?
     void acceptMuonDecays(bool acc=true) { _acceptMuDecays = acc; }
-    /// Accept particles from decays of prompt taus as themselves being prompt?
+    /// Accept leptons from decays of prompt taus as themselves being prompt?
     void acceptTauDecays(bool acc=true) { _acceptTauDecays = acc; }
 
 
   protected:
 
     /// Apply the projection on the supplied event.
     void project(const Event& e);
 
     /// Compare projections.
     int compare(const Projection& p) const;
 
 
   private:
 
     bool _acceptMuDecays, _acceptTauDecays;
 
   };
 
+
+  /// Alias with a more correct name
+  using DirectFinalState = PromptFinalState;
+
 }
 
 
 #endif
diff --git a/include/Rivet/Projections/SmearedJets.hh b/include/Rivet/Projections/SmearedJets.hh
--- a/include/Rivet/Projections/SmearedJets.hh
+++ b/include/Rivet/Projections/SmearedJets.hh
@@ -1,156 +1,168 @@
 // -*- C++ -*-
 #ifndef RIVET_SmearedJets_HH
 #define RIVET_SmearedJets_HH
 
 #include "Rivet/Jet.hh"
 #include "Rivet/Particle.hh"
 #include "Rivet/Projection.hh"
 #include "Rivet/Projections/JetAlg.hh"
 #include "Rivet/Tools/SmearingFunctions.hh"
 #include <functional>
 
 namespace Rivet {
 
 
+  // Recursive variadic template arg decoding
+  namespace {
+    template<typename T>
+    vector<JetEffSmearFn>& toEffSmearFns(vector<JetEffSmearFn>& v, const T& t) {
+      v.push_back(JetEffSmearFn(t));
+      return v;
+    }
+    template<typename T, typename... ARGS>
+    vector<JetEffSmearFn>& toEffSmearFns(vector<JetEffSmearFn>& v, const T& first, ARGS... args) {
+      v.push_back(JetEffSmearFn(first));
+      toEffSmearFns(v, args...);
+      return v;
+    }
+  }
+
+
+
   /// Wrapper projection for smearing {@link Jet}s with detector resolutions and efficiencies
-  /// @todo Chain constructors?
   class SmearedJets : public JetAlg {
   public:
 
     /// @name Constructors etc.
     //@{
 
     /// @brief Constructor with efficiency and smearing function args
     /// The jet reconstruction efficiency is mandatory; the smearing and tagging functions are optional
-    template <typename J2JFN>
     SmearedJets(const JetAlg& ja,
-                const J2JFN& jetSmearFn)
+                const JetSmearFn& jetSmearFn)
       : SmearedJets(ja, jetSmearFn, JET_BTAG_PERFECT, JET_CTAG_PERFECT, JET_EFF_ONE)
     {    }
 
 
     /// @brief Constructor with efficiency and smearing function args
     /// The jet reconstruction efficiency is mandatory; the smearing and tagging functions are optional
-    template <typename J2JFN, typename J2DFN>
     SmearedJets(const JetAlg& ja,
-                const J2JFN& jetSmearFn,
-                const J2DFN& bTagEffFn)
+                const JetSmearFn& jetSmearFn,
+                const JetEffFn& bTagEffFn)
       : SmearedJets(ja, jetSmearFn, bTagEffFn, JET_CTAG_PERFECT, JET_EFF_ONE)
     {    }
 
 
     /// @brief Constructor with efficiency and smearing function args
     /// The jet reconstruction efficiency is mandatory; the smearing and tagging functions are optional
-    template <typename J2JFN, typename J2DFNa, typename J2DFNb>
     SmearedJets(const JetAlg& ja,
-                const J2JFN& jetSmearFn,
-                const J2DFNa& bTagEffFn,
-                const J2DFNb& cTagEffFn)
+                const JetSmearFn& jetSmearFn,
+                const JetEffFn& bTagEffFn,
+                const JetEffFn& cTagEffFn)
       : SmearedJets(ja, jetSmearFn, bTagEffFn, cTagEffFn, JET_EFF_ONE)
     {    }
 
 
     /// @brief Constructor with efficiency and smearing function args
     /// The jet reconstruction efficiency is mandatory; the smearing and tagging functions are optional
-    template <typename J2JFN, typename J2DFNa, typename J2DFNb, typename J2DFNc>
     SmearedJets(const JetAlg& ja,
-                const J2JFN& jetSmearFn,
-                const J2DFNa& bTagEffFn,
-                const J2DFNb& cTagEffFn,
-                const J2DFNc& jetEffFn)
+                const JetSmearFn& jetSmearFn,
+                const JetEffFn& bTagEffFn,
+                const JetEffFn& cTagEffFn,
+                const JetEffFn& jetEffFn)
       : _jetEffFn(jetEffFn), _bTagEffFn(bTagEffFn), _cTagEffFn(cTagEffFn), _jetSmearFn(jetSmearFn)
     {
       setName("SmearedJets");
       addProjection(ja, "TruthJets");
     }
 
 
     /// Clone on the heap.
     DEFAULT_RIVET_PROJ_CLONE(SmearedJets);
 
     //@}
 
 
     /// Compare to another SmearedJets
     int compare(const Projection& p) const {
       const SmearedJets& other = dynamic_cast<const SmearedJets&>(p);
       if (get_address(_jetEffFn) == 0) return UNDEFINED;
       if (get_address(_bTagEffFn) == 0) return UNDEFINED;
       if (get_address(_cTagEffFn) == 0) return UNDEFINED;
       if (get_address(_jetSmearFn) == 0) return UNDEFINED;
       MSG_TRACE("Eff hashes = " << get_address(_jetEffFn) << "," << get_address(other._jetEffFn) << "; " <<
                 "smear hashes = " << get_address(_jetSmearFn) << "," << get_address(other._jetSmearFn) << "; " <<
                 "b-tag hashes = " << get_address(_bTagEffFn) << "," << get_address(other._bTagEffFn) << "; " <<
                 "c-tag hashes = " << get_address(_cTagEffFn) << "," << get_address(other._cTagEffFn));
       return
         mkPCmp(other, "TruthJets") ||
         cmp(get_address(_jetEffFn), get_address(other._jetEffFn)) ||
         cmp(get_address(_jetSmearFn), get_address(other._jetSmearFn)) ||
         cmp(get_address(_bTagEffFn), get_address(other._bTagEffFn)) ||
         cmp(get_address(_cTagEffFn), get_address(other._cTagEffFn));
     }
 
 
     /// Perform the jet finding & smearing calculation
     void project(const Event& e) {
       // Copying and filtering
       const Jets& truthjets = apply<JetAlg>(e, "TruthJets").jetsByPt();
       _recojets.clear(); _recojets.reserve(truthjets.size());
       for (const Jet& j : truthjets) {
         // Efficiency sampling
         const double jeff = _jetEffFn ? _jetEffFn(j) : 1;
         MSG_DEBUG("Efficiency of jet " << j.mom() << " = " << 100*jeff << "%");
         MSG_DEBUG("Efficiency of jet with mom=" << j.mom()/GeV << " GeV, "
                   << "pT=" << j.pT()/GeV << ", eta=" << j.eta() << " : " << 100*jeff << "%");
         if (jeff <= 0) continue; //< no need to roll expensive dice (and we deal with -ve probabilities, just in case)
         if (jeff < 1 && rand01() > jeff) continue; //< roll dice (and deal with >1 probabilities, just in case)
         // Kinematic smearing
         Jet sj = _jetSmearFn ? _jetSmearFn(j) : j;
         MSG_DEBUG("Jet smearing from " << j.mom() << " to " << sj.mom());
         // Re-add constituents & tags if (we assume accidentally) they were lost by the smearing function
         if (sj.particles().empty() && !j.particles().empty()) sj.particles() = j.particles();
         if (sj.tags().empty() && !j.tags().empty()) sj.tags() = j.tags();
         _recojets.push_back(sj);
       }
       // Apply tagging efficiencies, using smeared kinematics as input to the tag eff functions
       for (Jet& j : _recojets) {
         // Decide whether or not there should be a b-tag on this jet
         const double beff = _bTagEffFn ? _bTagEffFn(j) : j.bTagged();
         const bool btag = beff == 1 || (beff != 0 && rand01() < beff);
         // Remove b-tags if needed, and add a dummy one if needed
         if (!btag && j.bTagged()) j.tags().erase(std::remove_if(j.tags().begin(), j.tags().end(), hasBottom), j.tags().end());
         if (btag && !j.bTagged()) j.tags().push_back(Particle(PID::BQUARK, j.mom())); ///< @todo Or could use the/an actual clustered b-quark momentum?
         // Decide whether or not there should be a c-tag on this jet
         const double ceff = _cTagEffFn ? _cTagEffFn(j) : j.cTagged();
         const bool ctag = ceff == 1 || (ceff != 0 && rand01() < beff);
         // Remove c-tags if needed, and add a dummy one if needed
         if (!ctag && j.cTagged()) j.tags().erase(std::remove_if(j.tags().begin(), j.tags().end(), hasCharm), j.tags().end());
         if (ctag && !j.cTagged()) j.tags().push_back(Particle(PID::CQUARK, j.mom())); ///< @todo As above... ?
       }
     }
 
 
     /// Return the full jet list for the JetAlg methods to use
     Jets _jets() const { return _recojets; }
 
 
     /// Reset the projection. Smearing functions will be unchanged.
     void reset() { _recojets.clear(); }
 
 
   private:
 
     Jets _recojets;
 
     /// Stored efficiency functions
-    std::function<double(const Jet&)> _jetEffFn, _bTagEffFn, _cTagEffFn;
+    JetEffFn _jetEffFn, _bTagEffFn, _cTagEffFn;
 
     /// Stored smearing function
-    std::function<Jet(const Jet&)> _jetSmearFn;
+    JetSmearFn _jetSmearFn;
 
   };
 
 
 }
 
 #endif
diff --git a/include/Rivet/Projections/SmearedParticles.hh b/include/Rivet/Projections/SmearedParticles.hh
--- a/include/Rivet/Projections/SmearedParticles.hh
+++ b/include/Rivet/Projections/SmearedParticles.hh
@@ -1,97 +1,168 @@
 // -*- C++ -*-
 #ifndef RIVET_SmearedParticles_HH
 #define RIVET_SmearedParticles_HH
 
 #include "Rivet/Particle.hh"
 #include "Rivet/Projection.hh"
 #include "Rivet/Projections/ParticleFinder.hh"
 #include "Rivet/Tools/SmearingFunctions.hh"
-#include <functional>
 
 namespace Rivet {
 
 
+  // Recursive variadic template arg decoding
+  namespace {
+    template<typename T>
+    vector<ParticleEffSmearFn>& toEffSmearFns(vector<ParticleEffSmearFn>& v, const T& t) {
+      v.push_back(ParticleEffSmearFn(t));
+      return v;
+    }
+    template<typename T, typename... ARGS>
+    vector<ParticleEffSmearFn>& toEffSmearFns(vector<ParticleEffSmearFn>& v, const T& first, ARGS... args) {
+      v.push_back(ParticleEffSmearFn(first));
+      toEffSmearFns(v, args...);
+      return v;
+    }
+  }
+
+
+
   /// Wrapper projection for smearing {@link Jet}s with detector resolutions and efficiencies
   class SmearedParticles : public ParticleFinder {
   public:
 
     /// @name Constructors etc.
     //@{
 
-    /// @brief Constructor with efficiency and smearing function args
-    template <typename P2DFN>
+    /// @brief Constructor with const efficiency
     SmearedParticles(const ParticleFinder& pf,
-                     const P2DFN& effFn,
+                     double eff,
                      const Cut& c=Cuts::open())
-      : SmearedParticles(pf, effFn, PARTICLE_SMEAR_IDENTITY, c)
+      : SmearedParticles(pf, {eff}, c)
     {    }
 
+    /// @brief Constructor with an efficiency function
+    SmearedParticles(const ParticleFinder& pf,
+                     const ParticleEffFn& effFn,
+                     const Cut& c=Cuts::open())
+      : SmearedParticles(pf, {effFn}, c)
+    {    }
 
-    /// @brief Constructor with efficiency and smearing function args
-    template <typename P2DFN, typename P2PFN>
+    /// @brief Constructor with const efficiency followed by a smearing function
     SmearedParticles(const ParticleFinder& pf,
-                     const P2DFN& effFn, const P2PFN& smearFn,
+                     double eff, const ParticleSmearFn& smearFn,
+                     const Cut& c=Cuts::open())
+      : SmearedParticles(pf, {eff, smearFn}, c)
+    {    }
+
+    /// @brief Constructor with a smearing function followed by const efficiency
+    SmearedParticles(const ParticleFinder& pf,
+                     const ParticleSmearFn& smearFn, double eff,
+                     const Cut& c=Cuts::open())
+      : SmearedParticles(pf, {smearFn, eff}, c)
+    {    }
+
+    /// @brief Constructor with an efficiency function followed by a smearing function
+    SmearedParticles(const ParticleFinder& pf,
+                     const ParticleEffFn& effFn, const ParticleSmearFn& smearFn,
+                     const Cut& c=Cuts::open())
+      : SmearedParticles(pf, {effFn, smearFn}, c)
+    {    }
+
+    /// @brief Constructor with a smearing function followed by an efficiency function
+    SmearedParticles(const ParticleFinder& pf,
+                     const ParticleSmearFn& smearFn, const ParticleEffFn& effFn,
+                     const Cut& c=Cuts::open())
+      : SmearedParticles(pf, {smearFn, effFn}, c)
+    {    }
+
+    /// @brief Constructor with an ordered list of efficiency and/or smearing functions
+    SmearedParticles(const ParticleFinder& pf,
+                     const vector<ParticleEffSmearFn>& effSmearFns,
                      const Cut& c=Cuts::open())
       : ParticleFinder(c),
-        _effFn(effFn), _smearFn(smearFn)
+        _detFns(effSmearFns)
     {
       setName("SmearedParticles");
       addProjection(pf, "TruthParticles");
     }
 
+    /// @brief Constructor with an ordered list of efficiency and/or smearing functions
+    SmearedParticles(const ParticleFinder& pf,
+                     const initializer_list<ParticleEffSmearFn>& effSmearFns,
+                     const Cut& c=Cuts::open())
+      : SmearedParticles(pf, vector<ParticleEffSmearFn>{effSmearFns}, c)
+    {    }
+
+    /// @brief Constructor with a variadic ordered list of efficiency and smearing function args
+    /// @note The Cut must be provided *before* the eff/smearing functions
+    /// @todo Wouldn't it be nice if the Cut could also go *after* the parameter pack?
+    template<typename... ARGS>
+    SmearedParticles(const ParticleFinder& pf, const Cut& c, ARGS... effSmearFns)
+      : SmearedParticles(pf, toEffSmearFns(_detFns, effSmearFns...), c)
+    {    }
+
 
     /// Clone on the heap.
     DEFAULT_RIVET_PROJ_CLONE(SmearedParticles);
 
     //@}
 
 
     /// Compare to another SmearedParticles
     int compare(const Projection& p) const {
+      // Compare truth particles definitions
+      const int teq = mkPCmp(p, "TruthParticles");
+      if (teq != EQUIVALENT) return UNEQUAL;
+
+      // Compare lists of detector functions
       const SmearedParticles& other = dynamic_cast<const SmearedParticles&>(p);
-      if (get_address(_effFn) == 0) return UNDEFINED;
-      if (get_address(_smearFn) == 0) return UNDEFINED;
-      MSG_TRACE("Eff hashes = " << get_address(_effFn) << "," << get_address(other._effFn) << "; " <<
-                "smear hashes = " << get_address(_smearFn) << "," << get_address(other._smearFn));
-      return mkPCmp(other, "TruthParticles") ||
-        cmp(get_address(_effFn), get_address(other._effFn)) ||
-        cmp(get_address(_smearFn), get_address(other._smearFn));
+      if (_detFns.size() != other._detFns.size()) return UNEQUAL;
+      for (size_t i = 0; i < _detFns.size(); ++i) {
+        const int feq = _detFns[i].cmp(other._detFns[i]);
+        if (feq != EQUIVALENT) return UNEQUAL;
+      }
+
+      // If we got this far, we're equal
+      return EQUIVALENT;
     }
 
 
     /// Perform the particle finding & smearing calculation
     void project(const Event& e) {
       // Copying and filtering
       const Particles& truthparticles = apply<ParticleFinder>(e, "TruthParticles").particlesByPt();
       _theParticles.clear(); _theParticles.reserve(truthparticles.size());
       for (const Particle& p : truthparticles) {
-        const double peff = _effFn ? _effFn(p) : 1;
-        MSG_DEBUG("Efficiency of particle with pid=" << p.pid()
-                  << ", mom=" << p.mom()/GeV << " GeV, "
-                  << "pT=" << p.pT()/GeV << ", eta=" << p.eta()
-                  << " : " << 100*peff << "%");
-        if (peff <= 0) continue; //< no need to roll expensive dice (and we deal with -ve probabilities, just in case)
-        if (peff < 1 && rand01() > peff) continue; //< roll dice (and deal with >1 probabilities, just in case)
-        _theParticles.push_back(_smearFn ? _smearFn(p) : p); //< smearing
+        Particle pdet = p;
+        double peff = -1;
+        bool keep = true;
+        for (const ParticleEffSmearFn& fn : _detFns) {
+          tie(pdet, peff) = fn(pdet); // smear & eff
+          MSG_DEBUG("New det particle: pid=" << pdet.pid()
+                    << ", mom=" << pdet.mom()/GeV << " GeV, "
+                    << "pT=" << pdet.pT()/GeV << ", eta=" << pdet.eta()
+                    << " : eff=" << 100*peff << "%");
+          if (peff <= 0) { keep = false; break; } //< no need to roll expensive dice (and we deal with -ve probabilities, just in case)
+          if (peff < 1 && rand01() > peff)  { keep = false; break; } //< roll dice (and deal with >1 probabilities, just in case)
+        }
+        if (keep) _theParticles.push_back(pdet);
       }
     }
 
 
     /// Reset the projection. Smearing functions will be unchanged.
     void reset() { _theParticles.clear(); }
 
 
   private:
 
-    /// Stored efficiency function
-    std::function<double(const Particle&)> _effFn;
-
-    /// Stored smearing function
-    std::function<Particle(const Particle&)> _smearFn;
+    /// Stored efficiency & smearing functions
+    vector<ParticleEffSmearFn> _detFns;
 
   };
 
 
 }
 
 #endif
diff --git a/include/Rivet/Projections/TriggerCDFRun0Run1.hh b/include/Rivet/Projections/TriggerCDFRun0Run1.hh
--- a/include/Rivet/Projections/TriggerCDFRun0Run1.hh
+++ b/include/Rivet/Projections/TriggerCDFRun0Run1.hh
@@ -1,55 +1,55 @@
 // -*- C++ -*-
 #ifndef RIVET_TriggerCDFRun0Run1_HH
 #define RIVET_TriggerCDFRun0Run1_HH
 
 #include "Rivet/Projection.hh"
 #include "Rivet/Event.hh"
 #include "Rivet/Particle.hh"
 #include "Rivet/Projections/Beam.hh"
 
 namespace Rivet {
 
 
   /// @brief Access to the min bias triggers used by CDF in Run 0 and Run 1
   class TriggerCDFRun0Run1 : public Projection {
   public:
 
     /// Default constructor.
     TriggerCDFRun0Run1() {
       setName("TriggerCDFRun0Run1");
 
       addProjection(ChargedFinalState(-5.9, 5.9), "CFS");
     }
 
     /// Clone on the heap.
     DEFAULT_RIVET_PROJ_CLONE(TriggerCDFRun0Run1);
 
 
     /// The trigger result
     bool minBiasDecision() const {
       return _decision_mb;
     }
 
     /// Project on to the Event
     void project(const Event& evt);
 
 
   protected:
 
     /// Compare with other projections.
-    virtual int compare(const Projection& UNUSED(p)) const {
+    virtual int compare(const Projection&) const {
       return EQUIVALENT;
     }
 
 
   private:
 
     /// The min bias trigger decision
     bool _decision_mb;
 
   };
 
 
 }
 
 #endif
diff --git a/include/Rivet/Projections/TriggerCDFRun2.hh b/include/Rivet/Projections/TriggerCDFRun2.hh
--- a/include/Rivet/Projections/TriggerCDFRun2.hh
+++ b/include/Rivet/Projections/TriggerCDFRun2.hh
@@ -1,55 +1,55 @@
 // -*- C++ -*-
 #ifndef RIVET_TriggerCDFRun2_HH
 #define RIVET_TriggerCDFRun2_HH
 
 #include "Rivet/Projection.hh"
 #include "Rivet/Event.hh"
 #include "Rivet/Particle.hh"
 #include "Rivet/Projections/Beam.hh"
 
 namespace Rivet {
 
 
   /// @brief Access to the min bias triggers used by CDF in Run 0 and Run 1
   class TriggerCDFRun2 : public Projection {
   public:
 
     /// Default constructor.
     TriggerCDFRun2() {
       setName("TriggerCDFRun2");
 
       addProjection(ChargedFinalState(-4.7, 4.7), "CFS");
     }
 
     /// Clone on the heap.
     DEFAULT_RIVET_PROJ_CLONE(TriggerCDFRun2);
 
 
     /// The trigger result
     bool minBiasDecision() const {
       return _decision_mb;
     }
 
     /// Project on to the Event
     void project(const Event& evt);
 
 
   protected:
 
     /// Compare with other projections.
-    virtual int compare(const Projection& UNUSED(p)) const {
+    virtual int compare(const Projection&) const {
       return EQUIVALENT;
     }
 
 
   private:
 
     /// The min bias trigger decision
     bool _decision_mb;
 
   };
 
 
 }
 
 #endif
diff --git a/include/Rivet/Projections/TriggerUA5.hh b/include/Rivet/Projections/TriggerUA5.hh
--- a/include/Rivet/Projections/TriggerUA5.hh
+++ b/include/Rivet/Projections/TriggerUA5.hh
@@ -1,78 +1,78 @@
 // -*- C++ -*-
 #ifndef RIVET_TriggerUA5_HH
 #define RIVET_TriggerUA5_HH
 
 #include "Rivet/Projection.hh"
 #include "Rivet/Event.hh"
 #include "Rivet/Particle.hh"
 #include "Rivet/Projections/Beam.hh"
 
 namespace Rivet {
 
 
   /// @brief Access to the min bias triggers used by UA5
   class TriggerUA5 : public Projection {
   public:
 
     /// Default constructor.
     TriggerUA5();
 
     /// Clone on the heap.
     DEFAULT_RIVET_PROJ_CLONE(TriggerUA5);
 
 
     /// The trigger result for non-single diffractive (2 arm) trigger
     bool sdDecision() const {
       return _decision_sd;
     }
 
     /// The trigger result for non-single diffractive (2 arm) trigger
     bool nsdDecision() const {
       return _decision_nsd_1;
     }
 
     /// The trigger result for non-single diffractive (2 arm) trigger
     /// with special ">= 2" trigger for ppbar bg rejection
     bool nsd2Decision() const {
       return _decision_nsd_2;
     }
 
     /// The trigger result
     bool samebeams() const {
       return _samebeams;
     }
 
     /// Number of hits in <-,+> eta hodoscopes
     pair<unsigned int, unsigned int> numHits() {
       return make_pair(_n_plus, _n_minus);
     }
 
     /// Project on to the event
     void project(const Event& evt);
 
 
   protected:
 
     /// Compare with other projections.
-    virtual int compare(const Projection& UNUSED(p)) const {
+    virtual int compare(const Projection&) const {
       return EQUIVALENT;
     }
 
 
   private:
 
     /// The min bias trigger decisions
     bool _decision_sd, _decision_nsd_1, _decision_nsd_2;
 
     /// Is it a pp collision?
     bool _samebeams;
 
     /// Number of hits in hodoscopes
     unsigned int _n_plus, _n_minus;
 
   };
 
 
 }
 
 #endif
diff --git a/include/Rivet/Tools/BinnedHistogram.hh b/include/Rivet/Tools/BinnedHistogram.hh
--- a/include/Rivet/Tools/BinnedHistogram.hh
+++ b/include/Rivet/Tools/BinnedHistogram.hh
@@ -1,59 +1,82 @@
 // -*- C++ -*-
 #ifndef RIVET_BINNEDHISTOGRAM_HH
 #define RIVET_BINNEDHISTOGRAM_HH
+
 #include "Rivet/Config/RivetCommon.hh"
 #include "Rivet/Tools/RivetYODA.hh"
 
 namespace Rivet {
 
   class Analysis;
 
 
-  /**
-   * BinnedHistogram contains a series of histograms of the same quantity
-   * each in a different region of a second quantity.  For example, a
-   * BinnedHistogram may contain histograms of the cross section differential
-   * in \f$ p_T \f$ in different \f$ \eta \f$  regions.
-   **/
+  /// A set of booked Histo1DPtr, each in a bin of a second variable.
+  ///
+  /// BinnedHistogram contains a series of histograms of the same quantity
+  /// each in a different region of a second quantity.  For example, a
+  /// BinnedHistogram may contain histograms of the cross-section differential
+  /// in \f$ p_T \f$ in different \f$ \eta \f$  regions.
   template<typename T>
   class BinnedHistogram {
   public:
 
     /// Create a new empty BinnedHistogram
-    BinnedHistogram() {
-      return;
+    BinnedHistogram() {    }
+
+    /// Create a new BinnedHistogram with the given bin edges and contents
+    BinnedHistogram(const vector<T>& edges, const vector<Histo1DPtr>& histos) {
+      assert(edges.size() == histos.size()+1);
+      for (size_t i = 0; i < histos.size(); ++i)
+        addHistogram(edges[i], edges[i+1], histos[i]);
     }
 
-    ///  Add a histogram in the region between @a binMin and @a binMax to this
-    ///  set of BinnedHistograms.
-    const BinnedHistogram<T>& addHistogram(const T& binMin,
-                                           const T& binMax,
-                                           Histo1DPtr histo);
+    /// @todo Can we have an "emplace constructor", passing tuples of bookHisto1D args?
 
-    /// Fill the histogram that lies in the same region as @a bin with the value
-    /// @a val of weight @a weight.
-    Histo1DPtr fill(const T& bin,
-                             const T& val,
-                             double weight);
 
-    /// Scale histograms taking into account its "external" binwidth, i.e. by
-    /// scale/binWidth
+    ///  Add a histogram in the @c T bin between @a binMin and @a binMax
+    const BinnedHistogram<T>& add(const T& binMin, const T& binMax, Histo1DPtr histo);
+    /// Clumsier alias
+    /// @deprecated Prefer add()
+    const BinnedHistogram<T>& addHistogram(const T& binMin, const T& binMax, Histo1DPtr histo) {
+      return add(binMin, binMax, histo);
+    }
+
+
+    /// Fill the histogram in the same bin as @a binval with value @a val and weight @a weight
+    void fill(const T& binval, double val, double weight);
+
+
+    /// @brief Get the histogram in the same bin as @a binval (const)
+    /// @note Throws a RangeError if @a binval doesn't fall in a declared bin
+    const Histo1DPtr histo(const T& binval) const;
+    /// @brief Get the histogram in the same bin as @a binval
+    /// @note Throws a RangeError if @a binval doesn't fall in a declared bin
+    Histo1DPtr histo(const T& binval);
+
+    /// Get the contained histograms (const)
+    const vector<Histo1DPtr>& histos() const { return _histos; }
+    /// Get the contained histograms
+    vector<Histo1DPtr>& histos() { return _histos; }
+    /// @deprecated Prefer histos()
+    const vector<Histo1DPtr>& getHistograms() const { return _histos; }
+    /// @deprecated Prefer histos()
+    vector<Histo1DPtr>& getHistograms() { return _histos; }
+
+
+    /// Scale histograms taking into account its "external" binwidth, i.e. by scale/binWidth
+    /// @note The Analysis pointer is passed in order to call the analysis' scale(h) method: can we avoid that?
     void scale(const T& scale, Analysis* ana);
 
-    const vector<Histo1DPtr>& getHistograms() const { return _histos; }
-    vector<Histo1DPtr>& getHistograms() { return _histos; }
-
 
   private:
 
-    map<T, Histo1DPtr> _histosByUpperBound;
-    map<T, Histo1DPtr> _histosByLowerBound;
+    map<T, Histo1DPtr> _histosByUpperBound, _histosByLowerBound;
     vector<Histo1DPtr> _histos;
     map<Histo1DPtr, T> _binWidths;
 
   };
 
 
 }
 
 #endif
diff --git a/include/Rivet/Tools/CentralityBinner.hh b/include/Rivet/Tools/CentralityBinner.hh
--- a/include/Rivet/Tools/CentralityBinner.hh
+++ b/include/Rivet/Tools/CentralityBinner.hh
@@ -1,827 +1,827 @@
 // -*- C++ -*-
 #ifndef RIVET_CENTRALITYBINNER_HH
 #define RIVET_CENTRALITYBINNER_HH
 #include <tuple>
 #include "Rivet/Config/RivetCommon.hh"
 #include "Rivet/Tools/RivetYODA.hh"
 
 namespace Rivet {
 
 /**
    @brief Base class for projections giving the value of an
    observable sensitive to the centrality of a collision.
 
    @author Leif Lönnblad
 
    The centrality of a collision is not really an observable, but the
    concept is anyway often used in the heavy ion community as if it
    were just that.
 
    This base class can be used to provide a an estimator for the
    centrality by projecting down to a single number which then can be
    used by a CentralityBinner object to select a histogram to be
    filled with another observable depending on centrality percentile.
 
    The estimate() should be a non-negative number with large values
    indicating a higher overlap than small ones. A negative value
    indicates that the centrality estimate could not be calculated.
 
    In the best of all worlds the centrality estimator should be a
    proper hadron-level observable corrected for detector effects,
    however, this base class only returns the inverse of the
    impact_parameter member of the GenHeavyIon object in an GenEvent
    if present and zero otherwise.
 */
 class CentralityEstimator : public Projection {
 public:
 
   /// Constructor.
   CentralityEstimator(): _estimate(-1.0) {}
 
   /// Clone on the heap.
   DEFAULT_RIVET_PROJ_CLONE(CentralityEstimator);
 
 protected:
 
   /// Perform the projection on the Event
   void project(const Event& e) {
     _estimate = -1.0;
     const HepMC::HeavyIon * hi = e.genEvent()->heavy_ion();
     if ( hi ) _estimate = hi->impact_parameter() > 0.0?
                 1.0/hi->impact_parameter(): numeric_limits<double>::max();
   }
 
   /// Compare projections
   int compare(const Projection& p) const {
     return mkNamedPCmp(p, "CentEst");
   }
 
 
 public:
 
   /// The value of the centrality estimate.
   double estimate() const { return _estimate; }
 
 
 protected:
 
   /// The value of the centrality estimate.
   double _estimate;
 
 };
 
 
 /// This is a traits class describing how to handle object handles by
 /// CentralityBinner. The default implementation basically describes
 /// what to do with Histo1DPtr.
 template <typename T>
 struct CentralityBinTraits {
 
   /// Make a clone of the given object.
   static T clone(const T & t) {
     return T(t->newclone());
   }
 
   /// Add the contents of @a o to @a t.
   static void add(T & t, const T & o) {
     *t += *o;
   }
 
   /// Scale the contents of a given object.
   static void scale(T & t, double f) {
     t->scaleW(f);
   }
 
   /// Normalize the AnalysisObject to the sum of weights in a
   /// centrality bin.
   static void normalize(T & t, double sumw) {
     if ( t->sumW() > 0.0 ) t->normalize(t->sumW()/sumw);
   }
 
   /// Return the path of an AnalysisObject.
   static string path(T t) {
     return t->path();
   }
 
 };
 
 /// The sole purpose of the MergeDistance class is to provide a
 /// "distance" for a potential merging of two neighboring bins in a
 /// CentralityBinner.
 struct MergeDistance {
 
   /// This function should return a generalized distance between two
   /// adjecent centrality bins to be merged. CentralityBinner will
   /// always try to merge bins with the smallest distance. @a cestLo
   /// and @cestHi are the lower and upper edges of resulting bin. @a
   /// weight is the resulting sum of event weights in the bin. @a
   /// centLo and @a centHi are the lower and upper prcentile limits
   /// where the two bins currently resides. The two last arguments are
   /// the total number of events in the two bins and the total number
   /// of previous mergers repectively.
   static double dist(double cestLo, double cestHi, double weight,
                      double clo, double chi, double, double) {
     return (cestHi - cestLo)*weight/(cestHi*(chi - clo));
   }
-};    
+};
 
 
 /**
  * CentralityBinner contains a series of AnalysisObject of the same
  * quantity each in a different percentiles of another quantity.  For
  * example, a CentralityBinner may e.g. contain histograms of the
  * cross section differential in \f$ p_T \f$ in different centrality
  * regions for heavy ion collisions based on forward energy flow.
  **/
 template <typename T = Histo1DPtr, typename MDist = MergeDistance>
 class CentralityBinner: public ProjectionApplier {
   public:
 
   /// Create a new empty CentralityBinner. @a maxbins is the maximum
   /// number of bins used by the binner. Default is 1000, which is
   /// typically enough. @a wlim is the mximum allowed error allowed
   /// for the centrality limits before a warning is emitted.
   CentralityBinner(int maxbins = 200, double wlim = 0.02)
     : _currentCEst(-1.0), _maxBins(maxbins), _warnlimit(wlim), _weightsum(0.0) {
     _percentiles.insert(0.0);
     _percentiles.insert(1.0);
   }
 
   /// Set the centrality projection to be used. Note that this
   /// projection must have already been declared to Rivet.
   void setProjection(const CentralityEstimator & p, string pname) {
     declare(p, pname);
     _estimator = pname;
   }
 
   /// Return the class name.
   virtual std::string name() const {
     return "Rivet::CentralityBinner";
   }
 
   /// Add an AnalysisObject in the region between @a cmin and @a cmax to
   /// this set of CentralityBinners. The range represent
   /// percentiles and must be between 0 and 100. No overlaping bins
   /// are allowed.
 
   /// Note that (cmin=0, cmax=5), means the five percent MOST central
   /// events although the internal notation is reversed for
   /// convenience.
 
   /// Optionally supply corresponding limits @a cestmin and @a cestmax
   /// of the centrality extimator.
 
   void add(T t, double cmin, double cmax,
            double cestmin = -1.0, double cestmax = -1.0 ) {
     _percentiles.insert(max(1.0 - cmax/100.0, 0.0));
     _percentiles.insert(min(1.0 - cmin/100.0, 1.0));
     if ( _unfilled.empty() && _ready.empty() )
       _devnull = CentralityBinTraits<T>::clone(t);
     if ( cestmin < 0.0 )
       _unfilled.push_back(Bin(t, 1.0 - cmax/100.0, 1.0 - cmin/100.0));
-    else 
+    else
       _ready[t] = Bin(t, 1.0 - cmax/100.0, 1.0 - cmin/100.0, cestmin, cestmax);
   }
 
   /// Return one of the AnalysisObjects in the CentralityBinner for
   /// the given @a event. This version requires that a
   /// CentralityEstimator object has been assigned that can compute
   /// the value of the centrality estimator from the @a
   /// event. Optionally the @a weight of the event is given. This
   /// should be the weight that will be used to fill the
   /// AnalysisObject. If the centrality estimate is less than zero,
   /// the _devnull object will be returned.
   T select(const Event & event, double weight = 1.0) {
     return select(applyProjection<CentralityEstimator>
 		  (event, _estimator).estimate(), weight);
   }
 
   /// Return one of the AnalysisObjecsts in the Setup the
   /// CentralityBinner depending on the value of the centrality
   /// estimator, @a cest. Optionally the @a weight of the event is
   /// given. This should be the weight that will be used to fill the
   /// AnalysisObject. If the centrality estimate is less than zero,
   /// the _devnull object will be returned.
   T select(double cest, double weight = 1.0);
 
   /// At the end of the run, calculate the percentiles and fill the
   /// AnalysisObjectss provided with the add() function. This is
   /// typically called from the finalize method in an Analysis, but
   /// can also be called earlier in which case the the select
   /// functions can be continued to run as before with the edges
   /// between the centrality regions now fixed.
   void finalize();
 
   /// Normalize each AnalysisObjects to the sum of event weights in the
   /// corresponding centrality bin.
   void normalizePerEvent() {
     for ( auto & b : _ready ) b.second.normalizePerEvent();
   }
 
   /// Return a map bin edges of the centrality extimator indexed by
   /// the corresponing percentile.
   map<double,double> edges() const {
     map<double,double> ret;
     for ( auto & b : _ready ) {
       ret[1.0 - b.second._centLo] = b.second._cestLo;
       ret[1.0 - b.second._centHi] = b.second._cestHi;
     }
     return ret;
   }
 
   /// Return the current AnalysisObject from the latest call to select().
   const T & current() const {
     return _currenT;
   }
 
   /// Return the value of the centrality estimator set in the latest
   /// call to select().
   double estimator() const {
     return _currentCEst;
   }
 
   vector<T> allObjects() {
     vector<T> ret;
     for ( auto & fb : _flexiBins ) ret.push_back(fb._t);
     if ( !ret.empty() ) return ret;
     for ( auto b : _ready ) ret.push_back(b.second._t);
     return ret;
   }
 
 private:
 
   /// A flexible bin struct to be used to store temporary AnalysisObjects.
   struct FlexiBin {
 
     /// Construct with an initial centrality estimate and an event
     /// weight.
     FlexiBin(T & t, double cest = 0.0, double weight = 0.0)
       : _t(t), _cestLo(cest), _cestHi(cest), _weightsum(weight), _n(1), _m(0) {}
 
     /// Construct a temporary FlexiBin for finding a bin in a set.
     FlexiBin(double cest)
       : _cestLo(cest), _cestHi(cest), _weightsum(0.0), _n(0), _m(0) {}
 
-    /// Merge in the contents of another FlexiBin into this. 
+    /// Merge in the contents of another FlexiBin into this.
     void merge(const FlexiBin & fb) {
       _cestLo = min(_cestLo, fb._cestLo);
       _cestHi = max(_cestHi, fb._cestHi);
       _weightsum += fb._weightsum;
       CentralityBinTraits<T>::add(_t, fb._t);
       _n += fb._n;
       _m += fb._m + 1;
     }
 
     /// Comparisons for containers.
     bool operator< (const FlexiBin & fb) const {
       return _cestLo < fb._cestLo;
     }
 
     /// Return true if the given centrality estimate is in the range
     /// of this bin.
     bool inRange(double cest) const {
       return cest == _cestLo || ( _cestLo < cest && cest < _cestHi );
     }
 
     /// The associated AnalysisObject.
     T _t;
 
     /// Current lower and upper edge of the centrality estimator for
     /// the fills in the associated AnalysiObject.
     double _cestLo, _cestHi;
 
     /// The sum of weights for all events entering the associated
     /// AnalysisObject.
     mutable double _weightsum;
 
     /// The number of times this bin has been selected.
     mutable int _n;
 
     /// The number of times this bin has been merged.
     mutable int _m;
 
   };
 
   struct Bin {
 
     /// Construct a completely empty bin.
     Bin()
       : _centLo(-1.0), _centHi(-1.0), _cestLo(-1.0), _cestHi(-1.0),
 	_weightsum(0.0), _underflow(0.0), _overflow(0.0),
         _ambiguous(0), _ambweight(0.0) {}
 
     /// Constructor taking an AnalysisObject and centrality interval
     /// as argument. Optionally the interval in the estimator can be
     /// given, in which case this bin is considered to be
     /// "final".
     Bin(T t, double centLo, double centHi,
             double cestLo = -1.0, double cestHi = -1.0)
       : _t(t), _centLo(centLo), _centHi(centHi),
         _cestLo(cestLo), _cestHi(cestHi),
 	_weightsum(0.0), _underflow(0.0), _overflow(0.0),
         _ambiguous(0.0), _ambweight(0.0) {}
 
     /// Return true if the given centrality estimate is in the range
     /// of this AnalysisObject.
     bool inRange(double cest) const {
       return _cestLo >= 0 && _cestLo <= cest &&
         ( _cestHi < 0.0 || cest <= _cestHi );
     }
 
     /// Normalise the AnalysisObject to the tital cross section.
     void normalizePerEvent() {
       CentralityBinTraits<T>::normalize(_t, _weightsum);
     }
 
     /// The AnalysisObject.
     T _t;
 
     /// The range in centrality.
     double _centLo, _centHi;
 
     /// The corresponding range in the centrality estimator.
     double _cestLo, _cestHi;
 
     /// The sum of event weights for this bin;
     double _weightsum;
 
     /// The weight in a final AnalysisObject that contains events
     /// below the centrality limit.
     double _underflow;
 
     /// The weight in a final AnalysisObject that contain events above
     /// the centrality limit.
     double _overflow;
 
     /// Number of ambiguous events in this bin.
     double _ambiguous;
 
     /// Sum of abmiguous weights.
     double _ambweight;
 
   };
 
 protected:
 
   /// Convenient typedefs.
   typedef set<FlexiBin> FlexiBinSet;
-  
+
   /// Find a bin corresponding to a given value of the centrality
   /// estimator.
   typename FlexiBinSet::iterator _findBin(double cest) {
     if ( _flexiBins.empty() ) return _flexiBins.end();
     auto it = _flexiBins.lower_bound(FlexiBin(cest));
     if ( it->_cestLo == cest ) return it;
     if ( it != _flexiBins.begin() ) --it;
     if ( it->_cestLo < cest && cest < it->_cestHi ) return it;
     return _flexiBins.end();
   }
 
   /// The name of the CentralityEstimator projection to be used.
   string _estimator;
 
   /// The current temporary AnalysisObject selected for the centrality
   /// estimator calculated from the event presented in setup().
   T _currenT;
 
   /// The current value of the centrality estimator.
   double _currentCEst;
 
   /// The oversampling of centrality bins. For each requested
   /// centrality bin this number of dynamic bins will be used.
   int _maxBins;
 
   /// If the fraction of events in a bin that comes from adjecent
   /// centrality bins exceeds this, emit a warning.
   double _warnlimit;
 
   /// The unfilled AnalysisObjectss where the esimator edges has not yet
   /// been determined.
   vector<Bin> _unfilled;
 
   /// The dynamic bins for ranges of centrality estimators.
   FlexiBinSet _flexiBins;
 
   /// The sum of all event weights so far.
   double _weightsum;
 
   /// The requested percentile limits.
   set<double> _percentiles;
-  
+
   /// The filled AnalysisObjects where the estimator edges has been determined.
   map<T, Bin> _ready;
 
   /// A special AnalysisObject which will be filled if the centrality
   /// estimate is out of range (negative).
   T _devnull;
 
 public:
 
   /// Print out the _flexiBins to cerr.
   void debug();
   void fulldebug();
 
 };
 
 
 /// Traits specialization for Profile histograms.
 template <>
 struct CentralityBinTraits<Profile1DPtr> {
 
   typedef Profile1DPtr T;
 
   /// Make a clone of the given object.
   static T clone(const T & t) {
     return Profile1DPtr(t->newclone());
   }
 
   /// Add the contents of @a o to @a t.
   static void add(T & t, const T & o) {
     *t += *o;
   }
 
   /// Scale the contents of a given object.
   static void scale(T & t, double f) {
     t->scaleW(f);
   }
 
   static void normalize(T & t, double sumw) {}
 
   /// Return the path of an AnalysisObject.
   static string path(T t) {
     return t->path();
   }
 
 };
 
 
 /// Traits specialization for Profile histograms.
 template <>
 struct CentralityBinTraits<Profile2DPtr> {
 
   typedef Profile2DPtr T;
 
   /// Make a clone of the given object.
   static T clone(const T & t) {
     return Profile2DPtr(t->newclone());
   }
 
   /// Add the contents of @a o to @a t.
   static void add(T & t, const T & o) {
     *t += *o;
   }
 
   /// Scale the contents of a given object.
   static void scale(T & t, double f) {
     t->scaleW(f);
   }
 
   static void normalize(T & t, double sumw) {}
 
   /// Return the name of an AnalysisObject.
   static string path(T t) {
     return t->path();
   }
 
 };
 
 template <typename T>
 struct CentralityBinTraits< vector<T> > {
 
   /// Make a clone of the given object.
   static vector<T> clone(const vector<T> & tv) {
     vector<T> rtv;
     for ( auto t : tv ) rtv.push_back(CentralityBinTraits<T>::clone(t));
     return rtv;
   }
 
   /// Add the contents of @a o to @a t.
   static void add(vector<T> & tv, const vector<T> & ov) {
     for ( int i = 0, N = tv.size(); i < N; ++i )
       CentralityBinTraits::add(tv[i], ov[i]);
   }
 
   /// Scale the contents of a given object.
   static void scale(vector<T> & tv, double f) {
     for ( auto t : tv ) CentralityBinTraits<T>::scale(t, f);
   }
 
   static void normalize(vector<T> & tv, double sumw) {
     for ( auto t : tv ) CentralityBinTraits<T>::normalize(t, sumw);
   }
 
   /// Return the path of an AnalysisObject.
   static string path(const vector<T> & tv) {
     string ret = "(vector:";
     for ( auto t : tv ) {
       ret += " ";
       ret += CentralityBinTraits<T>::path(t);
     }
     ret += ")";
     return ret;
   }
 
 };
 
 template <size_t I, typename... Types>
 struct TupleCentralityBinTraitsHelper {
 
   typedef tuple<Types...> Tuple;
   typedef typename tuple_element<I-1,Tuple>::type T;
 
   static void clone(Tuple & ret, const Tuple & tup) {
     get<I-1>(ret) = CentralityBinTraits<T>::clone(get<I-1>(tup));
     TupleCentralityBinTraitsHelper<I-1,Types...>::clone(ret, tup);
   }
 
   static void add(Tuple & tup, const Tuple & otup) {
     CentralityBinTraits<T>::add(get<I-1>(tup),get<I-1>(otup));
     TupleCentralityBinTraitsHelper<I-1,Types...>::add(tup, otup);
   }
 
   static void scale(Tuple & tup, double f) {
     CentralityBinTraits<T>::scale(get<I-1>(tup), f);
     TupleCentralityBinTraitsHelper<I-1,Types...>::scale(tup, f);
   }
 
   static void normalize(Tuple & tup, double sumw) {
     CentralityBinTraits<T>::normalize(get<I-1>(tup), sumw);
     TupleCentralityBinTraitsHelper<I-1,Types...>::normalize(tup, sumw);
   }
 
   static string path(const Tuple & tup) {
     return " " + CentralityBinTraits<T>::path(get<I-1>(tup))
       + TupleCentralityBinTraitsHelper<I-1,Types...>::path(tup);
   }
 };
 
 template <typename... Types>
 struct TupleCentralityBinTraitsHelper<0,Types...> {
 
   typedef tuple<Types...> Tuple;
 
   static void clone(Tuple &, const Tuple &) {}
   static void add(Tuple & tup, const Tuple & otup) {}
   static void scale(Tuple & tup, double f) {}
   static void normalize(Tuple & tup, double sumw) {}
   static string path(const Tuple & tup) {return "";}
 
 };
 
 template <typename... Types>
 struct CentralityBinTraits< tuple<Types...> > {
 
   typedef tuple<Types...> Tuple;
   static const size_t N = tuple_size<Tuple>::value;
 
   /// Make a clone of the given object.
   static Tuple clone(const Tuple & tup) {
     Tuple ret;
     TupleCentralityBinTraitsHelper<N,Types...>::clone(ret, tup);
     return ret;
   }
 
   /// Add the contents of @a o to @a t.
   static void add(Tuple & tup, const Tuple & otup) {
-    TupleCentralityBinTraitsHelper<N,Types...>::add(tup, otup);    
+    TupleCentralityBinTraitsHelper<N,Types...>::add(tup, otup);
   }
 
   /// Scale the contents of a given object.
   static void scale(Tuple & tup, double f) {
-    TupleCentralityBinTraitsHelper<N,Types...>::scale(tup, f);    
+    TupleCentralityBinTraitsHelper<N,Types...>::scale(tup, f);
   }
 
   static void normalize(Tuple & tup, double sumw) {
-    TupleCentralityBinTraitsHelper<N,Types...>::normalize(tup, sumw);    
+    TupleCentralityBinTraitsHelper<N,Types...>::normalize(tup, sumw);
   }
 
   /// Return the path of an AnalysisObject.
   static string path(const Tuple & tup) {
     string ret = "(tuple:";
     ret += TupleCentralityBinTraitsHelper<N,Types...>::path(tup);
     ret += ")";
     return ret;
   }
 
 };
 
 template <typename T, typename MDist>
 T CentralityBinner<T,MDist>::select(double cest, double weight) {
   _currenT = _devnull;
   _currentCEst = cest;
   _weightsum += weight;
-  
+
   // If estimator is negative, something has gone wrong.
   if ( _currentCEst < 0.0 ) return _currenT;
 
   // If we already have finalized the limits on the centrality
   // estimator, we just add the weights to their bins and return the
   // corresponding AnalysisObject.
   if ( _unfilled.empty() ) {
     for ( auto & b : _ready ) if ( b.second.inRange(_currentCEst) ) {
 	b.second._weightsum += weight;
 	return b.second._t;
       }
     return _currenT;
   }
 
   auto it = _findBin(cest);
   if ( it == _flexiBins.end() ) {
     _currenT = CentralityBinTraits<T>::clone(_unfilled.begin()->_t);
     it = _flexiBins.insert(FlexiBin(_currenT, _currentCEst, weight)).first;
   } else {
     it->_weightsum += weight;
     ++(it->_n);
     _currenT = it->_t;
   }
 
-  if ( _flexiBins.size() <= _maxBins ) return _currenT;
+  if ( (int)_flexiBins.size() <= _maxBins ) return _currenT;
 
 
   set<double>::iterator citn = _percentiles.begin();
   set<double>::iterator cit0 = citn++;
   auto selectit = _flexiBins.end();
   double mindist = -1.0;
   double acc = 0.0;
   auto next = _flexiBins.begin();
   auto prev = next++;
   for ( ; next != _flexiBins.end(); prev = next++ ) {
     acc += prev->_weightsum/_weightsum;
     if ( acc > *citn ) {
       cit0 = citn++;
       continue;
     }
     if ( acc + next->_weightsum/_weightsum > *citn ) continue;
     double dist = MDist::dist(prev->_cestLo, next->_cestHi,
                               next->_weightsum + prev->_weightsum,
                               *cit0, *citn, next->_n + prev->_n,
                               next->_m + prev->_m);
     if ( mindist < 0.0 || dist < mindist ) {
       selectit = prev;
       mindist = dist;
     }
   }
 
   if ( selectit == _flexiBins.end() ) return _currenT;
   auto mergeit = selectit++;
   FlexiBin merged = *mergeit;
   merged.merge(*selectit);
   if ( merged.inRange(cest) || selectit->inRange(cest) )
     _currenT = merged._t;
   _flexiBins.erase(mergeit);
   _flexiBins.erase(selectit);
   _flexiBins.insert(merged);
 
   return _currenT;
 
 }
 
 
 template <typename T, typename MDist>
 void CentralityBinner<T,MDist>::finalize() {
 
   // Take the contents of the dynamical binning and fill the original
   // AnalysisObjects.
 
   double clo = 0.0;
   for ( const FlexiBin & fb : _flexiBins ) {
     double chi = min(clo + fb._weightsum/_weightsum, 1.0);
     for ( Bin & bin : _unfilled ) {
       double olo = bin._centLo;
       double ohi = bin._centHi;
       if ( clo > ohi || chi <= olo ) continue;
       // If we only have partial overlap we need to scale
       double lo = max(olo, clo);
       double hi = min(ohi, chi);
       T t = CentralityBinTraits<T>::clone(fb._t);
       double frac = (hi - lo)/(chi - clo);
       CentralityBinTraits<T>::scale(t, frac);
       CentralityBinTraits<T>::add(bin._t, t);
       bin._weightsum += fb._weightsum*frac;
       if ( clo <= olo ) bin._cestLo = fb._cestLo +
                           (fb._cestHi - fb._cestLo)*(olo - clo)/(chi - clo);
       if ( clo < olo ) {
         bin._underflow = clo;
         bin._ambiguous += fb._n*frac;
         bin._ambweight += fb._weightsum*frac*(1.0 - frac);
       }
       if ( chi > ohi ) {
         bin._cestHi =
           fb._cestLo + (fb._cestHi - fb._cestLo)*(ohi - clo)/(chi - clo);
 	bin._overflow = chi;
         bin._ambiguous += fb._n*frac;
         bin._ambweight += fb._weightsum*frac*(1.0 - frac);
       }
     }
     clo = chi;
   }
   _flexiBins.clear();
   for ( Bin & bin : _unfilled ) {
     if ( bin._overflow == 0.0 ) bin._overflow = 1.0;
     _ready[bin._t] = bin;
     if ( bin._ambweight/bin._weightsum >_warnlimit )
       MSG_WARNING("Analysis object \"" << CentralityBinTraits<T>::path(bin._t)
                   << "\", contains events with centralities between "
 		  << bin._underflow*100.0
 		  << " and " << bin._overflow*100.0 << "% ("
                   << int(bin._ambiguous + 0.5)
                   << " ambiguous events with effectively "
                   << 100.0*bin._ambweight/bin._weightsum
                   << "% of the weights)."
 		  << "Consider increasing the number of bins.");
 
   }
   _unfilled.clear();
 
 }
 
 template <typename T, typename MDist>
 void CentralityBinner<T,MDist>::fulldebug() {
   cerr <<  endl;
   double acc = 0.0;
   set<double>::iterator citn = _percentiles.begin();
   set<double>::iterator cit0 = citn++;
   int i = 0;
   for ( auto it = _flexiBins.begin(); it != _flexiBins.end(); ) {
     ++i;
     auto curr = it++;
     double w = curr->_weightsum/_weightsum;
     acc += w;
     if ( curr == _flexiBins.begin() || it == _flexiBins.end() || acc > *citn )
       cerr << "*";
     else
       cerr << " ";
     if ( acc > *citn ) cit0 = citn++;
     cerr << setw(6) << i
          << setw(12) << acc - w
 	 << setw(12) << acc
 	 << setw(8) << curr->_n
 	 << setw(8) << curr->_m
 	 << setw(12) << curr->_cestLo
-	 << setw(12) << curr->_cestHi << endl; 
+	 << setw(12) << curr->_cestHi << endl;
   }
   cerr << "Number of sampler bins: " << _flexiBins.size() << endl;
 }
 
 template <typename T, typename MDist>
 void CentralityBinner<T,MDist>::debug() {
   cerr <<  endl;
   double acc = 0.0;
   int i = 0;
   set<double>::iterator citn = _percentiles.begin();
   set<double>::iterator cit0 = citn++;
   for ( auto it = _flexiBins.begin(); it != _flexiBins.end(); ) {
     auto curr = it++;
-    ++i; 
+    ++i;
     double w = curr->_weightsum/_weightsum;
     acc += w;
     if ( curr == _flexiBins.begin() || it == _flexiBins.end() || acc > *citn ) {
       if ( acc > *citn ) cit0 = citn++;
       cerr << setw(6) << i
            << setw(12) << acc - w
 	   << setw(12) << acc
 	   << setw(8) << curr->_n
 	   << setw(8) << curr->_m
 	   << setw(12) << curr->_cestLo
 	   << setw(12) << curr->_cestHi << endl;
-      
+
     }
   }
   cerr << "Number of sampler bins: " << _flexiBins.size() << endl;
 }
 
 /// Example of CentralityEstimator projection that the generated
 /// centrality as given in the GenHeavyIon object in HepMC3.
 class GeneratedCentrality: public CentralityEstimator {
 
 public:
 
   /// Constructor.
   GeneratedCentrality() {}
 
     /// Clone on the heap.
     DEFAULT_RIVET_PROJ_CLONE(GeneratedCentrality);
 
 protected:
 
   /// Perform the projection on the Event
   void project(const Event& e) {
     _estimate = -1.0;
 #if HEPMC_VERSION_CODE >= 3000000
     const HepMC::HeavyIon * hi = e.genEvent()->heavy_ion();
     if ( hi ) _estimate = 100.0 - hi->centrality; // @TODO We don't really know how to interpret this number!
 #endif
   }
-  
+
   /// Compare projections
   int compare(const Projection& p) const {
     return mkNamedPCmp(p, "GeneratedCentrality");
   }
 
 };
-    
+
 
 
 }
 
 #endif
diff --git a/include/Rivet/Tools/Cmp.fhh b/include/Rivet/Tools/Cmp.fhh
--- a/include/Rivet/Tools/Cmp.fhh
+++ b/include/Rivet/Tools/Cmp.fhh
@@ -1,27 +1,30 @@
 // -*- C++ -*-
 #ifndef RIVET_Cmp_FHH
 #define RIVET_Cmp_FHH
 
 namespace Rivet {
 
 
   // Forward-declare the Cmp template class
   template <typename T>
   class Cmp;
 
 
   /// Enumerate the possible states of a Cmp object.
   enum CmpState {
-    UNDEFINED = -2,  ///< Undefined state.
-    ASC = -1,    ///< The two corresponding objects are in ascending order.
-    ORDERED = -1,    ///< The two corresponding objects are ordered.
-    EQUIVALENT = 0,  ///< The two corresponding objects are equivalent.
-    DESC = 1,    ///< The two corresponding objects are in descending order.
-    UNORDERED = 1,    ///< The two corresponding objects are anti-ordered.
-    ANTIORDERED = 1    ///< The two corresponding objects are anti-ordered.
+    UNDEFINED = -2,   ///< Undefined state.
+    ASC = -1,         ///< The two objects are ordered (in ascending order).
+    ORDERED = -1,     ///< The two objects are ordered (in ascending order).
+    EQUAL = 0,        ///< The two objects are equivalent.
+    EQUIVALENT = 0,   ///< The two objects are equivalent.
+    DESC = 1,         ///< The two objects are anti-ordered (in descending order).
+    ANTIORDERED = 1,  ///< The two objects are anti-ordered (in descending order).
+    UNORDERED = 1,    ///< The two objects are anti-ordered (in descending order). // DEPRECATED!
+    UNEQUAL = 2,      ///< The two objects are unequal, without ordering implications.
+    INEQUIVALENT = 2, ///< The two objects are unequal, without ordering implications.
   };
 
 
 }
 
 #endif
diff --git a/include/Rivet/Tools/Cutflow.hh b/include/Rivet/Tools/Cutflow.hh
--- a/include/Rivet/Tools/Cutflow.hh
+++ b/include/Rivet/Tools/Cutflow.hh
@@ -1,210 +1,210 @@
 #ifndef RIVET_Cutflow_HH
 #define RIVET_Cutflow_HH
 
 #include "Rivet/Tools/Utils.hh"
 
 namespace Rivet {
 
 
   /// A tracker of numbers & fractions of events passing sequential cuts
   struct Cutflow {
 
     /// @brief Default constructor
     ///
     /// Does nothing! Just to allow storage in STL containers and use as a member variable without using the init list
     Cutflow() {}
 
     /// Proper constructor
     Cutflow(const string& cfname, const vector<string>& cutnames)
       : name(cfname), ncuts(cutnames.size()), cuts(cutnames), counts(ncuts+1, 0)
     {  }
 
     /// @brief Fill the pre-cut counter
     void fillinit(double weight=1.) {
       counts[0] += weight;
     }
 
-    /// @brief Fill the @a {icut}'th post-cut counter
+    /// @brief Fill the @a {icut}'th post-cut counter, starting at icut=1 for first cut
     ///
     /// @note Returns the cut result to allow 'side-effect' cut-flow filling in an if-statement
-    bool fill(size_t icut, bool cutresult, double weight=1.) {
-      if (cutresult) counts[icut+1] += weight;
+    bool fill(size_t icut, bool cutresult=true, double weight=1.) {
+      if (cutresult) counts[icut] += weight;
       return cutresult;
     }
 
     /// @brief Fill all cut-state counters from an Ncut-element results vector
     ///
     /// This function is to be used to fill all of an event's pre- and post-cut
     /// state counters at once, including the incoming event counter. It must not be
     /// mixed with calls to the @c fill(size_t, bool) and @c fillinit() methods,
     /// or double-counting will occur.
     ///
     /// @note Returns the overall cut result to allow 'side-effect' cut-flow filling in an if-statement
     bool fill(const vector<bool>& cutresults, double weight=1.) {
       if (cutresults.size() != ncuts)
         throw RangeError("Number of filled cut results needs to match the Cutflow construction");
       counts[0] += 1;
       for (size_t i = 0; i < ncuts; ++i) {
         if (cutresults[i]) counts[i+1] += weight; else break;
       }
       return all(cutresults);
     }
 
     /// @todo Add a fillnext(), keeping track of current ifill
 
     /// @todo Add a fillhead() (or vector fillnext()?)
 
     /// @brief Fill the N trailing post-cut counters, when supplied with an N-element results vector
     ///
     /// The @a cutresults vector represents the boolean results of the last N cuts. This function
     /// allows mixing of cut-flow filling with higher-level analyze() function escapes such as
     /// the vetoEvent directive. The initial state (state 0) is not incremented.
     ///
     /// @note Returns the overall cut result to allow 'side-effect' cut-flow filling in an if-statement
     bool filltail(const vector<bool>& cutresults, double weight=1.) {
       if (cutresults.size() > ncuts)
         throw RangeError("Number of filled cut results needs to match the Cutflow construction");
       const size_t offset = counts.size() - cutresults.size();
       for (size_t i = 0; i < cutresults.size(); ++i) {
         if (cutresults[i]) counts[offset+i] += weight; else break;
       }
       return all(cutresults);
     }
 
     /// Scale the cutflow weights by the given factor
     void scale(double factor) {
       for (double& x : counts) x *= factor;
     }
 
     /// Create a string representation
     string str() const {
       stringstream ss;
       ss << fixed << setprecision(1) << counts[0];
       const size_t count0len = ss.str().length();
       ss.str("");
       ss << name << " cut-flow:";
       size_t maxnamelen = 0;
       for (const string& t : cuts)
         maxnamelen = max(t.length(), maxnamelen);
       for (size_t i = 0; i <= ncuts; ++i) {
         const int pcttot = (counts[0] == 0) ? -1 : round(100*counts[i]/double(counts[0]));
         const int pctinc = (i == 0 || counts[i-1] == 0) ? -1 : round(100*counts[i]/double(counts[i-1]));
         stringstream ss2;
         ss2 << fixed << setprecision(1) << counts[i];
         const string countstr = ss2.str(); ss2.str("");
         ss2 << fixed << setprecision(2) << pcttot << "%";
         const string pcttotstr = ss2.str(); ss2.str("");
         ss2 << fixed << setprecision(2) << pctinc << "%";
         const string pctincstr = ss2.str();
         ss << "\n"
            << setw(maxnamelen+5) << left << (i == 0 ? "" : "Pass "+cuts[i-1]) << "   "
            << setw(count0len) << right << countstr << "    "
            << setw(4) << right << (pcttot < 0 ? "- " : pcttotstr) << "    "
            << setw(4) << right << (pctinc < 0 ? "- " : pctincstr);
       }
       return ss.str();
     }
 
     /// Print string representation to a stream
     void print(ostream& os) const {
       os << str() << flush;
     }
 
     string name;
     size_t ncuts;
     vector<string> cuts;
     vector<double> counts;
 
   };
 
 
   /// Print a Cutflow to a stream
   inline ostream& operator << (ostream& os, const Cutflow& cf) {
     return os << cf.str();
   }
 
 
 
   /// A container for several Cutflow objects, with some convenient batch access
   struct Cutflows {
 
     /// Do-nothing default constructor
     Cutflows() {  }
 
     /// Populating constructor
     Cutflows(const vector<Cutflow>& cutflows) : cfs(cutflows) {  }
 
     /// Append a provided Cutflow to the list
     void addCutflow(const Cutflow& cf) {
       cfs.push_back(cf);
     }
 
     /// Append a newly constructed Cutflow to the list
     void addCutflow(const string& cfname, const vector<string>& cutnames) {
       cfs.push_back(Cutflow(cfname, cutnames));
     }
 
     /// Access the @a i'th Cutflow
     Cutflow& operator [] (size_t i) { return cfs[i]; }
     /// Access the @a i'th Cutflow (const)
     const Cutflow& operator [] (size_t i) const { return cfs[i]; }
 
     /// Access the Cutflow whose name is @a name
     Cutflow& operator [] (const string& name) {
       for (Cutflow& cf : cfs)
         if (cf.name == name) return cf;
       throw UserError("Requested cut-flow name '" + name + "' does not exist");
     }
     /// Access the @a i'th Cutflow (const)
     const Cutflow& operator [] (const string& name) const {
       for (const Cutflow& cf : cfs)
         if (cf.name == name) return cf;
       throw UserError("Requested cut-flow name '" + name + "' does not exist");
     }
 
     /// Fill the pre-cuts state counter for all contained {Cutflow}s
     void fillinit(double weight=1.) {
       for (Cutflow& cf : cfs) cf.fillinit(weight);
     }
 
     /// @brief Fill the @a {icut}'th post-cut counter with the same result for all {Cutflow}s
     bool fill(size_t icut, bool cutresult, double weight=1.) {
       for (Cutflow& cf : cfs) cf.fill(icut, cutresult, weight);
       return cutresult;
     }
 
     /// @todo Add a fillnext(), keeping track of current ifill
 
     /// @todo Add a fillhead() (or vector fillnext()?)
 
     /// Scale the contained {Cutflow}s by the given factor
     void scale(double factor) {
       for (Cutflow& cf : cfs) cf.scale(factor);
     }
 
     /// Create a string representation
     string str() const {
       stringstream ss;
       for (const Cutflow& cf : cfs)
         ss << cf << "\n\n";
       return ss.str();
     }
 
     /// Print string representation to a stream
     void print(ostream& os) const {
       os << str() << flush;
     }
 
     vector<Cutflow> cfs;
 
   };
 
   /// Print a Cutflows to a stream
   inline ostream& operator << (ostream& os, const Cutflows& cfs) {
     return os << cfs.str();
   }
 
 
 }
 
 #endif
diff --git a/include/Rivet/Tools/JetSmearingFunctions.hh b/include/Rivet/Tools/JetSmearingFunctions.hh
new file mode 100644
--- /dev/null
+++ b/include/Rivet/Tools/JetSmearingFunctions.hh
@@ -0,0 +1,135 @@
+// -*- C++ -*-
+#ifndef RIVET_JetSmearingFunctions_HH
+#define RIVET_JetSmearingFunctions_HH
+
+#include "Rivet/Jet.hh"
+#include "Rivet/Tools/MomentumSmearingFunctions.hh"
+#include "Rivet/Tools/ParticleSmearingFunctions.hh"
+#include "Rivet/Tools/Random.hh"
+
+namespace Rivet {
+
+
+  /// @name Jet filtering, efficiency and smearing utils
+  //@{
+
+  /// @name Typedef for Jet smearing functions/functors
+  typedef std::function<Jet(const Jet&)> JetSmearFn;
+
+  /// @name Typedef for Jet efficiency functions/functors
+  typedef std::function<double(const Jet&)> JetEffFn;
+
+
+
+  /// Return a constant 0 given a Jet as argument
+  inline double JET_EFF_ZERO(const Jet& p) { return 0; }
+  /// Return a constant 1 given a Jet as argument
+  inline double JET_EFF_ONE(const Jet& p) { return 1; }
+
+  /// Take a Jet and return a constant efficiency
+  struct JET_EFF_CONST {
+    JET_EFF_CONST(double eff) : _eff(eff) {}
+    double operator () (const Jet& )  const { return _eff; }
+    double _eff;
+  };
+
+
+  /// Return 1 if the given Jet contains a b, otherwise 0
+  inline double JET_BTAG_PERFECT(const Jet& j) { return j.bTagged() ? 1 : 0; }
+
+  /// Return 1 if the given Jet contains a c, otherwise 0
+  inline double JET_CTAG_PERFECT(const Jet& j) { return j.cTagged() ? 1 : 0; }
+
+
+  /// @brief b-tagging efficiency functor, for more readable b-tag effs and mistag rates
+  /// Note several constructors, allowing for optional specification of charm, tau, and light jet mistag rates
+  struct JET_BTAG_EFFS {
+    JET_BTAG_EFFS(double eff_b, double eff_light=0) : _eff_b(eff_b), _eff_c(0), _eff_t(0), _eff_l(eff_light) { }
+    JET_BTAG_EFFS(double eff_b, double eff_c, double eff_light) : _eff_b(eff_b), _eff_c(eff_c), _eff_t(0), _eff_l(eff_light) { }
+    JET_BTAG_EFFS(double eff_b, double eff_c, double eff_tau, double eff_light) : _eff_b(eff_b), _eff_c(eff_c), _eff_t(eff_tau), _eff_l(eff_light) { }
+    inline double operator () (const Jet& j) {
+      if (j.bTagged()) return _eff_b;
+      if (_eff_c >= 0 && j.cTagged()) return _eff_c;
+      if (_eff_t >= 0 && j.tauTagged()) return _eff_t;
+      return _eff_l;
+    }
+    double _eff_b, _eff_c, _eff_t, _eff_l;
+  };
+
+
+  /// Take a jet and return an unmodified copy
+  /// @todo Modify constituent particle vectors for consistency
+  /// @todo Set a null PseudoJet if the Jet is smeared?
+  inline Jet JET_SMEAR_IDENTITY(const Jet& j) { return j; }
+
+
+  /// @brief Functor for simultaneous efficiency-filtering and smearing of Jets
+  ///
+  /// A central element of the SmearedJets system
+  ///
+  /// @todo Include tagging efficiency functions?
+  struct JetEffSmearFn {
+    JetEffSmearFn(const JetSmearFn& s, const JetEffFn& e)
+      : sfn(s), efn(e) {    }
+
+    JetEffSmearFn(const JetEffFn& e, const JetSmearFn& s)
+      : sfn(s), efn(e) {    }
+
+    JetEffSmearFn(const JetSmearFn& s)
+      : sfn(s), efn(JET_EFF_ONE) {    }
+
+    JetEffSmearFn(const JetEffFn& e)
+      : sfn(JET_SMEAR_IDENTITY), efn(e) {    }
+
+    JetEffSmearFn(double eff)
+      : JetEffSmearFn(JET_EFF_CONST(eff)) {    }
+
+    /// Smear and calculate an efficiency for the given jet
+    pair<Jet,double> operator() (const Jet& j) const {
+      return make_pair(sfn(j), efn(j));
+    }
+
+    /// Compare to another, for use in the projection system
+    int cmp(const JetEffSmearFn& other) const {
+      // cout << "Eff hashes = " << get_address(efn) << "," << get_address(other.efn) << "; "
+      //      << "smear hashes = " << get_address(sfn) << "," << get_address(other.sfn) << endl;
+      if (get_address(sfn) == 0 || get_address(other.sfn) == 0) return UNDEFINED;
+      if (get_address(efn) == 0 || get_address(other.efn) == 0) return UNDEFINED;
+      return Rivet::cmp(get_address(sfn), get_address(other.sfn)) || Rivet::cmp(get_address(efn), get_address(other.efn));
+    }
+
+    /// Automatic conversion to a smearing function
+    operator JetSmearFn () { return sfn; }
+    /// Automatic conversion to an efficiency function
+    /// @todo Ambiguity re. whether reco eff or a tagging efficiency...
+    // operator JetEffFn () { return efn; }
+
+    // Stored functions/functors
+    JetSmearFn sfn;
+    JetEffFn efn;
+  };
+
+
+  /// Return true if Jet @a j is chosen to survive a random efficiency selection
+  template <typename FN>
+  inline bool efffilt(const Jet& j, FN& feff) {
+    return rand01() < feff(j);
+  }
+
+  /// A functor to return true if Jet @a j survives a random efficiency selection
+  struct JetEffFilter {
+    template <typename FN>
+    JetEffFilter(const FN& feff) : _feff(feff) {}
+    JetEffFilter(double eff) : JetEffFilter( [&](const Jet& j){return eff;} ) {}
+    bool operator () (const Jet& j) const { return efffilt(j, _feff); }
+  private:
+    const std::function<bool(const Jet&)> _feff;
+  };
+  using jetEffFilter = JetEffFilter;
+
+  //@}
+
+
+}
+
+#endif
diff --git a/include/Rivet/Tools/JetUtils.hh b/include/Rivet/Tools/JetUtils.hh
--- a/include/Rivet/Tools/JetUtils.hh
+++ b/include/Rivet/Tools/JetUtils.hh
@@ -1,91 +1,153 @@
 #ifndef RIVET_JETUTILS_HH
 #define RIVET_JETUTILS_HH
 
 #include "Rivet/Jet.hh"
 #include "Rivet/Tools/ParticleBaseUtils.hh"
 
 namespace Rivet {
 
 
-  /// std::function instantiation for functors taking a Jet and returning a bool
-  using JetSelector = function<bool(const Jet&)>;
-  /// std::function instantiation for functors taking two Jets and returning a bool
-  using JetSorter = function<bool(const Jet&, const Jet&)>;
-
-
   /// @name Unbound functions for converting between Jets, Particles and PseudoJets
   //@{
 
   inline PseudoJets mkPseudoJets(const Particles& ps) {
     PseudoJets rtn; rtn.reserve(ps.size());
     for (const Particle& p : ps)
       rtn.push_back(p);
     return rtn;
   }
 
   inline PseudoJets mkPseudoJets(const Jets& js) {
     PseudoJets rtn; rtn.reserve(js.size());
     for (const Jet& j : js)
       rtn.push_back(j);
     return rtn;
   }
 
   inline Jets mkJets(const PseudoJets& pjs) {
     Jets rtn; rtn.reserve(pjs.size());
     for (const PseudoJet& pj : pjs)
       rtn.push_back(pj);
     return rtn;
   }
 
   //@}
 
 
+  /// @name Jet classifier -> bool functors
+  //@{
+
+  /// std::function instantiation for functors taking a Jet and returning a bool
+  using JetSelector = function<bool(const Jet&)>;
+  /// std::function instantiation for functors taking two Jets and returning a bool
+  using JetSorter = function<bool(const Jet&, const Jet&)>;
+
+
+  /// Base type for Jet -> bool functors
+  struct BoolJetFunctor {
+    virtual bool operator()(const Jet& p) const = 0;
+  };
+
+  struct BoolJetAND : public BoolJetFunctor {
+    BoolJetAND(const std::vector<ParticleSelector>& sels) : selectors(sels) {}
+    BoolJetAND(const ParticleSelector& a, const ParticleSelector& b) : selectors({a,b}) {}
+    BoolJetAND(const ParticleSelector& a, const ParticleSelector& b, const ParticleSelector& c) : selectors({a,b,c}) {}
+    bool operator()(const Particle& p) const {
+      for (const ParticleSelector& sel : selectors) if (!sel(p)) return false;
+      return true;
+    }
+    std::vector<ParticleSelector> selectors;
+  };
+
+  struct BoolJetOR : public BoolJetFunctor {
+    BoolJetOR(const std::vector<ParticleSelector>& sels) : selectors(sels) {}
+    BoolJetOR(const ParticleSelector& a, const ParticleSelector& b) : selectors({a,b}) {}
+    BoolJetOR(const ParticleSelector& a, const ParticleSelector& b, const ParticleSelector& c) : selectors({a,b,c}) {}
+    bool operator()(const Particle& p) const {
+      for (const ParticleSelector& sel : selectors) if (sel(p)) return true;
+      return false;
+    }
+    std::vector<ParticleSelector> selectors;
+  };
+
+  struct BoolJetNOT : public BoolJetFunctor {
+    BoolJetNOT(const ParticleSelector& sel) : selector(sel) {}
+    bool operator()(const Particle& p) const { return !selector(p); }
+    ParticleSelector selector;
+  };
+
+
+
+
+  /// B-tagging functor, with a tag selection cut as the stored state
+  struct HasBTag : BoolJetFunctor {
+    HasBTag(const Cut& c=Cuts::open()) : cut(c) {}
+    // HasBTag(const std::function<bool(const Jet& j)>& f) : selector(f) {}
+    bool operator() (const Jet& j) const { return j.bTagged(cut); }
+    // const std::function<bool(const Jet& j)> selector;
+    const Cut cut;
+  };
+  using hasBTag = HasBTag;
+
+  /// C-tagging functor, with a tag selection cut as the stored state
+  struct HasCTag : BoolJetFunctor {
+    HasCTag(const Cut& c=Cuts::open()) : cut(c) {}
+    // HasCTag(const std::function<bool(const Jet& j)>& f) : selector(f) {}
+    bool operator() (const Jet& j) const { return j.cTagged(cut); }
+    // const std::function<bool(const Jet& j)> selector;
+    const Cut cut;
+  };
+  using hasCTag = HasCTag;
+
+  //@}
+
+
   /// @name Unbound functions for filtering jets
   //@{
 
   /// Filter a jet collection in-place to the subset that passes the supplied Cut
   Jets& ifilter_select(Jets& jets, const Cut& c);
   /// Alias for ifilter_select
   /// @deprecated Use ifilter_select
   inline Jets& ifilterBy(Jets& jets, const Cut& c) { return ifilter_select(jets, c); }
 
   /// Filter a jet collection in-place to the subset that passes the supplied Cut
   inline Jets filter_select(const Jets& jets, const Cut& c) {
     Jets rtn = jets;
     return ifilter_select(rtn, c);
   }
   /// Alias for ifilter_select
   /// @deprecated Use filter_select
   inline Jets filterBy(const Jets& jets, const Cut& c) { return filter_select(jets, c); }
 
   /// Filter a jet collection in-place to the subset that passes the supplied Cut
   inline Jets filter_select(const Jets& jets, const Cut& c, Jets& out) {
     out = filter_select(jets, c);
     return out;
   }
   /// Alias for ifilter_select
   /// @deprecated Use filter_select
   inline Jets filterBy(const Jets& jets, const Cut& c, Jets& out) { return filter_select(jets, c, out); }
 
 
   /// Filter a jet collection in-place to the subset that fails the supplied Cut
   Jets& ifilter_discard(Jets& jets, const Cut& c);
 
   /// Filter a jet collection in-place to the subset that fails the supplied Cut
   inline Jets filter_discard(const Jets& jets, const Cut& c) {
     Jets rtn = jets;
     return ifilter_discard(rtn, c);
   }
 
   /// Filter a jet collection in-place to the subset that fails the supplied Cut
   inline Jets filter_discard(const Jets& jets, const Cut& c, Jets& out) {
     out = filter_discard(jets, c);
     return out;
   }
 
   //@}
 
 
 }
 
 #endif
diff --git a/include/Rivet/Tools/MomentumSmearingFunctions.hh b/include/Rivet/Tools/MomentumSmearingFunctions.hh
new file mode 100644
--- /dev/null
+++ b/include/Rivet/Tools/MomentumSmearingFunctions.hh
@@ -0,0 +1,102 @@
+// -*- C++ -*-
+#ifndef RIVET_MomentumSmearingFunctions_HH
+#define RIVET_MomentumSmearingFunctions_HH
+
+#include "Rivet/Math/Vector4.hh"
+#include "Rivet/Tools/Random.hh"
+
+namespace Rivet {
+
+
+  /// @name FourMomentum efficiency and smearing functions
+  //@{
+
+  /// @name Typedef for FourMomentum smearing functions/functors
+  typedef std::function<FourMomentum(const FourMomentum&)> P4SmearFn;
+
+  /// @name Typedef for FourMomentum efficiency functions/functors
+  typedef std::function<double(const FourMomentum&)> P4EffFn;
+
+
+  /// Take a FourMomentum and return 0
+  inline double P4_EFF_ZERO(const FourMomentum& ) { return 0; }
+  /// @deprecated Alias for P4_EFF_ZERO
+  inline double P4_FN0(const FourMomentum& ) { return 0; }
+
+  /// Take a FourMomentum and return 1
+  inline double P4_EFF_ONE(const FourMomentum& ) { return 1; }
+  /// @deprecated Alias for P4_EFF_ONE
+  inline double P4_FN1(const FourMomentum& ) { return 1; }
+
+  /// Take a FourMomentum and return a constant number
+  struct P4_EFF_CONST {
+    P4_EFF_CONST(double x) : _x(x) {}
+    double operator () (const FourMomentum& )  const { return _x; }
+    double _x;
+  };
+
+
+  /// Take a FourMomentum and return it unmodified
+  inline FourMomentum P4_SMEAR_IDENTITY(const FourMomentum& p) { return p; }
+
+  /// Smear a FourMomentum's energy using a Gaussian of absolute width @a resolution
+  /// @todo Also make jet versions that update/smear constituents?
+  inline FourMomentum P4_SMEAR_E_GAUSS(const FourMomentum& p, double resolution) {
+    const double mass = p.mass2() > 0 ? p.mass() : 0; //< numerical carefulness...
+    const double smeared_E = max(randnorm(p.E(), resolution), mass); //< can't let the energy go below the mass!
+    return FourMomentum::mkEtaPhiME(p.eta(), p.phi(), mass, smeared_E);
+  }
+
+  /// Smear a FourMomentum's transverse momentum using a Gaussian of absolute width @a resolution
+  inline FourMomentum P4_SMEAR_PT_GAUSS(const FourMomentum& p, double resolution) {
+    const double smeared_pt = max(randnorm(p.pT(), resolution), 0.);
+    const double mass = p.mass2() > 0 ? p.mass() : 0; //< numerical carefulness...
+    return FourMomentum::mkEtaPhiMPt(p.eta(), p.phi(), mass, smeared_pt);
+  }
+
+  /// Smear a FourMomentum's mass using a Gaussian of absolute width @a resolution
+  inline FourMomentum P4_SMEAR_MASS_GAUSS(const FourMomentum& p, double resolution) {
+    const double smeared_mass = max(randnorm(p.mass(), resolution), 0.);
+    return FourMomentum::mkEtaPhiMPt(p.eta(), p.phi(), smeared_mass, p.pT());
+  }
+
+  //@}
+
+
+
+  /// @name FourMomentum efficiency and smearing functions
+  //@{
+
+  /// Take a Vector3 and return 0
+  inline double P3_EFF_ZERO(const Vector3& p) { return 0; }
+  /// @deprecated Alias for P3_EFF_ZERO
+  inline double P3_FN0(const Vector3& p) { return 0; }
+
+  /// Take a Vector3 and return 1
+  inline double P3_EFF_ONE(const Vector3& p) { return 1; }
+  /// @deprecated Alias for P3_EFF_ONE
+  inline double P3_FN1(const Vector3& p) { return 1; }
+
+  /// Take a Vector3 and return a constant number
+  struct P3_EFF_CONST {
+    P3_EFF_CONST(double x) : _x(x) {}
+    double operator () (const Vector3& )  const { return _x; }
+    double _x;
+  };
+
+
+  /// Take a Vector3 and return it unmodified
+  inline Vector3 P3_SMEAR_IDENTITY(const Vector3& p) { return p; }
+
+  /// Smear a Vector3's length using a Gaussian of absolute width @a resolution
+  inline Vector3 P3_SMEAR_LEN_GAUSS(const Vector3& p, double resolution) {
+    const double smeared_mod = max(randnorm(p.mod(), resolution), 0.); //< can't let the energy go below the mass!
+    return smeared_mod * p.unit();
+  }
+
+  //@}
+
+
+}
+
+#endif
diff --git a/include/Rivet/Tools/ParticleBaseUtils.hh b/include/Rivet/Tools/ParticleBaseUtils.hh
--- a/include/Rivet/Tools/ParticleBaseUtils.hh
+++ b/include/Rivet/Tools/ParticleBaseUtils.hh
@@ -1,355 +1,499 @@
 #ifndef RIVET_PARTICLEBASEUTILS_HH
 #define RIVET_PARTICLEBASEUTILS_HH
 
 #include "Rivet/ParticleBase.hh"
 
 namespace Rivet {
 
 
 
   /// @name ParticleBase classifier -> bool functors
   /// @todo Move to FourMomentum functions
   ///
   /// To be passed to any() or all() e.g. any(jets, DeltaRLess(electron, 0.4))
   //@{
 
   /// std::function instantiation for functors taking a ParticleBase and returning a bool
   using ParticleBaseSelector = function<bool(const ParticleBase&)>;
   /// std::function instantiation for functors taking two ParticleBase and returning a bool
   using ParticleBaseSorter = function<bool(const ParticleBase&, const ParticleBase&)>;
 
 
   /// Base type for Particle -> bool functors
   struct BoolParticleBaseFunctor {
     virtual bool operator()(const ParticleBase& p) const = 0;
   };
 
 
   /// Transverse momentum greater-than functor
   struct PtGtr : public BoolParticleBaseFunctor {
     PtGtr(double pt) : ptcut(pt) { }
     bool operator()(const ParticleBase& p) const { return p.pT() > ptcut; }
     double ptcut;
   };
   using pTGtr = PtGtr;
   using ptGtr = PtGtr;
 
   /// Transverse momentum less-than functor
   struct PtLess : public BoolParticleBaseFunctor {
     PtLess(double pt) : ptcut(pt) { }
     bool operator()(const ParticleBase& p) const { return p.pT() < ptcut; }
     double ptcut;
   };
   using pTLess = PtLess;
   using ptLess = PtLess;
 
+  /// Transverse momentum in-range functor
+  struct PtInRange : public BoolParticleBaseFunctor {
+    PtInRange(pair<double, double> ptcuts) : ptcut(ptcuts) { }
+    PtInRange(double ptlow, double pthigh) : PtInRange(make_pair(ptlow, pthigh)) { }
+    bool operator()(const ParticleBase& p) const { return p.pT() >= ptcut.first && p.pT() < ptcut.second; }
+    pair<double,double> ptcut;
+  };
+  using pTInRange = PtInRange;
+  using ptInRange = PtInRange;
+
 
   /// Pseudorapidity greater-than functor
   struct EtaGtr : public BoolParticleBaseFunctor {
     EtaGtr(double eta) : etacut(eta) { }
     bool operator()(const ParticleBase& p) const { return p.eta() > etacut; }
     double etacut;
   };
   using etaGtr = EtaGtr;
 
-  /// Pseudorapidity momentum less-than functor
+  /// Pseudorapidity less-than functor
   struct EtaLess : public BoolParticleBaseFunctor {
     EtaLess(double eta) : etacut(eta) { }
     bool operator()(const ParticleBase& p) const { return p.eta() < etacut; }
     double etacut;
   };
   using etaLess = EtaLess;
 
+  /// Pseudorapidity in-range functor
+  struct EtaInRange : public BoolParticleBaseFunctor {
+    EtaInRange(pair<double, double> etacuts) : etacut(etacuts) { }
+    EtaInRange(double etalow, double etahigh) : EtaInRange(make_pair(etalow, etahigh)) { }
+    bool operator()(const ParticleBase& p) const { return p.eta() >= etacut.first && p.eta() < etacut.second; }
+    pair<double,double> etacut;
+  };
+  using etaInRange = EtaInRange;
+
+
   /// Abs pseudorapidity greater-than functor
   struct AbsEtaGtr : public BoolParticleBaseFunctor {
     AbsEtaGtr(double abseta) : absetacut(abseta) { }
     bool operator()(const ParticleBase& p) const { return p.abseta() > absetacut; }
     double absetacut;
   };
   using absEtaGtr = AbsEtaGtr;
   using absetaGtr = AbsEtaGtr;
 
   /// Abs pseudorapidity momentum less-than functor
   struct AbsEtaLess : public BoolParticleBaseFunctor {
     AbsEtaLess(double abseta) : absetacut(abseta) { }
     bool operator()(const ParticleBase& p) const { return p.abseta() < absetacut; }
     double absetacut;
   };
   using absEtaLess = AbsEtaLess;
   using absetaLess = AbsEtaLess;
 
+  /// Abs pseudorapidity in-range functor
+  struct AbsEtaInRange : public BoolParticleBaseFunctor {
+    AbsEtaInRange(const pair<double, double>& absetacuts) : absetacut(absetacuts) { }
+    AbsEtaInRange(double absetalow, double absetahigh) : AbsEtaInRange(make_pair(absetalow, absetahigh)) { }
+    bool operator()(const ParticleBase& p) const { return p.abseta() >= absetacut.first && p.abseta() < absetacut.second; }
+    pair<double,double> absetacut;
+  };
+  using absEtaInRange = AbsEtaInRange;
+  using absetaInRange = AbsEtaInRange;
+
 
   /// Rapidity greater-than functor
   struct RapGtr : public BoolParticleBaseFunctor {
     RapGtr(double rap) : rapcut(rap) { }
     bool operator()(const ParticleBase& p) const { return p.rap() > rapcut; }
     double rapcut;
   };
   using rapGtr = RapGtr;
 
   /// Rapidity momentum less-than functor
   struct RapLess : public BoolParticleBaseFunctor {
     RapLess(double rap) : rapcut(rap) { }
     bool operator()(const ParticleBase& p) const { return p.rap() < rapcut; }
     double rapcut;
   };
   using rapLess = RapLess;
 
+  /// Rapidity in-range functor
+  struct RapInRange : public BoolParticleBaseFunctor {
+    RapInRange(const pair<double, double>& rapcuts) : rapcut(rapcuts) { }
+    RapInRange(double raplow, double raphigh) : RapInRange(make_pair(raplow, raphigh)) { }
+    bool operator()(const ParticleBase& p) const { return p.rap() >= rapcut.first && p.rap() < rapcut.second; }
+    pair<double,double> rapcut;
+  };
+  using rapInRange = RapInRange;
+
+
   /// Abs rapidity greater-than functor
   struct AbsRapGtr : public BoolParticleBaseFunctor {
     AbsRapGtr(double absrap) : absrapcut(absrap) { }
     bool operator()(const ParticleBase& p) const { return p.absrap() > absrapcut; }
     double absrapcut;
   };
   using absRapGtr = AbsRapGtr;
   using absrapGtr = AbsRapGtr;
 
   /// Abs rapidity momentum less-than functor
   struct AbsRapLess : public BoolParticleBaseFunctor {
     AbsRapLess(double absrap) : absrapcut(absrap) { }
     bool operator()(const ParticleBase& p) const { return p.absrap() < absrapcut; }
     double absrapcut;
   };
   using absRapLess = AbsRapLess;
   using absrapLess = AbsRapLess;
 
+  /// Abs rapidity in-range functor
+  struct AbsRapInRange : public BoolParticleBaseFunctor {
+    AbsRapInRange(const pair<double, double>& absrapcuts) : absrapcut(absrapcuts) { }
+    AbsRapInRange(double absraplow, double absraphigh) : AbsRapInRange(make_pair(absraplow, absraphigh)) { }
+    bool operator()(const ParticleBase& p) const { return p.absrap() >= absrapcut.first && p.absrap() < absrapcut.second; }
+    pair<double,double> absrapcut;
+  };
+  using absRapInRange = AbsRapInRange;
+  using absrapInRange = AbsRapInRange;
+
+
 
   /// @f$ \Delta R @f$ (with respect to another 4-momentum, @a vec) greater-than functor
   struct DeltaRGtr : public BoolParticleBaseFunctor {
     DeltaRGtr(const ParticleBase& vec, double dr, RapScheme scheme=PSEUDORAPIDITY)
       : refvec(vec.mom()), drcut(dr), rapscheme(scheme) { }
     DeltaRGtr(const FourMomentum& vec, double dr, RapScheme scheme=PSEUDORAPIDITY)
       : refvec(vec), drcut(dr), rapscheme(scheme) { }
     DeltaRGtr(const Vector3& vec, double dr)
       : drcut(dr), rapscheme(PSEUDORAPIDITY) { refvec.setPx(vec.x()); refvec.setPy(vec.y()); refvec.setPz(vec.z()); }
     bool operator()(const ParticleBase& p) const { return deltaR(p, refvec, rapscheme) > drcut; }
     FourMomentum refvec;
     double drcut;
     RapScheme rapscheme;
   };
   using deltaRGtr = DeltaRGtr;
 
   /// @f$ \Delta R @f$ (with respect to another 4-momentum, @a vec) less-than functor
   struct DeltaRLess : public BoolParticleBaseFunctor {
     DeltaRLess(const ParticleBase& vec, double dr, RapScheme scheme=PSEUDORAPIDITY)
       : refvec(vec.mom()), drcut(dr), rapscheme(scheme) { }
     DeltaRLess(const FourMomentum& vec, double dr, RapScheme scheme=PSEUDORAPIDITY)
       : refvec(vec), drcut(dr), rapscheme(scheme) { }
     DeltaRLess(const Vector3& vec, double dr)
       : drcut(dr), rapscheme(PSEUDORAPIDITY) { refvec.setPx(vec.x()); refvec.setPy(vec.y()); refvec.setPz(vec.z()); }
     bool operator()(const ParticleBase& p) const { return deltaR(p, refvec, rapscheme) < drcut; }
     FourMomentum refvec;
     double drcut;
     RapScheme rapscheme;
   };
   using deltaRLess = DeltaRLess;
 
+  /// @f$ \Delta R @f$ (with respect to another 4-momentum, @a vec) in-range functor
+  struct DeltaRInRange : public BoolParticleBaseFunctor {
+    DeltaRInRange(const ParticleBase& vec, const pair<double,double>& dr, RapScheme scheme=PSEUDORAPIDITY)
+      : refvec(vec.mom()), drcut(dr), rapscheme(scheme) { }
+    DeltaRInRange(const ParticleBase& vec, double drmin, double drmax, RapScheme scheme=PSEUDORAPIDITY)
+      : DeltaRInRange(vec, make_pair(drmin, drmax), scheme) { }
+    DeltaRInRange(const FourMomentum& vec, const pair<double,double>& dr, RapScheme scheme=PSEUDORAPIDITY)
+      : refvec(vec), drcut(dr), rapscheme(scheme) { }
+    DeltaRInRange(const FourMomentum& vec, double drmin, double drmax, RapScheme scheme=PSEUDORAPIDITY)
+      : DeltaRInRange(vec, make_pair(drmin, drmax), scheme) { }
+    DeltaRInRange(const Vector3& vec, const pair<double,double>& dr)
+      : drcut(dr), rapscheme(PSEUDORAPIDITY) { refvec.setPx(vec.x()); refvec.setPy(vec.y()); refvec.setPz(vec.z()); }
+    DeltaRInRange(const Vector3& vec, double drmin, double drmax)
+      : DeltaRInRange(vec, make_pair(drmin, drmax)) { }
+    bool operator()(const ParticleBase& p) const {
+      const double dR = deltaR(p, refvec, rapscheme);
+      return dR >= drcut.first && dR < drcut.second;
+    }
+    FourMomentum refvec;
+    pair<double,double> drcut;
+    RapScheme rapscheme;
+  };
+  using deltaRInRange = DeltaRInRange;
+
 
   /// @f$ |\Delta \phi| @f$ (with respect to another momentum, @a vec) greater-than functor
   struct DeltaPhiGtr : public BoolParticleBaseFunctor {
     DeltaPhiGtr(const ParticleBase& vec, double dphi)
       : refvec(vec.p3()), dphicut(dphi) { }
     DeltaPhiGtr(const FourMomentum& vec, double dphi)
       : refvec(vec.p3()), dphicut(dphi) { }
     DeltaPhiGtr(const Vector3& vec, double dphi)
       : refvec(vec), dphicut(dphi) { }
     bool operator()(const ParticleBase& p) const { return deltaPhi(p, refvec) > dphicut; }
     Vector3 refvec;
     double dphicut;
   };
   using deltaPhiGtr = DeltaPhiGtr;
 
   /// @f$ |\Delta \phi| @f$ (with respect to another momentum, @a vec) less-than functor
   struct DeltaPhiLess : public BoolParticleBaseFunctor {
     DeltaPhiLess(const ParticleBase& vec, double dphi)
       : refvec(vec.p3()), dphicut(dphi) { }
     DeltaPhiLess(const FourMomentum& vec, double dphi)
       : refvec(vec.p3()), dphicut(dphi) { }
     DeltaPhiLess(const Vector3& vec, double dphi)
       : refvec(vec), dphicut(dphi) { }
     bool operator()(const ParticleBase& p) const { return deltaPhi(p, refvec) < dphicut; }
     Vector3 refvec;
     double dphicut;
   };
   using deltaPhiLess = DeltaPhiLess;
 
+  /// @f$ \Delta \phi @f$ (with respect to another 4-momentum, @a vec) in-range functor
+  struct DeltaPhiInRange : public BoolParticleBaseFunctor {
+    DeltaPhiInRange(const ParticleBase& vec, const pair<double,double>& dphi)
+      : refvec(vec.mom()), dphicut(dphi) { }
+    DeltaPhiInRange(const ParticleBase& vec, double dphimin, double dphimax)
+      : DeltaPhiInRange(vec, make_pair(dphimin, dphimax)) { }
+    DeltaPhiInRange(const FourMomentum& vec, const pair<double,double>& dphi)
+      : refvec(vec), dphicut(dphi) { }
+    DeltaPhiInRange(const FourMomentum& vec, double dphimin, double dphimax)
+      : DeltaPhiInRange(vec, make_pair(dphimin, dphimax)) { }
+    DeltaPhiInRange(const Vector3& vec, const pair<double,double>& dphi)
+      : refvec(vec), dphicut(dphi) { }
+    DeltaPhiInRange(const Vector3& vec, double dphimin, double dphimax)
+      : DeltaPhiInRange(vec, make_pair(dphimin, dphimax)) { }
+    bool operator()(const ParticleBase& p) const {
+      const double dphi = deltaPhi(p, refvec);
+      return dphi >= dphicut.first && dphi < dphicut.second;
+    }
+    Vector3 refvec;
+    pair<double,double> dphicut;
+  };
+  using deltaPhiInRange = DeltaPhiInRange;
+
 
   /// @f$ |\Delta \eta| @f$ (with respect to another momentum, @a vec) greater-than functor
   struct DeltaEtaGtr : public BoolParticleBaseFunctor {
     DeltaEtaGtr(const ParticleBase& vec, double deta)
       : refvec(vec.p3()), detacut(deta) { }
     DeltaEtaGtr(const FourMomentum& vec, double deta)
       : refvec(vec.p3()), detacut(deta) { }
     DeltaEtaGtr(const Vector3& vec, double deta)
       : refvec(vec), detacut(deta) { }
     bool operator()(const ParticleBase& p) const { return std::abs(deltaEta(p, refvec)) > detacut; }
     Vector3 refvec;
     double detacut;
   };
   using deltaEtaGtr = DeltaEtaGtr;
 
   /// @f$ |\Delta \eta| @f$ (with respect to another momentum, @a vec) less-than functor
   struct DeltaEtaLess : public BoolParticleBaseFunctor {
     DeltaEtaLess(const ParticleBase& vec, double deta)
       : refvec(vec.p3()), detacut(deta) { }
     DeltaEtaLess(const FourMomentum& vec, double deta)
       : refvec(vec.p3()), detacut(deta) { }
     DeltaEtaLess(const Vector3& vec, double deta)
       : refvec(vec), detacut(deta) { }
     bool operator()(const ParticleBase& p) const { return std::abs(deltaEta(p, refvec)) < detacut; }
     Vector3 refvec;
     double detacut;
   };
   using deltaEtaLess = DeltaEtaLess;
 
+  /// @f$ \Delta \eta @f$ (with respect to another 4-momentum, @a vec) in-range functor
+  struct DeltaEtaInRange : public BoolParticleBaseFunctor {
+    DeltaEtaInRange(const ParticleBase& vec, const pair<double,double>& deta)
+      : refvec(vec.mom()), detacut(deta) { }
+    DeltaEtaInRange(const ParticleBase& vec, double detamin, double detamax)
+      : DeltaEtaInRange(vec, make_pair(detamin, detamax)) { }
+    DeltaEtaInRange(const FourMomentum& vec, const pair<double,double>& deta)
+      : refvec(vec), detacut(deta) { }
+    DeltaEtaInRange(const FourMomentum& vec, double detamin, double detamax)
+      : DeltaEtaInRange(vec, make_pair(detamin, detamax)) { }
+    DeltaEtaInRange(const Vector3& vec, const pair<double,double>& deta)
+      : refvec(vec), detacut(deta) { }
+    DeltaEtaInRange(const Vector3& vec, double detamin, double detamax)
+      : DeltaEtaInRange(vec, make_pair(detamin, detamax)) { }
+    bool operator()(const ParticleBase& p) const {
+      const double deta = deltaEta(p, refvec);
+      return deta >= detacut.first && deta < detacut.second;
+    }
+    Vector3 refvec;
+    pair<double,double> detacut;
+  };
+  using deltaEtaInRange = DeltaEtaInRange;
+
 
   /// @f$ |\Delta y| @f$ (with respect to another momentum, @a vec) greater-than functor
   struct DeltaRapGtr : public BoolParticleBaseFunctor {
     DeltaRapGtr(const ParticleBase& vec, double drap)
       : refvec(vec.mom()), drapcut(drap) { }
     DeltaRapGtr(const FourMomentum& vec, double drap)
       : refvec(vec), drapcut(drap) { }
     bool operator()(const ParticleBase& p) const { return std::abs(deltaRap(p, refvec)) > drapcut; }
     FourMomentum refvec;
     double drapcut;
   };
   using deltaRapGtr = DeltaRapGtr;
 
   /// @f$ |\Delta y| @f$ (with respect to another momentum, @a vec) less-than functor
   struct DeltaRapLess : public BoolParticleBaseFunctor {
     DeltaRapLess(const ParticleBase& vec, double drap)
       : refvec(vec.mom()), drapcut(drap) { }
     DeltaRapLess(const FourMomentum& vec, double drap)
       : refvec(vec), drapcut(drap) { }
     bool operator()(const ParticleBase& p) const { return std::abs(deltaRap(p, refvec)) < drapcut; }
     FourMomentum refvec;
     double drapcut;
   };
   using deltaRapLess = DeltaRapLess;
 
+  /// @f$ \Delta y @f$ (with respect to another 4-momentum, @a vec) in-range functor
+  struct DeltaRapInRange : public BoolParticleBaseFunctor {
+    DeltaRapInRange(const ParticleBase& vec, const pair<double,double>& drap)
+      : refvec(vec.mom()), drapcut(drap) { }
+    DeltaRapInRange(const ParticleBase& vec, double drapmin, double drapmax)
+      : DeltaRapInRange(vec, make_pair(drapmin, drapmax)) { }
+    DeltaRapInRange(const FourMomentum& vec, const pair<double,double>& drap)
+      : refvec(vec), drapcut(drap) { }
+    DeltaRapInRange(const FourMomentum& vec, double drapmin, double drapmax)
+      : DeltaRapInRange(vec, make_pair(drapmin, drapmax)) { }
+    bool operator()(const ParticleBase& p) const {
+      const double drap = deltaRap(p, refvec);
+      return drap >= drapcut.first && drap < drapcut.second;
+    }
+    FourMomentum refvec;
+    pair<double,double> drapcut;
+  };
+  using deltaRapInRange = DeltaRapInRange;
+
   //@}
 
 
   /// @name ParticleBase comparison -> double functors
   /// @todo Move to FourMomentum functions
   ///
   /// To be passed to transform()any(jets, DeltaRLess(electron, 0.4))
   //@{
 
   /// Base type for Particle -> double functors
   struct DoubleParticleBaseFunctor {
     virtual double operator()(const ParticleBase& p) const = 0;
   };
 
   /// Calculator of @f$ \Delta R @f$ with respect to a given momentum
   struct DeltaRWRT : public DoubleParticleBaseFunctor {
     DeltaRWRT(const ParticleBase& pb, RapScheme scheme=PSEUDORAPIDITY) : p(pb.mom()) {}
     DeltaRWRT(const FourMomentum& p4, RapScheme scheme=PSEUDORAPIDITY) : p(p4) {}
     DeltaRWRT(const Vector3& p3) : p(p3.mod(), p3.x(), p3.y(), p3.z()), rapscheme(PSEUDORAPIDITY) {}
     double operator()(const ParticleBase& pb) const { return deltaR(p, pb, rapscheme); }
     double operator()(const FourMomentum& p4) const { return deltaR(p, p4, rapscheme); }
     double operator()(const Vector3& p3) const { return deltaR(p, p3); }
     const FourMomentum p;
     RapScheme rapscheme;
   };
   using deltaRWRT = DeltaRWRT;
 
   /// Calculator of @f$ \Delta \phi @f$ with respect to a given momentum
   struct DeltaPhiWRT : public DoubleParticleBaseFunctor {
     DeltaPhiWRT(const ParticleBase& pb) : p(pb.mom().vector3()) {}
     DeltaPhiWRT(const FourMomentum& p4) : p(p4.vector3()) {}
     DeltaPhiWRT(const Vector3& p3) : p(p3) {}
     double operator()(const ParticleBase& pb) const { return deltaPhi(p, pb); }
     double operator()(const FourMomentum& p4) const { return deltaPhi(p, p4); }
     double operator()(const Vector3& p3) const { return deltaPhi(p, p3); }
     const Vector3 p;
   };
   using deltaPhiWRT = DeltaPhiWRT;
 
   /// Calculator of @f$ \Delta \eta @f$ with respect to a given momentum
   struct DeltaEtaWRT : public DoubleParticleBaseFunctor {
     DeltaEtaWRT(const ParticleBase& pb) : p(pb.mom().vector3()) {}
     DeltaEtaWRT(const FourMomentum& p4) : p(p4.vector3()) {}
     DeltaEtaWRT(const Vector3& p3) : p(p3) {}
     double operator()(const ParticleBase& pb) const { return deltaEta(p, pb); }
     double operator()(const FourMomentum& p4) const { return deltaEta(p, p4); }
     double operator()(const Vector3& p3) const { return deltaEta(p, p3); }
     const Vector3 p;
   };
   using deltaEtaWRT = DeltaEtaWRT;
 
   /// Calculator of @f$ |\Delta \eta| @f$ with respect to a given momentum
   struct AbsDeltaEtaWRT : public DoubleParticleBaseFunctor {
     AbsDeltaEtaWRT(const ParticleBase& pb) : p(pb.mom().vector3()) {}
     AbsDeltaEtaWRT(const FourMomentum& p4) : p(p4.vector3()) {}
     AbsDeltaEtaWRT(const Vector3& p3) : p(p3) {}
     double operator()(const ParticleBase& pb) const { return fabs(deltaEta(p, pb)); }
     double operator()(const FourMomentum& p4) const { return fabs(deltaEta(p, p4)); }
     double operator()(const Vector3& p3) const { return fabs(deltaEta(p, p3)); }
     const Vector3 p;
   };
   using absDeltaEtaWRT = AbsDeltaEtaWRT;
 
   /// Calculator of @f$ \Delta y @f$ with respect to a given momentum
   struct DeltaRapWRT : public DoubleParticleBaseFunctor {
     DeltaRapWRT(const ParticleBase& pb) : p(pb.mom()) {}
     DeltaRapWRT(const FourMomentum& p4) : p(p4) {}
     double operator()(const ParticleBase& pb) const { return deltaRap(p, pb); }
     double operator()(const FourMomentum& p4) const { return deltaRap(p, p4); }
     const FourMomentum p;
   };
   using deltaRapWRT = DeltaRapWRT;
 
   /// Calculator of @f$ |\Delta y| @f$ with respect to a given momentum
   struct AbsDeltaRapWRT : public DoubleParticleBaseFunctor {
     AbsDeltaRapWRT(const ParticleBase& pb) : p(pb.mom()) {}
     AbsDeltaRapWRT(const FourMomentum& p4) : p(p4) {}
     double operator()(const ParticleBase& pb) const { return fabs(deltaRap(p, pb)); }
     double operator()(const FourMomentum& p4) const { return fabs(deltaRap(p, p4)); }
     const FourMomentum p;
   };
   using absDeltaRapWRT = AbsDeltaRapWRT;
 
   //@}
 
 
   /// @name Non-PID particle properties, via unbound functions
   /// @todo Mostly move to functions on FourMomentum
+  /// @note In a sub-namespace (imported by default) for protection
   //@{
+  namespace Kin {
 
-  /// Unbound function access to momentum
-  inline FourMomentum mom(const ParticleBase& p) { return p.mom(); }
+    /// Unbound function access to momentum
+    inline FourMomentum mom(const ParticleBase& p) { return p.mom(); }
 
-  /// Unbound function access to p3
-  inline Vector3 p3(const ParticleBase& p) { return p.p3(); }
+    /// Unbound function access to p3
+    inline Vector3 p3(const ParticleBase& p) { return p.p3(); }
 
-  /// Unbound function access to pTvec
-  inline Vector3 pTvec(const ParticleBase& p) { return p.pTvec(); }
+    /// Unbound function access to pTvec
+    inline Vector3 pTvec(const ParticleBase& p) { return p.pTvec(); }
 
-  /// Unbound function access to p
-  inline double p(const ParticleBase& p) { return p.p(); }
+    /// Unbound function access to p
+    inline double p(const ParticleBase& p) { return p.p(); }
 
-  /// Unbound function access to pT
-  inline double pT(const ParticleBase& p) { return p.pT(); }
+    /// Unbound function access to pT
+    inline double pT(const ParticleBase& p) { return p.pT(); }
 
-  /// Unbound function access to ET
-  inline double Et(const ParticleBase& p) { return p.Et(); }
+    /// Unbound function access to ET
+    inline double Et(const ParticleBase& p) { return p.Et(); }
 
-  /// Unbound function access to eta
-  inline double eta(const ParticleBase& p) { return p.eta(); }
+    /// Unbound function access to eta
+    inline double eta(const ParticleBase& p) { return p.eta(); }
 
-  /// Unbound function access to abseta
-  inline double abseta(const ParticleBase& p) { return p.abseta(); }
+    /// Unbound function access to abseta
+    inline double abseta(const ParticleBase& p) { return p.abseta(); }
 
-  /// Unbound function access to rapidity
-  inline double rap(const ParticleBase& p) { return p.rap(); }
+    /// Unbound function access to rapidity
+    inline double rap(const ParticleBase& p) { return p.rap(); }
 
-  /// Unbound function access to abs rapidity
-  inline double absrap(const ParticleBase& p) { return p.absrap(); }
+    /// Unbound function access to abs rapidity
+    inline double absrap(const ParticleBase& p) { return p.absrap(); }
 
+  }
+  using namespace Kin;
   //@}
 
 
 }
 
 #endif
diff --git a/include/Rivet/Tools/ParticleName.hh b/include/Rivet/Tools/ParticleName.hh
--- a/include/Rivet/Tools/ParticleName.hh
+++ b/include/Rivet/Tools/ParticleName.hh
@@ -1,264 +1,266 @@
 #ifndef RIVET_PARTICLENAME_HH
 #define RIVET_PARTICLENAME_HH
 
 #include "Rivet/Particle.fhh"
 #include "Rivet/Tools/Exceptions.hh"
 
 namespace Rivet {
 
   namespace PID {
 
 
     /// Static const convenience particle ID names
 
     /// Special wildcard particle name
     static const PdgId ANY = 10000;
 
     /// @name Charged leptons
     //@{
     static const PdgId ELECTRON = 11;
     static const PdgId POSITRON = -ELECTRON;
     static const PdgId EMINUS = ELECTRON;
     static const PdgId EPLUS = POSITRON;
     static const PdgId MUON = 13;
     static const PdgId ANTIMUON = -MUON;
     static const PdgId TAU = 15;
     static const PdgId ANTITAU = -TAU;
     //@}
 
     /// @name Neutrinos
     //@{
     static const PdgId NU_E = 12;
     static const PdgId NU_EBAR = -NU_E;
     static const PdgId NU_MU = 14;
     static const PdgId NU_MUBAR = -NU_MU;
     static const PdgId NU_TAU = 16;
     static const PdgId NU_TAUBAR = -NU_TAU;
     //@}
 
     /// @name Bosons
     //@{
     static const PdgId PHOTON = 22;
     static const PdgId GAMMA = PHOTON;
     static const PdgId GLUON = 21;
     static const PdgId WPLUSBOSON = 24;
     static const PdgId WMINUSBOSON = -WPLUSBOSON;
     static const PdgId WPLUS = WPLUSBOSON;
     static const PdgId WMINUS = WMINUSBOSON;
     static const PdgId Z0BOSON = 23;
     static const PdgId ZBOSON = Z0BOSON;
     static const PdgId Z0 = Z0BOSON;
     static const PdgId HIGGSBOSON = 25;
     static const PdgId HIGGS = HIGGSBOSON;
     //@}
 
     /// @name Quarks
     //@{
     static const PdgId DQUARK = 1;
     static const PdgId UQUARK = 2;
     static const PdgId SQUARK = 3;
     static const PdgId CQUARK = 4;
     static const PdgId BQUARK = 5;
     static const PdgId TQUARK = 6;
     //@}
 
     /// @name Nucleons
     //@{
     static const PdgId PROTON = 2212;
     static const PdgId ANTIPROTON = -PROTON;
     static const PdgId PBAR = ANTIPROTON;
     static const PdgId NEUTRON = 2112;
     static const PdgId ANTINEUTRON = -NEUTRON;
     //@}
 
     /// @name Light mesons
     //@{
     static const PdgId PI0 = 111;
     static const PdgId PIPLUS = 211;
     static const PdgId PIMINUS = -PIPLUS;
     static const PdgId RHO0 = 113;
     static const PdgId RHOPLUS = 213;
     static const PdgId RHOMINUS = -RHOPLUS;
     static const PdgId K0L = 130;
     static const PdgId K0S = 310;
     static const PdgId KPLUS = 321;
     static const PdgId KMINUS = -KPLUS;
     static const PdgId ETA = 221;
     static const PdgId ETAPRIME = 331;
     static const PdgId PHI = 333;
     static const PdgId OMEGA = 223;
     //@}
 
     /// @name Charmonia
     //@{
     static const PdgId ETAC = 441;
     static const PdgId JPSI = 443;
     static const PdgId PSI2S = 100443;
     //@}
 
     /// @name Charm mesons
     //@{
     static const PdgId D0 = 421;
     static const PdgId D0BAR = -421;
     static const PdgId DPLUS = 411;
     static const PdgId DMINUS = -DPLUS;
+    static const PdgId DSTARPLUS = 413;
+    static const PdgId DSTARMINUS = -DSTARPLUS;
     static const PdgId DSPLUS = 431;
     static const PdgId DSMINUS = -DSPLUS;
     //@}
 
     /// @name Bottomonia
     //@{
     static const PdgId ETAB = 551;
     static const PdgId UPSILON1S = 553;
     static const PdgId UPSILON2S = 100553;
     static const PdgId UPSILON3S = 200553;
     static const PdgId UPSILON4S = 300553;
     //@}
 
     /// @name b mesons
     //@{
     static const PdgId B0 = 511;
     static const PdgId B0BAR = -511;
     static const PdgId BPLUS = 521;
     static const PdgId BMINUS = -BPLUS;
     static const PdgId B0S = 531;
     static const PdgId BCPLUS = 541;
     static const PdgId BCMINUS = -BCPLUS;
     //@}
 
     /// @name Baryons
     //@{
     static const PdgId LAMBDA = 3122;
     static const PdgId SIGMA0 = 3212;
     static const PdgId SIGMAPLUS = 3222;
     static const PdgId SIGMAMINUS = 3112;
     static const PdgId LAMBDACPLUS = 4122;
     static const PdgId LAMBDACMINUS = 4122;
     static const PdgId LAMBDAB = 5122;
     static const PdgId XI0 = 3322;
     static const PdgId XIMINUS = 3312;
     static const PdgId XIPLUS = -XIMINUS;
     static const PdgId OMEGAMINUS = 3334;
     static const PdgId OMEGAPLUS = -OMEGAMINUS;
     //@}
 
     /// @name Exotic/weird stuff
     //@{
     static const PdgId REGGEON = 110;
     static const PdgId POMERON = 990;
     static const PdgId ODDERON = 9990;
     static const PdgId GRAVITON = 39;
     static const PdgId NEUTRALINO1 = 1000022;
     static const PdgId GRAVITINO = 1000039;
     static const PdgId GLUINO = 1000021;
     /// @todo Add axion, black hole remnant, etc. on demand
     //@}
 
 
 
     /// Handler for particle name code <-> string conversion
     ///
     /// @todo Hide this utility class or equiv in an unnamed namespace in a .cc file.
     class ParticleNames {
     public:
 
       static const std::string& particleName(PdgId pid) {
         /// @todo Isn't there a nicer, pointerless way to do singletons?
         if (!_instance) _instance = unique_ptr<ParticleNames>(new ParticleNames);
         return _instance->_particleName(pid);
       }
 
       static PdgId particleId(const std::string& pname) {
         /// @todo Isn't there a nicer, pointerless way to do singletons?
         if (!_instance) _instance = unique_ptr<ParticleNames>(new ParticleNames);
         return _instance->_particleId(pname);
       }
 
       const std::string& _particleName(PdgId pid);
 
       PdgId _particleId(const std::string& pname);
 
 
     private:
 
       ParticleNames() {
         _add_pid_name(ELECTRON, "ELECTRON");
         _add_pid_name(POSITRON, "POSITRON");
         _add_pid_name(PROTON, "PROTON");
         _add_pid_name(ANTIPROTON, "ANTIPROTON");
         _add_pid_name(PHOTON, "PHOTON");
         _add_pid_name(NEUTRON, "NEUTRON");
         _add_pid_name(ANTINEUTRON, "ANTINEUTRON");
         _add_pid_name(MUON, "MUON");
         _add_pid_name(ANTIMUON, "ANTIMUON");
         _add_pid_name(NU_E, "NU_E");
         _add_pid_name(NU_EBAR, "NU_EBAR");
         _add_pid_name(NU_MU, "NU_MU");
         _add_pid_name(NU_MUBAR, "NU_MUBAR");
         _add_pid_name(NU_TAU, "NU_TAU");
         _add_pid_name(NU_TAUBAR, "NU_TAUBAR");
         _add_pid_name(PIPLUS, "PIPLUS");
         _add_pid_name(PIMINUS, "PIMINUS");
         _add_pid_name(TAU, "TAU");
         _add_pid_name(WPLUSBOSON, "WPLUSBOSON");
         _add_pid_name(WMINUSBOSON, "WMINUSBOSON");
         _add_pid_name(ZBOSON, "ZBOSON");
         _add_pid_name(HIGGS, "HIGGS");
         _add_pid_name(ANTITAU, "ANTITAU");
         _add_pid_name(ANY, "*");
       }
 
       void _add_pid_name(PdgId pid, const std::string& pname) {
         _ids_names[pid] = pname;
         _names_ids[pname] = pid;
       }
 
       static unique_ptr<ParticleNames> _instance;
 
       std::map<PdgId, std::string> _ids_names;
 
       std::map<std::string, PdgId> _names_ids;
 
     };
 
 
     /// Print a PdgId as a named string.
     inline const std::string& toParticleName(PdgId p) {
       return ParticleNames::particleName(p);
     }
 
 
     /// Print a PdgId as a named string.
     inline PdgId toParticleId(const std::string& pname) {
       return ParticleNames::particleId(pname);
     }
 
 
     /// Convenience maker of particle ID pairs from PdgIds.
     inline std::pair<PdgId,PdgId> make_pdgid_pair(PdgId a, PdgId b) {
       return make_pair(a, b);
     }
 
 
     /// Convenience maker of particle ID pairs from particle names.
     inline std::pair<PdgId,PdgId> make_pdgid_pair(const std::string& a, const std::string& b) {
       const PdgId pa = toParticleId(a);
       const PdgId pb = toParticleId(b);
       return make_pair(pa, pb);
     }
 
 
     /// Print a PdgIdPair as a string.
     inline std::string toBeamsString(const PdgIdPair& pair) {
       string out = "[" +
         toParticleName(pair.first) + ", " +
         toParticleName(pair.second) + "]";
       return out;
     }
 
 
   }
 
 }
 
 #endif
diff --git a/include/Rivet/Tools/ParticleSmearingFunctions.hh b/include/Rivet/Tools/ParticleSmearingFunctions.hh
new file mode 100644
--- /dev/null
+++ b/include/Rivet/Tools/ParticleSmearingFunctions.hh
@@ -0,0 +1,110 @@
+// -*- C++ -*-
+#ifndef RIVET_ParticleSmearingFunctions_HH
+#define RIVET_ParticleSmearingFunctions_HH
+
+#include "Rivet/Particle.hh"
+#include "Rivet/Tools/MomentumSmearingFunctions.hh"
+#include "Rivet/Tools/Random.hh"
+
+namespace Rivet {
+
+
+  /// @name Particle filtering, efficiency and smearing utils
+  //@{
+
+  /// @name Typedef for Particle smearing functions/functors
+  typedef std::function<Particle(const Particle&)> ParticleSmearFn;
+
+  /// @name Typedef for Particle efficiency functions/functors
+  typedef std::function<double(const Particle&)> ParticleEffFn;
+
+
+  /// Take a Particle and return 0
+  inline double PARTICLE_EFF_ZERO(const Particle& ) { return 0; }
+  /// @deprecated Alias for PARTICLE_EFF_ZERO
+  inline double PARTICLE_FN0(const Particle& ) { return 0; }
+
+  /// Take a Particle and return 1
+  inline double PARTICLE_EFF_ONE(const Particle& ) { return 1; }
+  /// @deprecated Alias for PARTICLE_EFF_ONE
+  inline double PARTICLE_FN1(const Particle& ) { return 1; }
+
+  /// Take a Particle and return a constant number
+  struct PARTICLE_EFF_CONST {
+    PARTICLE_EFF_CONST(double x) : _x(x) {}
+    double operator () (const Particle& )  const { return _x; }
+    double _x;
+  };
+
+
+  /// Take a Particle and return it unmodified
+  inline Particle PARTICLE_SMEAR_IDENTITY(const Particle& p) { return p; }
+
+
+  /// @brief Functor for simultaneous efficiency-filtering and smearing of Particles
+  ///
+  /// A central element of the SmearedParticles system
+  struct ParticleEffSmearFn {
+    ParticleEffSmearFn(const ParticleSmearFn& s, const ParticleEffFn& e)
+      : sfn(s), efn(e) {    }
+
+    ParticleEffSmearFn(const ParticleEffFn& e, const ParticleSmearFn& s)
+      : sfn(s), efn(e) {    }
+
+    ParticleEffSmearFn(const ParticleSmearFn& s)
+      : sfn(s), efn(PARTICLE_EFF_ONE) {    }
+
+    ParticleEffSmearFn(const ParticleEffFn& e)
+      : sfn(PARTICLE_SMEAR_IDENTITY), efn(e) {    }
+
+    ParticleEffSmearFn(double eff)
+      : ParticleEffSmearFn(PARTICLE_EFF_CONST(eff)) {    }
+
+    /// Smear and calculate an efficiency for the given particle
+    pair<Particle,double> operator() (const Particle& p) const {
+      return make_pair(sfn(p), efn(p));
+    }
+
+    /// Compare to another, for use in the projection system
+    int cmp(const ParticleEffSmearFn& other) const {
+      // cout << "Eff hashes = " << get_address(efn) << "," << get_address(other.efn) << "; "
+      //      << "smear hashes = " << get_address(sfn) << "," << get_address(other.sfn) << endl;
+      if (get_address(sfn) == 0 || get_address(other.sfn) == 0) return UNDEFINED;
+      if (get_address(efn) == 0 || get_address(other.efn) == 0) return UNDEFINED;
+      return Rivet::cmp(get_address(sfn), get_address(other.sfn)) || Rivet::cmp(get_address(efn), get_address(other.efn));
+    }
+
+    /// Automatic conversion to a smearing function
+    operator ParticleSmearFn () { return sfn; }
+    /// Automatic conversion to an efficiency function
+    operator ParticleEffFn () { return efn; }
+
+    // Stored functions/functors
+    const ParticleSmearFn sfn;
+    const ParticleEffFn efn;
+  };
+
+
+  /// Return true if Particle @a p is chosen to survive a random efficiency selection
+  inline bool efffilt(const Particle& p, const ParticleEffFn& feff) {
+    return rand01() < feff(p);
+  }
+
+  /// A functor to return true if Particle @a p survives a random efficiency selection
+  /// @deprecated Prefer
+  struct ParticleEffFilter {
+    template <typename FN>
+    ParticleEffFilter(const FN& feff) : _feff(feff) {}
+    ParticleEffFilter(double eff) : ParticleEffFilter( [&](const Particle& p){return eff;} ) {}
+    bool operator () (const Particle& p)  const { return efffilt(p, _feff); }
+  private:
+    const std::function<bool(const Particle&)> _feff;
+  };
+  using particleEffFilter = ParticleEffFilter;
+
+  //@}
+
+
+}
+
+#endif
diff --git a/include/Rivet/Tools/ParticleUtils.hh b/include/Rivet/Tools/ParticleUtils.hh
--- a/include/Rivet/Tools/ParticleUtils.hh
+++ b/include/Rivet/Tools/ParticleUtils.hh
@@ -1,654 +1,694 @@
 #ifndef RIVET_PARTICLEUTILS_HH
 #define RIVET_PARTICLEUTILS_HH
 
 #include "Rivet/Particle.hh"
 #include "Rivet/Tools/ParticleBaseUtils.hh"
 #include "Rivet/Tools/ParticleIdUtils.hh"
 
 // Macros to map Rivet::Particle functions to PID:: functions of the same name
 #define PARTICLE_TO_PID_BOOLFN(fname) inline bool fname (const Particle& p) { return PID:: fname (p.pid()); }
 #define PARTICLE_TO_PID_INTFN(fname) inline int fname (const Particle& p) { return PID:: fname (p.pid()); }
 #define PARTICLE_TO_PID_DBLFN(fname) inline double fname (const Particle& p) { return PID:: fname (p.pid()); }
 
 namespace Rivet {
 
 
-  /// std::function instantiation for functors taking a Particle and returning a bool
-  using ParticleSelector = function<bool(const Particle&)>;
-  /// std::function instantiation for functors taking two Particles and returning a bool
-  using ParticleSorter = function<bool(const Particle&, const Particle&)>;
-
-
   /// @name Particle classifier functions
   //@{
 
   /// Unbound function access to PID code
   inline int pid(const Particle& p) { return p.pid(); }
 
   /// Unbound function access to abs PID code
   inline int abspid(const Particle& p) { return p.abspid(); }
 
 
   /// Is this particle species charged?
   PARTICLE_TO_PID_BOOLFN(isCharged)
 
   /// Is this particle species neutral?
   PARTICLE_TO_PID_BOOLFN(isNeutral)
 
 
   /// Is this a neutrino?
   PARTICLE_TO_PID_BOOLFN(isNeutrino)
 
   /// Determine if the PID is that of a charged lepton
   PARTICLE_TO_PID_BOOLFN(isChargedLepton)
   PARTICLE_TO_PID_BOOLFN(isChLepton)
 
   /// Determine if the PID is that of a photon
   PARTICLE_TO_PID_BOOLFN(isPhoton)
 
   /// Determine if the PID is that of an electron or positron
   PARTICLE_TO_PID_BOOLFN(isElectron)
 
   /// Determine if the PID is that of an muon or antimuon
   PARTICLE_TO_PID_BOOLFN(isMuon)
 
   /// Determine if the PID is that of an tau or antitau
   PARTICLE_TO_PID_BOOLFN(isTau)
 
   /// Determine if the PID is that of a hadron
   PARTICLE_TO_PID_BOOLFN(isHadron)
 
   /// Determine if the PID is that of a meson
   PARTICLE_TO_PID_BOOLFN(isMeson)
 
   /// Determine if the PID is that of a baryon
   PARTICLE_TO_PID_BOOLFN(isBaryon)
 
   /// Determine if the PID is that of a quark
   PARTICLE_TO_PID_BOOLFN(isQuark)
 
   /// Determine if the PID is that of a parton (quark or gluon)
   PARTICLE_TO_PID_BOOLFN(isParton)
 
 
 
   /// Determine if the PID is that of a W+
   PARTICLE_TO_PID_BOOLFN(isWplus)
 
   /// Determine if the PID is that of a W-
   PARTICLE_TO_PID_BOOLFN(isWminus)
 
   /// Determine if the PID is that of a W+-
   PARTICLE_TO_PID_BOOLFN(isW)
 
   /// Determine if the PID is that of a Z0
   PARTICLE_TO_PID_BOOLFN(isZ)
 
   /// Determine if the PID is that of an SM/lightest SUSY Higgs
   PARTICLE_TO_PID_BOOLFN(isHiggs)
 
   /// Determine if the PID is that of an s/sbar
   PARTICLE_TO_PID_BOOLFN(isStrange)
 
   /// Determine if the PID is that of a c/cbar
   PARTICLE_TO_PID_BOOLFN(isCharm)
 
   /// Determine if the PID is that of a b/bbar
   PARTICLE_TO_PID_BOOLFN(isBottom)
 
   /// Determine if the PID is that of a t/tbar
   PARTICLE_TO_PID_BOOLFN(isTop)
 
 
   /// Determine if the particle is a heavy flavour hadron or parton
   PARTICLE_TO_PID_BOOLFN(isHeavyFlavour)
 
   /// Determine if the PID is that of a heavy parton (c,b,t)
   PARTICLE_TO_PID_BOOLFN(isHeavyParton)
 
   /// Determine if the PID is that of a light parton (u,d,s)
   PARTICLE_TO_PID_BOOLFN(isLightParton)
 
 
   /// Determine if the PID is that of a heavy flavour (b or c) meson
   PARTICLE_TO_PID_BOOLFN(isHeavyMeson)
 
   /// Determine if the PID is that of a heavy flavour (b or c) baryon
   PARTICLE_TO_PID_BOOLFN(isHeavyBaryon)
 
   /// Determine if the PID is that of a heavy flavour (b or c) hadron
   PARTICLE_TO_PID_BOOLFN(isHeavyHadron)
 
 
   /// Determine if the PID is that of a light flavour (not b or c) meson
   PARTICLE_TO_PID_BOOLFN(isLightMeson)
 
   /// Determine if the PID is that of a light flavour (not b or c) baryon
   PARTICLE_TO_PID_BOOLFN(isLightBaryon)
 
   /// Determine if the PID is that of a light flavour (not b or c) hadron
   PARTICLE_TO_PID_BOOLFN(isLightHadron)
 
 
   /// Determine if the PID is that of a b-meson.
   PARTICLE_TO_PID_BOOLFN(isBottomMeson)
 
   /// Determine if the PID is that of a b-baryon.
   PARTICLE_TO_PID_BOOLFN(isBottomBaryon)
 
   /// Determine if the PID is that of a b-hadron.
   PARTICLE_TO_PID_BOOLFN(isBottomHadron)
 
 
   /// @brief Determine if the PID is that of a c-meson.
   ///
   /// Specifically, the _heaviest_ quark is a c: a B_c is a b-meson and NOT a c-meson.
   /// Charmonia (closed charm) are counted as c-mesons here.
   PARTICLE_TO_PID_BOOLFN(isCharmMeson)
 
   /// @brief Determine if the PID is that of a c-baryon.
   ///
   /// Specifically, the _heaviest_ quark is a c: a baryon containing a b & c
   /// is a b-baryon and NOT a c-baryon. To test for the simpler case, just use
   /// a combination of hasCharm() and isBaryon().
   PARTICLE_TO_PID_BOOLFN(isCharmBaryon)
 
   /// Determine if the PID is that of a c-hadron.
   PARTICLE_TO_PID_BOOLFN(isCharmHadron)
 
 
   // /// Determine if the PID is that of a strange meson
   // PARTICLE_TO_PID_BOOLFN(isStrangeMeson)
 
   // /// Determine if the PID is that of a strange baryon
   // PARTICLE_TO_PID_BOOLFN(isStrangeBaryon)
 
   // /// Determine if the PID is that of a strange hadron
   // PARTICLE_TO_PID_BOOLFN(isStrangeHadron)
 
 
 
   /// Is this a pomeron, odderon, or generic reggeon?
   PARTICLE_TO_PID_BOOLFN(isReggeon)
 
   /// Determine if the PID is that of a diquark (used in hadronization models)
   PARTICLE_TO_PID_BOOLFN(isDiquark)
 
   /// Determine if the PID is that of a pentaquark (hypothetical hadron)
   PARTICLE_TO_PID_BOOLFN(isPentaquark)
 
   /// Is this a fundamental SUSY particle?
   PARTICLE_TO_PID_BOOLFN(isSUSY)
 
   /// Is this an R-hadron?
   PARTICLE_TO_PID_BOOLFN(isRhadron)
 
   /// Is this a technicolor particle?
   PARTICLE_TO_PID_BOOLFN(isTechnicolor)
 
   /// Is this an excited (composite) quark or lepton?
   PARTICLE_TO_PID_BOOLFN(isExcited)
 
   /// Is this a Kaluza-Klein excitation?
   PARTICLE_TO_PID_BOOLFN(isKK)
 
   /// Is this a graviton?
   PARTICLE_TO_PID_BOOLFN(isGraviton)
 
   /// Is this a BSM particle (including graviton)?
   PARTICLE_TO_PID_BOOLFN(isBSM)
 
 
 
   /// Determine if the PID is in the generator-specific range
   PARTICLE_TO_PID_BOOLFN(isGenSpecific)
 
   /// Determine if the PID is that of an EW scale resonance
   PARTICLE_TO_PID_BOOLFN(isResonance)
 
   /// Check the PID for usability in transport codes like Geant4
   PARTICLE_TO_PID_BOOLFN(isTransportable)
 
 
 
   /// Does this particle contain an up quark?
   PARTICLE_TO_PID_BOOLFN(hasUp)
 
   /// Does this particle contain a down quark?
   PARTICLE_TO_PID_BOOLFN(hasDown)
 
   /// Does this particle contain a strange quark?
   PARTICLE_TO_PID_BOOLFN(hasStrange)
 
   /// Does this particle contain a charm quark?
   PARTICLE_TO_PID_BOOLFN(hasCharm)
 
   /// Does this particle contain a bottom quark?
   PARTICLE_TO_PID_BOOLFN(hasBottom)
 
   /// Does this particle contain a top quark?
   PARTICLE_TO_PID_BOOLFN(hasTop)
 
 
 
   /// jSpin returns 2J+1, where J is the total spin
   PARTICLE_TO_PID_INTFN(jSpin)
 
   /// sSpin returns 2S+1, where S is the spin
   PARTICLE_TO_PID_INTFN(sSpin)
 
   /// lSpin returns 2L+1, where L is the orbital angular momentum
   PARTICLE_TO_PID_INTFN(lSpin)
 
 
   /// Return the charge
   PARTICLE_TO_PID_DBLFN(charge)
 
   /// Return 3 times the charge (3 x quark charge is an int)
   PARTICLE_TO_PID_INTFN(charge3)
 
   /// Return the absolute charge
   PARTICLE_TO_PID_DBLFN(abscharge)
 
   /// Return 3 times the abs charge (3 x quark charge is an int)
   PARTICLE_TO_PID_INTFN(abscharge3)
 
   /// Alias for charge3
   /// @deprecated Use charge3
   PARTICLE_TO_PID_INTFN(threeCharge)
 
 
   /// Get the atomic number (number of protons) in a nucleus/ion
   PARTICLE_TO_PID_INTFN(nuclZ)
 
   /// Get the atomic weight (number of nucleons) in a nucleus/ion
   PARTICLE_TO_PID_INTFN(nuclA)
 
   /// If this is a nucleus (ion), get nLambda
   PARTICLE_TO_PID_INTFN(nuclNlambda)
 
   //@}
 
 
   /// @name Particle charge/sign comparison functions
   //@{
 
   /// @brief Return true if Particles @a a and @a b have the opposite charge sign
   /// @note Two neutrals returns false
   inline bool oppSign(const Particle& a, const Particle& b) {
     return sign(a.charge3()) == -sign(b.charge3()) && sign(a.charge3()) != ZERO;
   }
 
   /// Return true if Particles @a a and @a b have the same charge sign
   /// @note Two neutrals returns true
   inline bool sameSign(const Particle& a, const Particle& b) {
     return sign(a.charge3()) == sign(b.charge3());
   }
 
   /// Return true if Particles @a a and @a b have the exactly opposite charge
   /// @note Two neutrals returns false
   inline bool oppCharge(const Particle& a, const Particle& b) {
     return a.charge3() == -b.charge3() && a.charge3() != 0;
   }
 
   /// Return true if Particles @a a and @a b have the same charge (including neutral)
   /// @note Two neutrals returns true
   inline bool sameCharge(const Particle& a, const Particle& b) {
     return a.charge3() == b.charge3();
   }
 
   /// Return true if Particles @a a and @a b have a different (not necessarily opposite) charge
   inline bool diffCharge(const Particle& a, const Particle& b) {
     return a.charge3() != b.charge3();
   }
 
   //@}
 
 
 
   //////////////////////////////////////
 
 
 
   /// @name Non-PID particle properties, via unbound functions
   //@{
 
+  /// @brief Determine whether a particle is the first in a decay chain to meet the function requirement
+  inline bool isFirstWith(const Particle& p, const ParticleSelector& f) {
+    return p.isFirstWith(f);
+  }
+
+  /// @brief Determine whether a particle is the first in a decay chain not to meet the function requirement
+  inline bool isFirstWithout(const Particle& p, const ParticleSelector& f) {
+    return p.isFirstWithout(f);
+  }
+
+
+  /// @brief Determine whether a particle is the last in a decay chain to meet the function requirement
+  inline bool isLastWith(const Particle& p, const ParticleSelector& f) {
+    return p.isLastWith(f);
+  }
+
+  /// @brief Determine whether a particle is the last in a decay chain not to meet the function requirement
+  inline bool isLastWithout(const Particle& p, const ParticleSelector& f) {
+    return p.isLastWithout(f);
+  }
+
+
+
+  /// @brief Determine whether a particle has an ancestor which meets the function requirement
+  inline bool hasAncestorWith(const Particle& p, const ParticleSelector& f) {
+    return p.hasAncestorWith(f);
+  }
+
+  /// @brief Determine whether a particle has an ancestor which doesn't meet the function requirement
+  inline bool hasAncestorWithout(const Particle& p, const ParticleSelector& f) {
+    return p.hasAncestorWithout(f);
+  }
+
+
+  /// @brief Determine whether a particle has a parent which meets the function requirement
+  inline bool hasParentWith(const Particle& p, const ParticleSelector& f) {
+    return p.hasParentWith(f);
+  }
+
+  /// @brief Determine whether a particle has a parent which doesn't meet the function requirement
+  inline bool hasParentWithout(const Particle& p, const ParticleSelector& f) {
+    return p.hasParentWithout(f);
+  }
+
+
+  /// @brief Determine whether a particle has a child which meets the function requirement
+  inline bool hasChildWith(const Particle& p, const ParticleSelector& f) {
+    return p.hasChildWith(f);
+  }
+
+  /// @brief Determine whether a particle has a child which doesn't meet the function requirement
+  inline bool hasChildWithout(const Particle& p, const ParticleSelector& f) {
+    return p.hasChildWithout(f);
+  }
+
+
+  /// @brief Determine whether a particle has a descendant which meets the function requirement
+  inline bool hasDescendantWith(const Particle& p, const ParticleSelector& f) {
+    return p.hasDescendantWith(f);
+    // return !p.allDescendants(f).empty();
+  }
+
+  /// @brief Determine whether a particle has a descendant which doesn't meet the function requirement
+  inline bool hasDescendantWithout(const Particle& p, const ParticleSelector& f) {
+    return p.hasDescendantWithout(f);
+  }
+
+
+  /// @brief Determine whether a particle has a stable descendant which meets the function requirement
+  inline bool hasStableDescendantWith(const Particle& p, const ParticleSelector& f) {
+    return p.hasStableDescendantWith(f);
+  }
+
+  /// @brief Determine whether a particle has a stable descendant which doesn't meet the function requirement
+  inline bool hasStableDescendantWithout(const Particle& p, const ParticleSelector& f) {
+    return p.hasStableDescendantWithout(f);
+  }
+
+
+
   /// Is this particle potentially visible in a detector?
   inline bool isVisible(const Particle& p) { return p.isVisible(); }
 
+  /// @brief Decide if a given particle is direct, via Particle::isDirect()
+  ///
+  /// A "direct" particle is one directly connected to the hard process. It is a
+  /// preferred alias for "prompt", since it has no confusing implications about
+  /// distinguishability by timing information.
+  ///
+  /// The boolean arguments allow a decay lepton to be considered direct if
+  /// its parent was a "real" direct lepton.
+  inline bool isDirect(const Particle& p, bool allow_from_direct_tau=false, bool allow_from_direct_mu=false) {
+    return p.isDirect(allow_from_direct_tau, allow_from_direct_mu);
+  }
+
   /// @brief Decide if a given particle is prompt, via Particle::isPrompt()
   ///
   /// The boolean arguments allow a decay lepton to be considered prompt if
   /// its parent was a "real" prompt lepton.
   inline bool isPrompt(const Particle& p, bool allow_from_prompt_tau=false, bool allow_from_prompt_mu=false) {
     return p.isPrompt(allow_from_prompt_tau, allow_from_prompt_mu);
   }
 
+
   /// Decide if a given particle is stable, via Particle::isStable()
   inline bool isStable(const Particle& p) { return p.isStable(); }
 
+  /// Decide if a given particle decays hadronically
+  inline bool hasHadronicDecay(const Particle& p) {
+    if (p.isStable()) return false;
+    if (p.hasChildWith(isHadron)) return true;
+    return false;
+  }
+
+  /// Decide if a given particle decays leptonically (decays, and no hadrons)
+  inline bool hasLeptonicDecay(const Particle& p) {
+    if (p.isStable()) return false;
+    if (p.hasChildWith(isHadron)) return false;
+    return true;
+  }
+
+
   /// Check whether a given PID is found in the particle's ancestor list
+  /// @deprecated Prefer hasAncestorWith
   inline bool hasAncestor(const Particle& p, PdgId pid)  { return p.hasAncestor(pid); }
 
   /// Determine whether the particle is from a b-hadron decay
   inline bool fromBottom(const Particle& p) { return p.fromBottom(); }
 
   /// @brief Determine whether the particle is from a c-hadron decay
   inline bool fromCharm(const Particle& p) { return p.fromCharm(); }
 
   /// @brief Determine whether the particle is from a hadron decay
   inline bool fromHadron(const Particle& p) { return p.fromHadron(); }
 
   /// @brief Determine whether the particle is from a tau decay
   inline bool fromTau(const Particle& p, bool prompt_taus_only=false) {
     return p.fromTau(prompt_taus_only);
   }
 
   /// @brief Determine whether the particle is from a prompt tau decay
   inline bool fromPromptTau(const Particle& p) { return p.fromPromptTau(); }
 
   /// @brief Determine whether the particle is from a hadron or tau decay
+  /// @deprecated Too vague: use fromHadron or fromHadronicTau
   inline bool fromDecay(const Particle& p) { return p.fromDecay(); }
 
-
-  /// @brief Determine whether a particle is the first in a decay chain to meet the function requirement
-  template <typename FN>
-  inline bool isFirstWith(const Particle& p, const FN& f) {
-    if (!f(p)) return false; //< This doesn't even meet f, let alone being the last to do so
-    if (any(p.parents(), f)) return false; //< If a direct parent has this property, this isn't the first
-    return true;
-  }
-
-  /// @brief Determine whether a particle is the first in a decay chain not to meet the function requirement
-  template <typename FN>
-  inline bool isFirstWithout(const Particle& p, const FN& f) {
-    return isFirstWith(p, [&](const Particle& pp){ return !f(pp); });
-  }
-
-  /// @brief Determine whether a particle is the last in a decay chain to meet the function requirement
-  template <typename FN>
-  inline bool isLastWith(const Particle& p, const FN& f) {
-    if (!f(p)) return false; //< This doesn't even meet f, let alone being the last to do so
-    if (any(p.children(), f)) return false; //< If a child has this property, this isn't the last
-    return true;
-  }
-
-  /// @brief Determine whether a particle is the last in a decay chain not to meet the function requirement
-  template <typename FN>
-  inline bool isLastWithout(const Particle& p, const FN& f) {
-    return isLastWith(p, [&](const Particle& pp){ return !f(pp); });
-  }
-
-
-  /// @brief Determine whether a particle has an ancestor which meets the function requirement
-  template <typename FN>
-  inline bool hasAncestorWith(const Particle& p, const FN& f) {
-    return p.hasAncestorWith(f);
-  }
-
-  /// @brief Determine whether a particle has an ancestor which doesn't meet the function requirement
-  template <typename FN>
-  inline bool hasAncestorWithout(const Particle& p, const FN& f) {
-    return hasAncestorWith(p, [&](const Particle& pp){ return !f(pp); });
-  }
-
-
-  /// @brief Determine whether a particle has a parent which meets the function requirement
-  template <typename FN>
-  inline bool hasParentWith(const Particle& p, const FN& f) {
-    return p.hasParentWith(f);
-  }
-
-  /// @brief Determine whether a particle has a parent which doesn't meet the function requirement
-  template <typename FN>
-  inline bool hasParentWithout(const Particle& p, const FN& f) {
-    return hasParentWith(p, [&](const Particle& pp){ return !f(pp); });
-  }
-
-
-  /// @brief Determine whether a particle has a child which meets the function requirement
-  template <typename FN>
-  inline bool hasChildWith(const Particle& p, const FN& f) {
-    return !p.children(f).empty();
-  }
-
-  /// @brief Determine whether a particle has a child which doesn't meet the function requirement
-  template <typename FN>
-  inline bool hasChildWithout(const Particle& p, const FN& f) {
-    return p.children(f).empty();
-  }
-
-
-  /// @brief Determine whether a particle has a descendant which meets the function requirement
-  template <typename FN>
-  inline bool hasDescendantWith(const Particle& p, const FN& f) {
-    return !p.allDescendants(f).empty();
-  }
-
-  /// @brief Determine whether a particle has a descendant which doesn't meet the function requirement
-  template <typename FN>
-  inline bool hasDescendantWithout(const Particle& p, const FN& f) {
-    return p.allDescendants(f).empty();
-  }
-
   //@}
 
 
   /// @name Particle classifier -> bool functors
   ///
   /// To be passed to any() or all() e.g. any(p.children(), HasPID(PID::MUON))
   //@{
 
   /// Base type for Particle -> bool functors
   struct BoolParticleFunctor {
     virtual bool operator()(const Particle& p) const = 0;
   };
 
+  struct BoolParticleAND : public BoolParticleFunctor {
+    BoolParticleAND(const std::vector<ParticleSelector>& sels) : selectors(sels) {}
+    BoolParticleAND(const ParticleSelector& a, const ParticleSelector& b) : selectors({a,b}) {}
+    BoolParticleAND(const ParticleSelector& a, const ParticleSelector& b, const ParticleSelector& c) : selectors({a,b,c}) {}
+    bool operator()(const Particle& p) const {
+      for (const ParticleSelector& sel : selectors) if (!sel(p)) return false;
+      return true;
+    }
+    std::vector<ParticleSelector> selectors;
+  };
+
+  struct BoolParticleOR : public BoolParticleFunctor {
+    BoolParticleOR(const std::vector<ParticleSelector>& sels) : selectors(sels) {}
+    BoolParticleOR(const ParticleSelector& a, const ParticleSelector& b) : selectors({a,b}) {}
+    BoolParticleOR(const ParticleSelector& a, const ParticleSelector& b, const ParticleSelector& c) : selectors({a,b,c}) {}
+    bool operator()(const Particle& p) const {
+      for (const ParticleSelector& sel : selectors) if (sel(p)) return true;
+      return false;
+    }
+    std::vector<ParticleSelector> selectors;
+  };
+
+  struct BoolParticleNOT : public BoolParticleFunctor {
+    BoolParticleNOT(const ParticleSelector& sel) : selector(sel) {}
+    bool operator()(const Particle& p) const { return !selector(p); }
+    ParticleSelector selector;
+  };
+
 
   /// PID matching functor
   struct HasPID : public BoolParticleFunctor {
     HasPID(PdgId pid) : targetpid(pid) { }
     bool operator()(const Particle& p) const { return p.pid() == targetpid; }
     PdgId targetpid;
   };
   using hasPID = HasPID;
 
   /// |PID| matching functor
   struct HasAbsPID : public BoolParticleFunctor {
     HasAbsPID(PdgId pid) : targetpid(abs(pid)) { }
     bool operator()(const Particle& p) const { return p.abspid() == abs(targetpid); }
     PdgId targetpid;
   };
   using hasAbsPID = HasAbsPID;
 
 
   /// Determine whether a particle is the first in a decay chain to meet the cut/function
   struct FirstParticleWith : public BoolParticleFunctor {
-    template <typename FN>
-    FirstParticleWith(const FN& f) : fn(f) { }
+    FirstParticleWith(const ParticleSelector& f) : fn(f) { }
     FirstParticleWith(const Cut& c);
     bool operator()(const Particle& p) const { return isFirstWith(p, fn); }
-    std::function<bool(const Particle&)> fn;
+    ParticleSelector fn;
   };
   using firstParticleWith = FirstParticleWith;
 
   /// Determine whether a particle is the first in a decay chain not to meet the cut/function
   struct FirstParticleWithout : public BoolParticleFunctor {
-    template <typename FN>
-    FirstParticleWithout(const FN& f) : fn(f) { }
+    FirstParticleWithout(const ParticleSelector& f) : fn(f) { }
     FirstParticleWithout(const Cut& c);
     bool operator()(const Particle& p) const { return isFirstWithout(p, fn); }
-    std::function<bool(const Particle&)> fn;
+    ParticleSelector fn;
   };
   using firstParticleWithout = FirstParticleWithout;
 
 
   /// Determine whether a particle is the last in a decay chain to meet the cut/function
   struct LastParticleWith : public BoolParticleFunctor {
     template <typename FN>
     LastParticleWith(const FN& f) : fn(f) { }
     LastParticleWith(const Cut& c);
     bool operator()(const Particle& p) const { return isLastWith(p, fn); }
     std::function<bool(const Particle&)> fn;
   };
   using lastParticleWith = LastParticleWith;
 
   /// Determine whether a particle is the last in a decay chain not to meet the cut/function
   struct LastParticleWithout : public BoolParticleFunctor {
-    template <typename FN>
-    LastParticleWithout(const FN& f) : fn(f) { }
+    LastParticleWithout(const ParticleSelector& f) : fn(f) { }
     LastParticleWithout(const Cut& c);
     bool operator()(const Particle& p) const { return isLastWithout(p, fn); }
-    std::function<bool(const Particle&)> fn;
+    ParticleSelector fn;
   };
   using lastParticleWithout = LastParticleWithout;
 
 
   /// Determine whether a particle has an ancestor which meets the cut/function
   struct HasParticleAncestorWith : public BoolParticleFunctor {
-    template <typename FN>
-    HasParticleAncestorWith(const FN& f) : fn(f) { }
+    HasParticleAncestorWith(const ParticleSelector& f) : fn(f) { }
     HasParticleAncestorWith(const Cut& c);
     bool operator()(const Particle& p) const { return hasAncestorWith(p, fn); }
-    std::function<bool(const Particle&)> fn;
+    ParticleSelector fn;
   };
   using hasParticleAncestorWith = HasParticleAncestorWith;
 
   /// Determine whether a particle has an ancestor which doesn't meet the cut/function
   struct HasParticleAncestorWithout : public BoolParticleFunctor {
-    template <typename FN>
-    HasParticleAncestorWithout(const FN& f) : fn(f) { }
+    HasParticleAncestorWithout(const ParticleSelector& f) : fn(f) { }
     HasParticleAncestorWithout(const Cut& c);
     bool operator()(const Particle& p) const { return hasAncestorWithout(p, fn); }
-    std::function<bool(const Particle&)> fn;
+    ParticleSelector fn;
   };
   using hasParticleAncestorWithout = HasParticleAncestorWithout;
 
 
   /// Determine whether a particle has an parent which meets the cut/function
   struct HasParticleParentWith : public BoolParticleFunctor {
-    template <typename FN>
-    HasParticleParentWith(const FN& f) : fn(f) { }
+    HasParticleParentWith(const ParticleSelector& f) : fn(f) { }
     HasParticleParentWith(const Cut& c);
     bool operator()(const Particle& p) const { return hasParentWith(p, fn); }
-    std::function<bool(const Particle&)> fn;
+    ParticleSelector fn;
   };
   using hasParticleParentWith = HasParticleParentWith;
 
   /// Determine whether a particle has an parent which doesn't meet the cut/function
   struct HasParticleParentWithout : public BoolParticleFunctor {
-    template <typename FN>
-    HasParticleParentWithout(const FN& f) : fn(f) { }
+    HasParticleParentWithout(const ParticleSelector& f) : fn(f) { }
     HasParticleParentWithout(const Cut& c);
     bool operator()(const Particle& p) const { return hasParentWithout(p, fn); }
-    std::function<bool(const Particle&)> fn;
+    ParticleSelector fn;
   };
   using hasParticleParentWithout = HasParticleParentWithout;
 
 
   /// Determine whether a particle has a child which meets the cut/function
   struct HasParticleChildWith : public BoolParticleFunctor {
-    template <typename FN>
-    HasParticleChildWith(const FN& f) : fn(f) { }
+    HasParticleChildWith(const ParticleSelector& f) : fn(f) { }
     HasParticleChildWith(const Cut& c);
     bool operator()(const Particle& p) const { return hasChildWith(p, fn); }
-    std::function<bool(const Particle&)> fn;
+    ParticleSelector fn;
   };
   using hasParticleChildWith = HasParticleChildWith;
 
   /// Determine whether a particle has a child which doesn't meet the cut/function
   struct HasParticleChildWithout : public BoolParticleFunctor {
-    template <typename FN>
-    HasParticleChildWithout(const FN& f) : fn(f) { }
+    HasParticleChildWithout(const ParticleSelector& f) : fn(f) { }
     HasParticleChildWithout(const Cut& c);
     bool operator()(const Particle& p) const { return hasChildWithout(p, fn); }
-    std::function<bool(const Particle&)> fn;
+    ParticleSelector fn;
   };
   using hasParticleChildWithout = HasParticleChildWithout;
 
 
   /// Determine whether a particle has a descendant which meets the cut/function
   struct HasParticleDescendantWith : public BoolParticleFunctor {
-    template <typename FN>
-    HasParticleDescendantWith(const FN& f) : fn(f) { }
+    HasParticleDescendantWith(const ParticleSelector& f) : fn(f) { }
     HasParticleDescendantWith(const Cut& c);
     bool operator()(const Particle& p) const { return hasDescendantWith(p, fn); }
-    std::function<bool(const Particle&)> fn;
+    ParticleSelector fn;
   };
   using hasParticleDescendantWith = HasParticleDescendantWith;
 
   /// Determine whether a particle has a descendant which doesn't meet the cut/function
   struct HasParticleDescendantWithout : public BoolParticleFunctor {
-    template <typename FN>
-    HasParticleDescendantWithout(const FN& f) : fn(f) { }
+    HasParticleDescendantWithout(const ParticleSelector& f) : fn(f) { }
     HasParticleDescendantWithout(const Cut& c);
     bool operator()(const Particle& p) const { return hasDescendantWithout(p, fn); }
-    std::function<bool(const Particle&)> fn;
+    ParticleSelector fn;
   };
   using hasParticleDescendantWithout = HasParticleDescendantWithout;
 
   //@}
 
 
   /// @name Unbound functions for filtering particles
   //@{
 
   /// Filter a particle collection in-place to the subset that passes the supplied Cut
   Particles& ifilter_select(Particles& particles, const Cut& c);
   /// Alias for ifilter_select
   /// @deprecated Use ifilter_select
   inline Particles& ifilterBy(Particles& particles, const Cut& c) { return ifilter_select(particles, c); }
 
   /// Filter a particle collection in-place to the subset that passes the supplied Cut
   inline Particles filter_select(const Particles& particles, const Cut& c) {
     Particles rtn = particles;
     return ifilter_select(rtn, c);
   }
   /// Alias for ifilter_select
   /// @deprecated Use filter_select
   inline Particles filterBy(const Particles& particles, const Cut& c) { return filter_select(particles, c); }
 
   /// Filter a particle collection in-place to the subset that passes the supplied Cut
   inline Particles filter_select(const Particles& particles, const Cut& c, Particles& out) {
     out = filter_select(particles, c);
     return out;
   }
   /// Alias for ifilter_select
   /// @deprecated Use filter_select
   inline Particles filterBy(const Particles& particles, const Cut& c, Particles& out) { return filter_select(particles, c, out); }
 
 
   /// Filter a particle collection in-place to the subset that fails the supplied Cut
   Particles& ifilter_discard(Particles& particles, const Cut& c);
 
   /// Filter a particle collection in-place to the subset that fails the supplied Cut
   inline Particles filter_discard(const Particles& particles, const Cut& c) {
     Particles rtn = particles;
     return ifilter_discard(rtn, c);
   }
 
   /// Filter a particle collection in-place to the subset that fails the supplied Cut
   inline Particles filter_discard(const Particles& particles, const Cut& c, Particles& out) {
     out = filter_discard(particles, c);
     return out;
   }
 
   //@}
 
 
 
   /// @name Particle pair functions
   //@{
 
   /// Get the PDG ID codes of a ParticlePair
   /// @todo Make ParticlePair a custom class instead?
   inline PdgIdPair pids(const ParticlePair& pp) {
     return make_pair(pp.first.pid(), pp.second.pid());
   }
 
   //@}
 
 
 }
 
 #endif
diff --git a/include/Rivet/Tools/Random.hh b/include/Rivet/Tools/Random.hh
new file mode 100644
--- /dev/null
+++ b/include/Rivet/Tools/Random.hh
@@ -0,0 +1,28 @@
+// -*- C++ -*-
+#ifndef RIVET_Random_HH
+#define RIVET_Random_HH
+
+#include <random>
+// #if defined(_OPENMP)
+// #include "omp.h"
+// #endif
+
+namespace Rivet {
+
+
+  /// Return a thread-safe random number generator (mainly for internal use)
+  mt19937& rng();
+
+  /// Return a uniformly sampled random number between 0 and 1
+  double rand01();
+
+  /// Return a Gaussian/normal sampled random number with the given mean and width
+  double randnorm(double loc, double scale);
+
+  /// Return a log-normal sampled random number
+  double randlognorm(double loc, double scale);
+
+
+}
+
+#endif
diff --git a/include/Rivet/Tools/RivetSTL.hh b/include/Rivet/Tools/RivetSTL.hh
--- a/include/Rivet/Tools/RivetSTL.hh
+++ b/include/Rivet/Tools/RivetSTL.hh
@@ -1,173 +1,175 @@
 #ifndef RIVET_RivetSTL_HH
 #define RIVET_RivetSTL_HH
 
 #include <string>
+#include <array>
 #include <vector>
 #include <set>
 #include <list>
 #include <map>
 #include <utility>
 #include <algorithm>
 #include <type_traits>
 #include <stdexcept>
 #include <cassert>
 #include <memory>
 #include <typeinfo>
 #include <sstream>
 #include <fstream>
 #include <iostream>
 #include <iomanip>
 #include <cmath>
 #include <limits>
+#include <functional>
 
 
 #ifndef foreach
 /// @decl A foreach macro for backward compatibility with BOOST_FOREACH
 #define foreach(value, container) for (value : container)
 #endif
 
 
 namespace Rivet {
 
 
   /// We implicitly use STL entities in the Rivet namespace
   using namespace std;
 
 
   /// @name Streaming containers as string reps
   /// @todo Make these named toStr rather than operator<<
   /// @todo Make these generic to any iterable
   //@{
 
   /// Convenient function for streaming out vectors of any streamable object.
   template<typename T>
   inline std::ostream& operator<<(std::ostream& os, const std::vector<T>& vec) {
     os << "[ ";
     for (size_t i=0; i<vec.size(); ++i) {
       os << vec[i] << " ";
     }
     os << "]";
     return os;
   }
 
   /// Convenient function for streaming out lists of any streamable object.
   template<typename T>
   inline std::ostream& operator<<(std::ostream& os, const std::list<T>& vec) {
     os << "[ ";
     for (size_t i=0; i<vec.size(); ++i) {
       os << vec[i] << " ";
     }
     os << "]";
     return os;
   }
 
   //@}
 
 
   /// @name Boolean-return container searching
   //@{
 
   /// @todo Use SFINAE, Boost.Range, or other template trickery for more generic container matching?
 
   /// Does @a s contain @a sub as a substring?
   inline bool contains(const std::string& s, const std::string& sub) {
     return s.find(sub) != string::npos;
   }
 
   /// Does the vector @a v contain @a x?
   template <typename T>
   inline bool contains(const std::vector<T>& v, const T& x) {
     return find(v.begin(), v.end(), x) != v.end();
   }
 
   /// Does the list @a l contain @a x?
   template <typename T>
   inline bool contains(const std::list<T>& l, const T& x) {
     return find(l.begin(), l.end(), x) != l.end();
   }
 
   /// Does the set @a s contain @a x?
   template <typename T>
   inline bool contains(const std::set<T>& s, const T& x) {
     return find(s.begin(), s.end(), x) != s.end();
   }
 
   /// Does the map @a m contain the key @a key?
   template <typename K, typename T>
   inline bool has_key(const std::map<K, T>& m, const K& key) {
     return m.find(key) != m.end();
   }
 
   /// Does the map @a m contain the value @a val?
   template <typename K, typename T>
   inline bool has_value(const std::map<K, T>& m, const T& val) {
     for (typename std::map<K,T>::const_iterator it = m.begin(); it != m.end(); ++it) {
       if (it->second == val) return true;
     }
     return false;
   }
 
   //@}
 
 
 }
 
 namespace std {
 
 
   /// @name Container filling and merging
   //@{
 
   /// Append a single item to vector @a v
   template <typename T>
   inline void operator+=(std::vector<T>& v, const T& x) { v.push_back(x); }
 
   /// Append all the items from vector @a v2 to vector @a v1
   template <typename T>
   inline void operator+=(std::vector<T>& v1, const std::vector<T>& v2) {
     for (const auto& x : v2) v1.push_back(x);
   }
 
   /// Create a new vector from the concatenated items in vectors @a v1 and @a v2
   template <typename T>
   inline std::vector<T> operator+(const std::vector<T>& v1, const std::vector<T>& v2) {
     std::vector<T> rtn(v1);
     rtn += v2;
     return rtn;
   }
 
 
   /// Merge the contents of set @a s2 into @a s1
   template <typename T>
   inline void operator+=(std::set<T>& s1, const std::set<T>& s2) {
     for (const auto& x : s2) s1.insert(x);
   }
 
   /// Merge the contents of sets @a s1 and @a s2
   template <typename T>
   inline std::set<T> operator+(const std::set<T>& s1, const std::set<T>& s2) {
     std::set<T> rtn(s1);
     rtn += s2;
     return rtn;
   }
 
   //@}
 
 
   /// @name Function helpers
   //@{
 
   /// Get a function pointer / hash integer from an std::function
   template<typename T, typename... U>
   inline size_t get_address(std::function<T(U...)> f) {
     typedef T(fnType)(U...);
     fnType ** fnPointer = f.template target<fnType*>();
     return (fnPointer != nullptr) ? reinterpret_cast<size_t>(*fnPointer) : 0;
   }
 
   //@}
 
 
 }
 
 #endif
diff --git a/include/Rivet/Tools/SmearingFunctions.hh b/include/Rivet/Tools/SmearingFunctions.hh
--- a/include/Rivet/Tools/SmearingFunctions.hh
+++ b/include/Rivet/Tools/SmearingFunctions.hh
@@ -1,823 +1,677 @@
 // -*- C++ -*-
 #ifndef RIVET_SmearingFunctions_HH
 #define RIVET_SmearingFunctions_HH
 
-#include "Rivet/Particle.hh"
-#include "Rivet/Jet.hh"
-#include <random>
+#include "Rivet/Tools/MomentumSmearingFunctions.hh"
+#include "Rivet/Tools/ParticleSmearingFunctions.hh"
+#include "Rivet/Tools/JetSmearingFunctions.hh"
 
 namespace Rivet {
 
 
-  /// @name Random number and filtering utils
-  //@{
-
-  /// Return a uniformly sampled random number between 0 and 1
-  /// @todo Where is it seeded?! Default = by timestamp?!
-  /// @todo Move to (math?)utils
-  /// @todo Need to isolate random generators to a single thread
-  inline double rand01() {
-    //return rand() / (double)RAND_MAX;
-    static random_device rd;
-    static mt19937 gen(rd());
-    return generate_canonical<double, 10>(gen);
-  }
-
-  /// Return true if Particle @a p is chosen to survive a random efficiency selection
-  template <typename FN>
-  inline bool efffilt(const Particle& p, FN& feff) {
-    return rand01() < feff(p);
-  }
-  /// Return true if Jet @a j is chosen to survive a random efficiency selection
-  template <typename FN>
-  inline bool efffilt(const Jet& j, FN& feff) {
-    return rand01() < feff(j);
-  }
-
-  /// A functor to return true if Particle @a p survives a random efficiency selection
-  struct ParticleEffFilter {
-    template <typename FN>
-    ParticleEffFilter(const FN& feff) : _feff(feff) {}
-    ParticleEffFilter(double eff) : ParticleEffFilter( [&](const Particle& p){return eff;} ) {}
-    bool operator () (const Particle& p)  const { return efffilt(p, _feff); }
-  private:
-    const std::function<bool(const Particle&)> _feff;
-  };
-  using particleEffFilter = ParticleEffFilter;
-
-  /// A functor to return true if Jet @a j survives a random efficiency selection
-  struct JetEffFilter {
-    template <typename FN>
-    JetEffFilter(const FN& feff) : _feff(feff) {}
-    JetEffFilter(double eff) : JetEffFilter( [&](const Jet& j){return eff;} ) {}
-    bool operator () (const Jet& j) const { return efffilt(j, _feff); }
-  private:
-    const std::function<bool(const Jet&)> _feff;
-  };
-  using jetEffFilter = JetEffFilter;
-
-  //@}
-
-
-  /// @name General particle & momentum efficiency and smearing functions
-  //@{
-
-  /// Take a Particle and return 0
-  inline double PARTICLE_FN0(const Particle& p) { return 0; }
-  /// Take a Particle and return 1
-  inline double PARTICLE_FN1(const Particle& p) { return 1; }
-  /// Take a Particle and return it unmodified
-  inline Particle PARTICLE_SMEAR_IDENTITY(const Particle& p) { return p; }
-
-
-  /// Take a FourMomentum and return 0
-  inline double P4_FN0(const FourMomentum& p) { return 0; }
-  /// Take a FourMomentum and return 1
-  inline double P4_FN1(const FourMomentum& p) { return 1; }
-  /// Take a FourMomentum and return it unmodified
-  inline FourMomentum P4_SMEAR_IDENTITY(const FourMomentum& p) { return p; }
-
-  /// Smear a FourMomentum's energy using a Gaussian of absolute width @a resolution
-  /// @todo Also make jet versions that update/smear constituents?
-  inline FourMomentum P4_SMEAR_E_GAUSS(const FourMomentum& p, double resolution) {
-    /// @todo Need to isolate random generators to a single thread
-    static random_device rd;
-    static mt19937 gen(rd());
-    normal_distribution<> d(p.E(), resolution);
-    const double mass = p.mass2() > 0 ? p.mass() : 0; //< numerical carefulness...
-    const double smeared_E = max(d(gen), mass); //< can't let the energy go below the mass!
-    return FourMomentum::mkEtaPhiME(p.eta(), p.phi(), mass, smeared_E);
-  }
-
-  /// Smear a FourMomentum's transverse momentum using a Gaussian of absolute width @a resolution
-  inline FourMomentum P4_SMEAR_PT_GAUSS(const FourMomentum& p, double resolution) {
-    /// @todo Need to isolate random generators to a single thread
-    static random_device rd;
-    static mt19937 gen(rd());
-    normal_distribution<> d(p.pT(), resolution);
-    const double smeared_pt = max(d(gen), 0.);
-    const double mass = p.mass2() > 0 ? p.mass() : 0; //< numerical carefulness...
-    return FourMomentum::mkEtaPhiMPt(p.eta(), p.phi(), mass, smeared_pt);
-  }
-
-  /// Smear a FourMomentum's mass using a Gaussian of absolute width @a resolution
-  inline FourMomentum P4_SMEAR_MASS_GAUSS(const FourMomentum& p, double resolution) {
-    /// @todo Need to isolate random generators to a single thread
-    static random_device rd;
-    static mt19937 gen(rd());
-    normal_distribution<> d(p.mass(), resolution);
-    const double smeared_mass = max(d(gen), 0.);
-    return FourMomentum::mkEtaPhiMPt(p.eta(), p.phi(), smeared_mass, p.pT());
-  }
-
-
-  /// Take a Vector3 and return 0
-  inline double P3_FN0(const Vector3& p) { return 0; }
-  /// Take a Vector3 and return 1
-  inline double P3_FN1(const Vector3& p) { return 1; }
-  /// Take a Vector3 and return it unmodified
-  inline Vector3 P3_SMEAR_IDENTITY(const Vector3& p) { return p; }
-
-  /// Smear a Vector3's length using a Gaussian of absolute width @a resolution
-  inline Vector3 P3_SMEAR_LEN_GAUSS(const Vector3& p, double resolution) {
-    /// @todo Need to isolate random generators to a single thread
-    static random_device rd;
-    static mt19937 gen(rd());
-    normal_distribution<> d(p.mod(), resolution);
-    const double smeared_mod = max(d(gen), 0.); //< can't let the energy go below the mass!
-    return smeared_mod * p.unit();
-  }
-
-  //@}
-
-
   /// @name Electron efficiency and smearing functions
   //@{
 
   /// ATLAS Run 1 electron reconstruction efficiency
   /// @todo Include reco eff (but no e/y discrimination) in forward region
   /// @todo How to use this in combination with tracking eff?
   inline double ELECTRON_EFF_ATLAS_RUN1(const Particle& e) {
     if (e.abseta() > 2.5) return 0;
     if (e.pT() < 10*GeV) return 0;
     return (e.abseta() < 1.5) ? 0.95 : 0.85;
   }
 
   /// ATLAS Run 2 electron reco efficiency
   /// @todo Currently just a copy of Run 1: fix!
   inline double ELECTRON_EFF_ATLAS_RUN2(const Particle& e) {
     return ELECTRON_EFF_ATLAS_RUN1(e);
   }
 
 
   /// @brief ATLAS Run 2 'loose' electron identification/selection efficiency
   ///
   /// Values read from Fig 3 of ATL-PHYS-PUB-2015-041
   /// @todo What about faking by jets or non-electrons?
   inline double ELECTRON_IDEFF_ATLAS_RUN2_LOOSE(const Particle& e) {
 
     // Manually symmetrised eta eff histogram
     const static vector<double> edges_eta = { 0.0,   0.1,   0.8,   1.37,  1.52,  2.01,  2.37,  2.47 };
     const static vector<double> effs_eta  = { 0.950, 0.965, 0.955, 0.885, 0.950, 0.935, 0.90 };
     // Et eff histogram (10-20 is a guess)
     const static vector<double> edges_et = { 0,   10,   20,   25,   30,   35,   40,    45,    50,   60,  80 };
     const static vector<double> effs_et  = { 0.0, 0.90, 0.91, 0.92, 0.94, 0.95, 0.955, 0.965, 0.97, 0.98 };
 
     if (e.abseta() > 2.47) return 0.0; // no ID outside the tracker
 
     const int i_eta = binIndex(e.abseta(), edges_eta);
     const int i_et = binIndex(e.Et()/GeV, edges_et, true);
     const double eff = effs_et[i_et] * effs_eta[i_eta] / 0.95; //< norm factor as approximate double differential
     return min(eff, 1.0);
   }
 
 
   /// @brief ATLAS Run 1 'medium' electron identification/selection efficiency
   inline double ELECTRON_IDEFF_ATLAS_RUN1_MEDIUM(const Particle& e) {
 
     const static vector<double> eta_edges_10 = {0.000, 0.049, 0.454, 1.107, 1.46, 1.790, 2.277, 2.500};
     const static vector<double> eta_vals_10  = {0.730, 0.757, 0.780, 0.771, 0.77, 0.777, 0.778};
 
     const static vector<double> eta_edges_15 = {0.000, 0.053, 0.456, 1.102, 1.463, 1.783, 2.263, 2.500};
     const static vector<double> eta_vals_15  = {0.780, 0.800, 0.819, 0.759, 0.749, 0.813, 0.829};
 
     const static vector<double> eta_edges_20 = {0.000, 0.065, 0.362, 0.719, 0.980, 1.289, 1.455, 1.681, 1.942, 2.239, 2.452, 2.500};
     const static vector<double> eta_vals_20  = {0.794, 0.806, 0.816, 0.806, 0.797, 0.774, 0.764, 0.788, 0.793, 0.806, 0.825};
 
     const static vector<double> eta_edges_25 = {0.000, 0.077, 0.338, 0.742, 1.004, 1.265, 1.467, 1.692, 1.940, 2.227, 2.452, 2.500};
     const static vector<double> eta_vals_25  = {0.833, 0.843, 0.853, 0.845, 0.839, 0.804, 0.790, 0.825, 0.830, 0.833, 0.839};
 
     const static vector<double> eta_edges_30 = {0.000, 0.077, 0.350, 0.707, 0.980, 1.289, 1.479, 1.681, 1.942, 2.239, 2.441, 2.500};
     const static vector<double> eta_vals_30  = {0.863, 0.872, 0.881, 0.874, 0.870, 0.824, 0.808, 0.847, 0.845, 0.840, 0.842};
 
     const static vector<double> eta_edges_35 = {0.000, 0.058, 0.344, 0.700, 1.009, 1.270, 1.458, 1.685, 1.935, 2.231, 2.468, 2.500};
     const static vector<double> eta_vals_35  = {0.878, 0.889, 0.901, 0.895, 0.893, 0.849, 0.835, 0.868, 0.863, 0.845, 0.832};
 
     const static vector<double> eta_edges_40 = {0.000, 0.047, 0.355, 0.699, 0.983, 1.280, 1.446, 1.694, 1.943, 2.227, 2.441, 2.500};
     const static vector<double> eta_vals_40  = {0.894, 0.901, 0.909, 0.905, 0.904, 0.875, 0.868, 0.889, 0.876, 0.848, 0.827};
 
     const static vector<double> eta_edges_45 = {0.000, 0.058, 0.356, 0.712, 0.997, 1.282, 1.459, 1.686, 1.935, 2.220, 2.444, 2.500};
     const static vector<double> eta_vals_45  = {0.900, 0.911, 0.923, 0.918, 0.917, 0.897, 0.891, 0.904, 0.894, 0.843, 0.796};
 
     const static vector<double> eta_edges_50 = {0.000, 0.059, 0.355, 0.711, 0.983, 1.280, 1.469, 1.682, 1.919, 2.227, 2.441, 2.500};
     const static vector<double> eta_vals_50  = {0.903, 0.913, 0.923, 0.922, 0.923, 0.903, 0.898, 0.908, 0.895, 0.831, 0.774};
 
     const static vector<double> eta_edges_60 = {0.000, 0.053, 0.351, 0.720, 1.006, 1.291, 1.469, 1.696, 1.946, 2.243, 2.455, 2.500};
     const static vector<double> eta_vals_60  = {0.903, 0.917, 0.928, 0.924, 0.927, 0.915, 0.911, 0.915, 0.899, 0.827, 0.760};
 
     const static vector<double> eta_edges_80 = {0.000, 0.053, 0.351, 0.720, 0.994, 1.292, 1.482, 1.708, 1.934, 2.220, 2.458, 2.500};
     const static vector<double> eta_vals_80  = {0.936, 0.942, 0.952, 0.956, 0.956, 0.934, 0.931, 0.944, 0.933, 0.940, 0.948};
 
     const static vector<double> et_edges = { 10, 15, 20, 25, 30, 35, 40, 45, 50, 60, 80 };
     const static vector< vector<double> > et_eta_edges = { eta_edges_10, eta_edges_15, eta_edges_20, eta_edges_25, eta_edges_30, eta_edges_35, eta_edges_40, eta_edges_45, eta_edges_50, eta_edges_60, eta_edges_80 };
     const static vector< vector<double> > et_eta_vals  = { eta_vals_10, eta_vals_15, eta_vals_20, eta_vals_25, eta_vals_30, eta_vals_35, eta_vals_40, eta_vals_45, eta_vals_50, eta_vals_60, eta_vals_80 };
 
     if (e.abseta() > 2.5 || e.Et() < 10*GeV) return 0.0;
     const int i_et = binIndex(e.Et()/GeV, et_edges, true);
     const int i_eta = binIndex(e.abseta(), et_eta_edges[i_et]);
     return et_eta_vals[i_et][i_eta];
   }
 
   /// @brief ATLAS Run 2 'medium' electron identification/selection efficiency
   /// @todo Currently just a copy of Run 1: fix!
   inline double ELECTRON_IDEFF_ATLAS_RUN2_MEDIUM(const Particle& e) {
     return ELECTRON_IDEFF_ATLAS_RUN1_MEDIUM(e);
   }
 
 
   /// @brief ATLAS Run 1 'tight' electron identification/selection efficiency
   inline double ELECTRON_IDEFF_ATLAS_RUN1_TIGHT(const Particle& e) {
 
     const static vector<double> eta_edges_10 = {0.000, 0.049, 0.459, 1.100, 1.461, 1.789, 2.270, 2.500};
     const static vector<double> eta_vals_10  = {0.581, 0.632, 0.668, 0.558, 0.548, 0.662, 0.690};
 
     const static vector<double> eta_edges_15 = {0.000, 0.053, 0.450, 1.096, 1.463, 1.783, 2.269, 2.500};
     const static vector<double> eta_vals_15 =  {0.630, 0.678, 0.714, 0.633, 0.616, 0.700, 0.733};
 
     const static vector<double> eta_edges_20 = {0.000, 0.065, 0.362, 0.719, 0.992, 1.277, 1.479, 1.692, 1.930, 2.227, 2.464, 2.500};
     const static vector<double> eta_vals_20 =  {0.653, 0.695, 0.735, 0.714, 0.688, 0.635, 0.625, 0.655, 0.680, 0.691, 0.674};
 
     const static vector<double> eta_edges_25 = {0.000, 0.077, 0.362, 0.719, 0.992, 1.300, 1.479, 1.692, 1.942, 2.227, 2.464, 2.500};
     const static vector<double> eta_vals_25 =  {0.692, 0.732, 0.768, 0.750, 0.726, 0.677, 0.667, 0.692, 0.710, 0.706, 0.679};
 
     const static vector<double> eta_edges_30 = {0.000, 0.053, 0.362, 0.719, 1.004, 1.277, 1.467, 1.681, 1.954, 2.239, 2.452, 2.500};
     const static vector<double> eta_vals_30 =  {0.724, 0.763, 0.804, 0.789, 0.762, 0.702, 0.690, 0.720, 0.731, 0.714, 0.681};
 
     const static vector<double> eta_edges_35 = {0.000, 0.044, 0.342, 0.711, 0.971, 1.280, 1.456, 1.683, 1.944, 2.218, 2.442, 2.500};
     const static vector<double> eta_vals_35 =  {0.736, 0.778, 0.824, 0.811, 0.784, 0.730, 0.718, 0.739, 0.743, 0.718, 0.678};
 
     const static vector<double> eta_edges_40 = {0.000, 0.047, 0.355, 0.699, 0.983, 1.268, 1.457, 1.671, 1.931, 2.204, 2.453, 2.500};
     const static vector<double> eta_vals_40 =  {0.741, 0.774, 0.823, 0.823, 0.802, 0.764, 0.756, 0.771, 0.771, 0.734, 0.684};
 
     const static vector<double> eta_edges_45 = {0.000, 0.056, 0.354, 0.711, 0.984, 1.280, 1.458, 1.684, 1.945, 2.207, 2.442, 2.500};
     const static vector<double> eta_vals_45 =  {0.758, 0.792, 0.841, 0.841, 0.823, 0.792, 0.786, 0.796, 0.794, 0.734, 0.663};
 
     const static vector<double> eta_edges_50 = {0.000, 0.059, 0.355, 0.699, 0.983, 1.268, 1.446, 1.682, 1.943, 2.216, 2.453, 2.500};
     const static vector<double> eta_vals_50 =  {0.771, 0.806, 0.855, 0.858, 0.843, 0.810, 0.800, 0.808, 0.802, 0.730, 0.653};
 
     const static vector<double> eta_edges_60 = {0.000, 0.050, 0.350, 0.707, 0.981, 1.278, 1.468, 1.694, 1.944, 2.242, 2.453, 2.500};
     const static vector<double> eta_vals_60 =  {0.773, 0.816, 0.866, 0.865, 0.853, 0.820, 0.812, 0.817, 0.804, 0.726, 0.645};
 
     const static vector<double> eta_edges_80 = {0.000, 0.051, 0.374, 0.720, 0.981, 1.279, 1.468, 1.707, 1.945, 2.207, 2.457, 2.500};
     const static vector<double> eta_vals_80 =  {0.819, 0.855, 0.899, 0.906, 0.900, 0.869, 0.865, 0.873, 0.869, 0.868, 0.859};
 
     const static vector<double> et_edges = { 10, 15, 20, 25, 30, 35, 40, 45, 50, 60, 80 };
     const static vector< vector<double> > et_eta_edges = { eta_edges_10, eta_edges_15, eta_edges_20, eta_edges_25, eta_edges_30, eta_edges_35, eta_edges_40, eta_edges_45, eta_edges_50, eta_edges_60, eta_edges_80 };
     const static vector< vector<double> > et_eta_vals  = { eta_vals_10, eta_vals_15, eta_vals_20, eta_vals_25, eta_vals_30, eta_vals_35, eta_vals_40, eta_vals_45, eta_vals_50, eta_vals_60, eta_vals_80 };
 
     if (e.abseta() > 2.5 || e.Et() < 10*GeV) return 0.0;
     const int i_et = binIndex(e.Et()/GeV, et_edges, true);
     const int i_eta = binIndex(e.abseta(), et_eta_edges[i_et]);
     return et_eta_vals[i_et][i_eta];
   }
 
   /// @brief ATLAS Run 2 'tight' electron identification/selection efficiency
   /// @todo Currently just a copy of Run 1: fix!
   inline double ELECTRON_IDEFF_ATLAS_RUN2_TIGHT(const Particle& e) {
     return ELECTRON_IDEFF_ATLAS_RUN1_TIGHT(e);
   }
 
 
 
   /// ATLAS Run 1 electron reco smearing
   inline Particle ELECTRON_SMEAR_ATLAS_RUN1(const Particle& e) {
     static const vector<double> edges_eta = {0., 2.5, 3.};
     static const vector<double> edges_pt = {0., 0.1, 25.};
     static const vector<double> e2s = {0.000, 0.015, 0.005,
                                        0.005, 0.005, 0.005,
                                        0.107, 0.107, 0.107};
     static const vector<double> es = {0.00, 0.00, 0.05,
                                       0.05, 0.05, 0.05,
                                       2.08, 2.08, 2.08};
     static const vector<double> cs = {0.00, 0.00, 0.25,
                                       0.25, 0.25, 0.25,
                                       0.00, 0.00, 0.00};
 
     const int i_eta = binIndex(e.abseta(), edges_eta, true);
     const int i_pt = binIndex(e.pT()/GeV, edges_pt, true);
     const int i = i_eta*edges_pt.size() + i_pt;
 
     // Calculate absolute resolution in GeV
     const double c1 = sqr(e2s[i]), c2 = sqr(es[i]), c3 = sqr(cs[i]);
     const double resolution = sqrt(c1*e.E2() + c2*e.E() + c3) * GeV;
 
     // normal_distribution<> d(e.E(), resolution);
     // const double mass = e.mass2() > 0 ? e.mass() : 0; //< numerical carefulness...
     // const double smeared_E = max(d(gen), mass); //< can't let the energy go below the mass!
     // return Particle(e.pid(), FourMomentum::mkEtaPhiME(e.eta(), e.phi(), mass, smeared_E));
     return Particle(e.pid(), P4_SMEAR_E_GAUSS(e, resolution));
   }
 
 
   /// ATLAS Run 2 electron reco smearing
   /// @todo Currently just a copy of the Run 1 version: fix!
   inline Particle ELECTRON_SMEAR_ATLAS_RUN2(const Particle& e) {
     return ELECTRON_SMEAR_ATLAS_RUN1(e);
   }
 
 
   /// @todo Add charge flip efficiency?
 
 
 
   /// CMS Run 1 electron reconstruction efficiency
   /// @todo How to use this in combination with tracking eff?
   inline double ELECTRON_EFF_CMS_RUN1(const Particle& e) {
     if (e.abseta() > 2.5) return 0;
     if (e.pT() < 10*GeV) return 0;
     return (e.abseta() < 1.5) ? 0.95 : 0.85;
   }
 
 
   /// CMS Run 2 electron reco efficiency
   /// @todo Currently just a copy of Run 1: fix!
   inline double ELECTRON_EFF_CMS_RUN2(const Particle& e) {
     return ELECTRON_EFF_CMS_RUN1(e);
   }
 
 
   /// @brief CMS electron energy smearing, preserving direction
   ///
   /// Calculate resolution
   /// for pT > 0.1 GeV, E resolution = |eta| < 0.5 -> sqrt(0.06^2 + pt^2 * 1.3e-3^2)
   ///                                  |eta| < 1.5 -> sqrt(0.10^2 + pt^2 * 1.7e-3^2)
   ///                                  |eta| < 2.5 -> sqrt(0.25^2 + pt^2 * 3.1e-3^2)
   inline Particle ELECTRON_SMEAR_CMS_RUN1(const Particle& e) {
     // Calculate absolute resolution in GeV from functional form
     double resolution = 0;
     const double abseta = e.abseta();
     if (e.pT() > 0.1*GeV && abseta < 2.5) { //< should be a given from efficiencies
       if (abseta < 0.5) {
         resolution = add_quad(0.06, 1.3e-3 * e.pT()/GeV) * GeV;
       } else if (abseta < 1.5) {
         resolution = add_quad(0.10, 1.7e-3 * e.pT()/GeV) * GeV;
       } else { // still |eta| < 2.5
         resolution = add_quad(0.25, 3.1e-3 * e.pT()/GeV) * GeV;
       }
     }
 
     // normal_distribution<> d(e.E(), resolution);
     // const double mass = e.mass2() > 0 ? e.mass() : 0; //< numerical carefulness...
     // const double smeared_E = max(d(gen), mass); //< can't let the energy go below the mass!
     // return Particle(e.pid(), FourMomentum::mkEtaPhiME(e.eta(), e.phi(), mass, smeared_E));
     return Particle(e.pid(), P4_SMEAR_E_GAUSS(e, resolution));
   }
 
 
   /// CMS Run 2 electron reco smearing
   /// @todo Currently just a copy of the Run 1 version: fix!
   inline Particle ELECTRON_SMEAR_CMS_RUN2(const Particle& e) {
     return ELECTRON_SMEAR_CMS_RUN1(e);
   }
 
   //@}
 
 
 
   /// @name Photon efficiency and smearing functions
   //@{
 
   /// ATLAS Run 1 photon reco efficiency
   /// @todo Currently identical to CMS, cf. Delphes
   inline double PHOTON_EFF_ATLAS_RUN1(const Particle& y) {
     if (y.pT() < 10*GeV || y.abseta() > 2.5) return 0;
     return (y.abseta() < 1.5) ? 0.95 : 0.85;
   }
 
   /// ATLAS Run 2 photon reco efficiency
   /// @todo Currently just a copy of Run 1: fix!
   inline double PHOTON_EFF_ATLAS_RUN2(const Particle& y) {
     return PHOTON_EFF_ATLAS_RUN1(y);
   }
 
   /// CMS Run 1 photon reco efficiency
   /// @todo Currently identical to ATLAS, cf. Delphes
   inline double PHOTON_EFF_CMS_RUN1(const Particle& y) {
     if (y.pT() < 10*GeV || y.abseta() > 2.5) return 0;
     return (y.abseta() < 1.5) ? 0.95 : 0.85;
   }
 
   /// CMS Run 2 photon reco efficiency
   /// @todo Currently just a copy of Run 1: fix!
   inline double PHOTON_EFF_CMS_RUN2(const Particle& y) {
     return PHOTON_EFF_CMS_RUN1(y);
   }
 
   //@}
 
 
 
   /// @name Muon efficiency and smearing functions
   //@{
 
   /// ATLAS Run 1 muon reco efficiency
   inline double MUON_EFF_ATLAS_RUN1(const Particle& m) {
     if (m.abseta() > 2.7) return 0;
     if (m.pT() < 10*GeV) return 0;
     return (m.abseta() < 1.5) ? 0.95 : 0.85;
   }
 
   /// ATLAS Run 2 muon reco efficiency
   /// @todo Currently just a copy of Run 1: fix!
   inline double MUON_EFF_ATLAS_RUN2(const Particle& m) {
     return MUON_EFF_ATLAS_RUN1(m);
   }
 
 
   /// ATLAS Run 1 muon reco smearing
   inline Particle MUON_SMEAR_ATLAS_RUN1(const Particle& m) {
     static const vector<double> edges_eta = {0, 1.5, 2.5};
     static const vector<double> edges_pt = {0, 0.1, 1.0, 10., 200.};
     static const vector<double> res = {0., 0.03, 0.02, 0.03, 0.05,
                                        0., 0.04, 0.03, 0.04, 0.05};
 
     const int i_eta = binIndex(m.abseta(), edges_eta, true);
     const int i_pt = binIndex(m.pT()/GeV, edges_pt, true);
     const int i = i_eta*edges_pt.size() + i_pt;
 
     const double resolution = res[i];
 
     // Smear by a Gaussian centered on the current pT, with width given by the resolution
     // normal_distribution<> d(m.pT(), resolution*m.pT());
     // const double smeared_pt = max(d(gen), 0.);
     // const double mass = m.mass2() > 0 ? m.mass() : 0; //< numerical carefulness...
     // return Particle(m.pid(), FourMomentum::mkEtaPhiMPt(m.eta(), m.phi(), mass, smeared_pt));
     return Particle(m.pid(), P4_SMEAR_PT_GAUSS(m, resolution*m.pT()));
   }
 
   /// ATLAS Run 2 muon reco smearing
   /// @todo Currently just a copy of the Run 1 version: fix!
   inline Particle MUON_SMEAR_ATLAS_RUN2(const Particle& m) {
     return MUON_SMEAR_ATLAS_RUN1(m);
   }
 
 
 
 
   /// CMS Run 1 muon reco efficiency
   inline double MUON_EFF_CMS_RUN1(const Particle& m) {
     if (m.abseta() > 2.4) return 0;
     if (m.pT() < 10*GeV) return 0;
     return 0.95 * (m.abseta() < 1.5 ? 1 : exp(0.5 - 5e-4*m.pT()/GeV));
   }
 
   /// CMS Run 2 muon reco efficiency
   /// @todo Currently just a copy of Run 1: fix!
   inline double MUON_EFF_CMS_RUN2(const Particle& m) {
     return MUON_EFF_CMS_RUN1(m);
   }
 
 
   /// CMS Run 1 muon reco smearing
   inline Particle MUON_SMEAR_CMS_RUN1(const Particle& m) {
     // Calculate fractional resolution
     // for pT > 0.1 GeV, mom resolution = |eta| < 0.5 -> sqrt(0.01^2 + pt^2 * 2.0e-4^2)
     //                                    |eta| < 1.5 -> sqrt(0.02^2 + pt^2 * 3.0e-4^2)
     //                                    |eta| < 2.5 -> sqrt(0.05^2 + pt^2 * 2.6e-4^2)
     double resolution = 0;
     const double abseta = m.abseta();
     if (m.pT() > 0.1*GeV && abseta < 2.5) {
       if (abseta < 0.5) {
         resolution = add_quad(0.01, 2.0e-4 * m.pT()/GeV);
       } else if (abseta < 1.5) {
         resolution = add_quad(0.02, 3.0e-4 * m.pT()/GeV);
       } else { // still |eta| < 2.5... but isn't CMS' mu acceptance < 2.4?
         resolution = add_quad(0.05, 2.6e-4 * m.pT()/GeV);
       }
     }
 
     // Smear by a Gaussian centered on the current pT, with width given by the resolution
     // normal_distribution<> d(m.pT(), resolution*m.pT());
     // const double smeared_pt = max(d(gen), 0.);
     // const double mass = m.mass2() > 0 ? m.mass() : 0; //< numerical carefulness...
     // return Particle(m.pid(), FourMomentum::mkEtaPhiMPt(m.eta(), m.phi(), mass, smeared_pt));
     return Particle(m.pid(), P4_SMEAR_PT_GAUSS(m, resolution*m.pT()));
   }
 
   /// CMS Run 2 muon reco smearing
   /// @todo Currently just a copy of the Run 1 version: fix!
   inline Particle MUON_SMEAR_CMS_RUN2(const Particle& m) {
     return MUON_SMEAR_CMS_RUN1(m);
   }
 
   //@}
 
 
 
   /// @name Tau efficiency and smearing functions
   //@{
 
   /// @brief ATLAS Run 1 8 TeV tau efficiencies (medium working point)
   ///
   /// Taken from http://arxiv.org/pdf/1412.7086.pdf
   ///   20-40 GeV 1-prong LMT eff|mis = 0.66|1/10, 0.56|1/20, 0.36|1/80
   ///   20-40 GeV 3-prong LMT eff|mis = 0.45|1/60, 0.38|1/100, 0.27|1/300
   ///   > 40 GeV 1-prong LMT eff|mis = 0.66|1/15, 0.56|1/25, 0.36|1/80
   ///   > 40 GeV 3-prong LMT eff|mis = 0.45|1/250, 0.38|1/400, 0.27|1/1300
   inline double TAU_EFF_ATLAS_RUN1(const Particle& t) {
     if (t.abseta() > 2.5) return 0; //< hmm... mostly
     double pThadvis = 0;
     Particles chargedhadrons;
     for (const Particle& p : t.children()) {
       if (p.isHadron()) {
         pThadvis += p.pT(); //< right definition? Paper is unclear
         if (p.charge3() != 0 && p.abseta() < 2.5 && p.pT() > 1*GeV) chargedhadrons += p;
       }
     }
     if (chargedhadrons.empty()) return 0; //< leptonic tau
     if (pThadvis < 20*GeV) return 0; //< below threshold
     if (pThadvis < 40*GeV) {
       if (chargedhadrons.size() == 1) return (t.abspid() == PID::TAU) ? 0.56 : 1/20.;
       if (chargedhadrons.size() == 3) return (t.abspid() == PID::TAU) ? 0.38 : 1/100.;
     } else {
       if (chargedhadrons.size() == 1) return (t.abspid() == PID::TAU) ? 0.56 : 1/25.;
       if (chargedhadrons.size() == 3) return (t.abspid() == PID::TAU) ? 0.38 : 1/400.;
     }
     return 0;
   }
 
 
   /// @brief ATLAS Run 2 13 TeV tau efficiencies (medium working point)
   ///
   /// From https://atlas.web.cern.ch/Atlas/GROUPS/PHYSICS/PUBNOTES/ATL-PHYS-PUB-2015-045/ATL-PHYS-PUB-2015-045.pdf
   ///   LMT 1 prong efficiency/mistag = 0.6|1/30, 0.55|1/50, 0.45|1/120
   ///   LMT 3 prong efficiency/mistag = 0.5|1/30, 0.4|1/110, 0.3|1/300
   inline double TAU_EFF_ATLAS_RUN2(const Particle& t) {
     if (t.abseta() > 2.5) return 0; //< hmm... mostly
     double pThadvis = 0;
     Particles chargedhadrons;
     for (const Particle& p : t.children()) {
       if (p.isHadron()) {
         pThadvis += p.pT(); //< right definition? Paper is unclear
         if (p.charge3() != 0 && p.abseta() < 2.5 && p.pT() > 1*GeV) chargedhadrons += p;
       }
     }
     if (chargedhadrons.empty()) return 0; //< leptonic tau
     if (pThadvis < 20*GeV) return 0; //< below threshold
     if (chargedhadrons.size() == 1) return (t.abspid() == PID::TAU) ? 0.55 : 1/50.;
     if (chargedhadrons.size() == 3) return (t.abspid() == PID::TAU) ? 0.40 : 1/110.;
     return 0;
   }
 
 
   /// ATLAS Run 1 tau smearing
   /// @todo Currently a copy of the crappy jet smearing that is probably wrong...
   inline Particle TAU_SMEAR_ATLAS_RUN1(const Particle& t) {
     // Const fractional resolution for now
     static const double resolution = 0.03;
 
     // Smear by a Gaussian centered on 1 with width given by the (fractional) resolution
     /// @todo Is this the best way to smear? Should we preserve the energy, or pT, or direction?
-    /// @todo Need to isolate random generators to a single thread
-    static random_device rd;
-    static mt19937 gen(rd());
-    normal_distribution<> d(1., resolution);
-    const double fsmear = max(d(gen), 0.);
+    const double fsmear = max(randnorm(1., resolution), 0.);
     const double mass = t.mass2() > 0 ? t.mass() : 0; //< numerical carefulness...
     return Particle(t.pid(), FourMomentum::mkXYZM(t.px()*fsmear, t.py()*fsmear, t.pz()*fsmear, mass));
   }
 
 
   /// ATLAS Run 2 tau smearing
   /// @todo Currently a copy of the Run 1 version
   inline Particle TAU_SMEAR_ATLAS_RUN2(const Particle& t) {
     return TAU_SMEAR_ATLAS_RUN1(t);
   }
 
 
   /// CMS Run 2 tau efficiency
   ///
   /// @todo Needs work; this is the dumb version from Delphes 3.3.2
   inline double TAU_EFF_CMS_RUN2(const Particle& t) {
     return (t.abspid() == PID::TAU) ? 0.6 : 0;
   }
 
   /// CMS Run 1 tau efficiency
   ///
   /// @todo Needs work; this is just a copy of the Run 2 version in Delphes 3.3.2
   inline double TAU_EFF_CMS_RUN1(const Particle& t) {
     return TAU_EFF_CMS_RUN2(t);
   }
 
 
   /// CMS Run 1 tau smearing
   /// @todo Currently a copy of the crappy ATLAS one
   inline Particle TAU_SMEAR_CMS_RUN1(const Particle& t) {
     return TAU_SMEAR_ATLAS_RUN1(t);
   }
 
 
   /// CMS Run 2 tau smearing
   /// @todo Currently a copy of the Run 1 version
   inline Particle TAU_SMEAR_CMS_RUN2(const Particle& t) {
     return TAU_SMEAR_CMS_RUN1(t);
   }
 
   //@}
 
 
+
   /// @name Jet efficiency and smearing functions
   //@{
 
-  /// Return a constant 0 given a Jet as argument
-  inline double JET_EFF_ZERO(const Jet& p) { return 0; }
-  /// Return a constant 1 given a Jet as argument
-  inline double JET_EFF_ONE(const Jet& p) { return 1; }
-
-  /// Return 1 if the given Jet contains a b, otherwise 0
-  inline double JET_BTAG_PERFECT(const Jet& j) { return j.bTagged() ? 1 : 0; }
   /// Return the ATLAS Run 1 jet flavour tagging efficiency for the given Jet
   inline double JET_BTAG_ATLAS_RUN1(const Jet& j) {
     /// @todo This form drops past ~100 GeV, asymptotically to zero efficiency... really?!
     if (j.abseta() > 2.5) return 0;
     const auto ftagsel = [&](const Particle& p){ return p.pT() > 5*GeV && deltaR(p,j) < 0.3; };
     if (j.bTagged(ftagsel)) return 0.80*tanh(0.003*j.pT()/GeV)*(30/(1+0.0860*j.pT()/GeV));
     if (j.cTagged(ftagsel)) return 0.20*tanh(0.020*j.pT()/GeV)*( 1/(1+0.0034*j.pT()/GeV));
     return 0.002 + 7.3e-6*j.pT()/GeV;
   }
   /// Return the ATLAS Run 2 MC2c20 jet flavour tagging efficiency for the given Jet
   inline double JET_BTAG_ATLAS_RUN2_MV2C20(const Jet& j) {
     if (j.abseta() > 2.5) return 0;
     if (j.bTagged(Cuts::pT > 5*GeV)) return 0.77;
     if (j.cTagged(Cuts::pT > 5*GeV)) return 1/4.5;
     return 1/140.;
   }
   /// Return the ATLAS Run 2 MC2c10 jet flavour tagging efficiency for the given Jet
   inline double JET_BTAG_ATLAS_RUN2_MV2C10(const Jet& j) {
     if (j.abseta() > 2.5) return 0;
     if (j.bTagged(Cuts::pT > 5*GeV)) return 0.77;
     if (j.cTagged(Cuts::pT > 5*GeV)) return 1/6.0;
     return 1/134.;
   }
 
-  /// Return 1 if the given Jet contains a c, otherwise 0
-  inline double JET_CTAG_PERFECT(const Jet& j) { return j.cTagged() ? 1 : 0; }
-
-  /// Take a jet and return an unmodified copy
-  /// @todo Modify constituent particle vectors for consistency
-  /// @todo Set a null PseudoJet if the Jet is smeared?
-  inline Jet JET_SMEAR_IDENTITY(const Jet& j) { return j; }
 
   /// ATLAS Run 1 jet smearing
   /// @todo This is a cluster-level flat 3% resolution, I think, and smearing is suboptimal: improve!
   inline Jet JET_SMEAR_ATLAS_RUN1(const Jet& j) {
     // Const fractional resolution for now
     static const double resolution = 0.03;
 
     // Smear by a Gaussian centered on 1 with width given by the (fractional) resolution
     /// @todo Is this the best way to smear? Should we preserve the energy, or pT, or direction?
-    /// @todo Need to isolate random generators to a single thread
-    static random_device rd;
-    static mt19937 gen(rd());
-    normal_distribution<> d(1., resolution);
-    const double fsmear = max(d(gen), 0.);
+    const double fsmear = max(randnorm(1., resolution), 0.);
     const double mass = j.mass2() > 0 ? j.mass() : 0; //< numerical carefulness...
     return Jet(FourMomentum::mkXYZM(j.px()*fsmear, j.py()*fsmear, j.pz()*fsmear, mass));
   }
 
   /// ATLAS Run 2 jet smearing
   /// @todo Just a copy of the Run 1 one: improve!!
   inline Jet JET_SMEAR_ATLAS_RUN2(const Jet& j) {
     return JET_SMEAR_ATLAS_RUN1(j);
   }
 
   /// CMS Run 2 jet smearing
   /// @todo Just a copy of the suboptimal ATLAS one: improve!!
   inline Jet JET_SMEAR_CMS_RUN2(const Jet& j) {
     return JET_SMEAR_ATLAS_RUN1(j);
   }
 
   //@}
 
 
   /// @name ETmiss smearing functions
   //@{
 
   inline Vector3 MET_SMEAR_IDENTITY(const Vector3& met, double) { return met; }
 
   /// @brief ATLAS Run 1 ETmiss smearing
   ///
   /// Based on https://arxiv.org/pdf/1108.5602v2.pdf, Figs 14 and 15
   inline Vector3 MET_SMEAR_ATLAS_RUN1(const Vector3& met, double set) {
     // Linearity offset (Fig 14)
     Vector3 smeared_met = met;
     if (met.mod()/GeV < 25*GeV) smeared_met *= 1.05;
     else if (met.mod()/GeV < 40*GeV) smeared_met *= (1.05 - (0.04/15)*(met.mod()/GeV - 25)); //< linear decrease
     else smeared_met *= 1.01;
 
     // Smear by a Gaussian with width given by the resolution(sumEt) ~ 0.45 sqrt(sumEt) GeV
     const double resolution = 0.45 * sqrt(set/GeV) * GeV;
-    static random_device rd;
-    static mt19937 gen(rd());
-    normal_distribution<> d(smeared_met.mod(), resolution);
-    const double metsmear = max(d(gen), 0.);
+    const double metsmear = max(randnorm(smeared_met.mod(), resolution), 0.);
     smeared_met = metsmear * smeared_met.unit();
 
     return smeared_met;
   }
 
   /// ATLAS Run 2 ETmiss smearing
   /// @todo Just a copy of the Run 1 one: improve!!
   inline Vector3 MET_SMEAR_ATLAS_RUN2(const Vector3& met, double set) {
     return MET_SMEAR_ATLAS_RUN1(met, set);
   }
 
   /// CMS Run 1 ETmiss smearing
   /// @todo Just a copy of the ATLAS one: improve!!
   inline Vector3 MET_SMEAR_CMS_RUN1(const Vector3& met, double set) {
     return MET_SMEAR_ATLAS_RUN1(met, set);
   }
 
   /// CMS Run 2 ETmiss smearing
   /// @todo Just a copy of the ATLAS one: improve!!
   inline Vector3 MET_SMEAR_CMS_RUN2(const Vector3& met, double set) {
     return MET_SMEAR_ATLAS_RUN2(met, set);
   }
 
   //@}
 
 
   /// @name Tracking efficiency and smearing functions
   //@{
 
   /// ATLAS Run 1 tracking efficiency
   inline double TRK_EFF_ATLAS_RUN1(const Particle& p) {
     if (p.charge3() == 0) return 0;
     if (p.abseta() > 2.5) return 0;
     if (p.pT() < 0.1*GeV) return 0;
 
     if (p.abspid() == PID::ELECTRON) {
       if (p.abseta() < 1.5) {
         if (p.pT() < 1*GeV) return 0.73;
         if (p.pT() < 100*GeV) return 0.95;
         return 0.99;
       } else {
         if (p.pT() < 1*GeV) return 0.50;
         if (p.pT() < 100*GeV) return 0.83;
         else return 0.90;
       }
     } else if (p.abspid() == PID::MUON) {
       if (p.abseta() < 1.5) {
         return (p.pT() < 1*GeV) ? 0.75 : 0.99;
       } else {
         return (p.pT() < 1*GeV) ? 0.70 : 0.98;
       }
     } else { // charged hadrons
       if (p.abseta() < 1.5) {
         return (p.pT() < 1*GeV) ? 0.70 : 0.95;
       } else {
         return (p.pT() < 1*GeV) ? 0.60 : 0.85;
       }
     }
   }
 
   /// ATLAS Run 2 tracking efficiency
   /// @todo Currently just a copy of Run 1: fix!
   inline double TRK_EFF_ATLAS_RUN2(const Particle& p) {
     return TRK_EFF_ATLAS_RUN1(p);
   }
 
 
   /// CMS Run 1 tracking efficiency
   inline double TRK_EFF_CMS_RUN1(const Particle& p) {
     if (p.charge3() == 0) return 0;
     if (p.abseta() > 2.5) return 0;
     if (p.pT() < 0.1*GeV) return 0;
 
     if (p.abspid() == PID::ELECTRON) {
       if (p.abseta() < 1.5) {
         if (p.pT() < 1*GeV) return 0.73;
         if (p.pT() < 100*GeV) return 0.95;
         return 0.99;
       } else {
         if (p.pT() < 1*GeV) return 0.50;
         if (p.pT() < 100*GeV) return 0.83;
         else return 0.90;
       }
     } else if (p.abspid() == PID::MUON) {
       if (p.abseta() < 1.5) {
         return (p.pT() < 1*GeV) ? 0.75 : 0.99;
       } else {
         return (p.pT() < 1*GeV) ? 0.70 : 0.98;
       }
     } else { // charged hadrons
       if (p.abseta() < 1.5) {
         return (p.pT() < 1*GeV) ? 0.70 : 0.95;
       } else {
         return (p.pT() < 1*GeV) ? 0.60 : 0.85;
       }
     }
   }
 
   /// CMS Run 2 tracking efficiency
   /// @todo Currently just a copy of Run 1: fix!
   inline double TRK_EFF_CMS_RUN2(const Particle& p) {
     return TRK_EFF_CMS_RUN1(p);
   }
 
   //@}
 
 
 }
 
 #endif
diff --git a/include/Rivet/Tools/Utils.hh b/include/Rivet/Tools/Utils.hh
--- a/include/Rivet/Tools/Utils.hh
+++ b/include/Rivet/Tools/Utils.hh
@@ -1,467 +1,513 @@
 // -*- C++ -*-
 #ifndef RIVET_Utils_HH
 #define RIVET_Utils_HH
 
 #include "Rivet/Tools/RivetSTL.hh"
 #include "Rivet/Tools/PrettyPrint.hh"
 #include <ostream>
 #include <iostream>
 #include <cctype>
 #include <cerrno>
 #include <stdexcept>
 #include <numeric>
 #include <limits>
 #include <climits>
 #include <cfloat>
 #include <cmath>
 
 
-// Macro to help with overzealous compiler warnings
-/// @note It's easier and better to just not give an arg name to args which won't be used, when possible.
-#ifdef UNUSED
-#elif defined(__GNUC__)
-# define UNUSED(x) UNUSED_ ## x __attribute__((unused))
-#elif defined(__LCLINT__)
-# define UNUSED(x) /*@unused@*/ x
-#else
-# define UNUSED(x) x
-#endif
+// // Macro to help with overzealous compiler warnings
+// /// @note It's easier and better to just not give an arg name to args which won't be used, when possible.
+// #ifdef UNUSED
+// #elif defined(__GNUC__)
+// # define UNUSED(x) UNUSED_ ## x __attribute__((unused))
+// #elif defined(__LCLINT__)
+// # define UNUSED(x) /*@unused@*/ x
+// #else
+// # define UNUSED(x) x
+// #endif
 
 
 /// Macro to help mark code as deprecated to produce compiler warnings
 #ifndef DEPRECATED
 #if __GNUC__ && __cplusplus && RIVET_NO_DEPRECATION_WARNINGS == 0
 #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
 #if GCC_VERSION >= 40500
   #if __cplusplus > 201103L
   #define DEPRECATED(x) [[deprecated(x)]]
   #else
   #define DEPRECATED(x) __attribute__((deprecated(x)))
   #endif
 #else
   #define DEPRECATED(x) __attribute__((deprecated))
 #endif
 #else
   #define DEPRECATED(x)
 #endif
 #endif
 
 
 namespace Rivet {
 
 
   /// Convenient const for getting the double NaN value
   static constexpr double DBL_NAN = std::numeric_limits<double>::quiet_NaN();
 
 
   /// @name String utils
   //@{
 
   struct bad_lexical_cast : public std::runtime_error {
     bad_lexical_cast(const std::string& what) : std::runtime_error(what) {}
   };
 
   /// @brief Convert between any types via stringstream
   template<typename T, typename U>
   T lexical_cast(const U& in) {
     try {
       std::stringstream ss;
       ss << in;
       T out;
       ss >> out;
       return out;
     } catch (const std::exception& e) {
       throw bad_lexical_cast(e.what());
     }
   }
 
   /// @brief Convert any object to a string
   ///
   /// Just a convenience wrapper for the more general Boost lexical_cast
   template <typename T>
   inline string to_str(const T& x) {
     return lexical_cast<string>(x);
   }
 
   /// @brief Convert any object to a string
   ///
   /// An alias for to_str() with a more "Rivety" mixedCase name.
   template <typename T>
   inline string toString(const T& x) {
     return to_str(x);
   }
 
   /// Replace the first instance of patt with repl
   inline string& replace_first(string& str, const string& patt, const string& repl) {
     if (!contains(str, patt)) return str; //< contains from RivetSTL
     str.replace(str.find(patt), patt.size(), repl);
     return str;
   }
 
   /// @brief Replace all instances of patt with repl
   ///
   /// @note Finding is interleaved with replacement, so the second search happens after
   /// first replacement, etc. This could lead to infinite loops and other counterintuitive
   /// behaviours if not careful.
   inline string& replace_all(string& str, const string& patt, const string& repl) {
     if (!contains(str, patt)) return str; //< contains from RivetSTL
     while (true) {
       string::size_type it = str.find(patt);
       if (it == string::npos) break;
       str.replace(it, patt.size(), repl);
     }
     return str;
   }
 
 
   /// Case-insensitive string comparison function
   inline int nocase_cmp(const string& s1, const string& s2) {
     string::const_iterator it1 = s1.begin();
     string::const_iterator it2 = s2.begin();
     while ( (it1 != s1.end()) && (it2 != s2.end()) ) {
       if(::toupper(*it1) != ::toupper(*it2)) { // < Letters differ?
         // Return -1 to indicate smaller than, 1 otherwise
         return (::toupper(*it1) < ::toupper(*it2)) ? -1 : 1;
       }
       // Proceed to the next character in each string
       ++it1;
       ++it2;
     }
     size_t size1 = s1.size(), size2 = s2.size(); // Cache lengths
     // Return -1,0 or 1 according to strings' lengths
     if (size1 == size2) return 0;
     return (size1 < size2) ? -1 : 1;
   }
 
 
   /// Case-insensitive string equality function
   inline bool nocase_equals(const string& s1, const string& s2) {
     return nocase_cmp(s1, s2) == 0;
   }
 
 
   /// Convert a string to lower-case
   inline string toLower(const string& s) {
     string out = s;
     std::transform(out.begin(), out.end(), out.begin(), (int(*)(int)) std::tolower);
     return out;
   }
 
 
   /// Convert a string to upper-case
   inline string toUpper(const string& s) {
     string out = s;
     std::transform(out.begin(), out.end(), out.begin(), (int(*)(int)) std::toupper);
     return out;
   }
 
 
   /// Check whether a string @a start is found at the start of @a s
   inline bool startsWith(const string& s, const string& start) {
     if (s.length() < start.length()) return false;
     return s.substr(0, start.length()) == start;
   }
 
 
   /// Check whether a string @a end is found at the end of @a s
   inline bool endsWith(const string& s, const string& end) {
     if (s.length() < end.length()) return false;
     return s.substr(s.length() - end.length()) == end;
   }
 
 
   /// Make a string containing the string representations of each item in v, separated by sep
   template <typename T>
   inline string join(const vector<T>& v, const string& sep=" ") {
     string rtn;
     for (size_t i = 0; i < v.size(); ++i) {
       if (i != 0) rtn += sep;
       rtn += to_str(v[i]);
     }
     return rtn;
   }
 
   /// Make a string containing the string representations of each item in s, separated by sep
   template <typename T>
   inline string join(const set<T>& s, const string& sep=" ") {
     string rtn;
     for (const T& x : s) {
       if (rtn.size() > 0) rtn += sep;
       rtn += to_str(x);
     }
     return rtn;
   }
 
+  /// @brief Split a string on a specified separator string
+  inline vector<string> split(const string& s, const string& sep) {
+    vector<string> dirs;
+    string tmp = s;
+    while (true) {
+      const size_t delim_pos = tmp.find(sep);
+      if (delim_pos == string::npos) break;
+      const string dir = tmp.substr(0, delim_pos);
+      if (dir.length()) dirs.push_back(dir); // Don't insert "empties"
+      tmp.replace(0, delim_pos+1, "");
+    }
+    if (tmp.length()) dirs.push_back(tmp); // Don't forget the trailing component!
+    return dirs;
+  }
+
   //@}
 
 
   /// @name Path utils
   //@{
 
   /// @brief Split a path string with colon delimiters
   ///
   /// Ignores zero-length substrings. Designed for getting elements of filesystem paths, naturally.
   inline vector<string> pathsplit(const string& path) {
-    const string delim = ":";
-    vector<string> dirs;
-    string tmppath = path;
-    while (true) {
-      const size_t delim_pos = tmppath.find(delim);
-      if (delim_pos == string::npos) break;
-      const string dir = tmppath.substr(0, delim_pos);
-      if (dir.length()) dirs.push_back(dir); // Don't insert "empties"
-      tmppath.replace(0, delim_pos+1, "");
-    }
-    if (tmppath.length()) dirs.push_back(tmppath); // Don't forget the trailing component!
-    return dirs;
+    return split(path, ":");
   }
 
 
   /// @brief Join several filesystem paths together with the standard ':' delimiter
   ///
   /// Note that this does NOT join path elements together with a platform-portable
   /// directory delimiter, cf. the Python @c {os.path.join}!
   inline string pathjoin(const vector<string>& paths) {
     return join(paths, ":");
   }
 
+  /// Operator for joining strings @a a and @a b with filesystem separators
+  inline string operator / (const string& a, const string& b) {
+    // Ensure that a doesn't end with a slash, and b doesn't start with one, to avoid "//"
+    const string anorm = (a.find("/") != string::npos) ? a.substr(0, a.find_last_not_of("/")+1) : a;
+    const string bnorm = (b.find("/") != string::npos) ? b.substr(b.find_first_not_of("/")) : b;
+    return anorm + "/" + bnorm;
+  }
+
+  /// Get the basename (i.e. terminal file name) from a path @a p
+  inline string basename(const string& p) {
+    if (!contains(p, "/")) return p;
+    return p.substr(p.rfind("/")+1);
+  }
+
+  /// Get the dirname (i.e. path to the penultimate directory) from a path @a p
+  inline string dirname(const string& p) {
+    if (!contains(p, "/")) return "";
+    return p.substr(0, p.rfind("/"));
+  }
+
+  /// Get the stem (i.e. part without a file extension) from a filename @a f
+  inline string file_stem(const string& f) {
+    if (!contains(f, ".")) return f;
+    return f.substr(0, f.rfind("."));
+  }
+
+  /// Get the file extension from a filename @a f
+  inline string file_extn(const string& f) {
+    if (!contains(f, ".")) return "";
+    return f.substr(f.rfind(".")+1);
+  }
+
   //@}
 
 
   /// @name Container utils
   //@{
 
   /// Return number of elements in the container @a c for which @c f(x) is true.
   template <typename CONTAINER>
   inline unsigned int count(const CONTAINER& c) {
     // return std::count_if(std::begin(c), std::end(c), [](const typename CONTAINER::value_type& x){return bool(x);});
     unsigned int rtn = 0;
     for (const auto& x : c) if (bool(x)) rtn += 1;
     return rtn;
   }
 
   /// Return number of elements in the container @a c for which @c f(x) is true.
   template <typename CONTAINER, typename FN>
   inline unsigned int count(const CONTAINER& c, const FN& f) {
     return std::count_if(std::begin(c), std::end(c), f);
   }
 
   /// Return true if x is true for any x in container c, otherwise false.
   template <typename CONTAINER>
   inline bool any(const CONTAINER& c) {
     // return std::any_of(std::begin(c), std::end(c), [](const auto& x){return bool(x);});
     for (const auto& x : c) if (bool(x)) return true;
     return false;
   }
 
   /// Return true if f(x) is true for any x in container c, otherwise false.
   template <typename CONTAINER, typename FN>
   inline bool any(const CONTAINER& c, const FN& f) {
     return std::any_of(std::begin(c), std::end(c), f);
   }
 
   /// Return true if @a x is true for all @c x in container @a c, otherwise false.
   template <typename CONTAINER>
   inline bool all(const CONTAINER& c) {
     // return std::all_of(std::begin(c), std::end(c), [](const auto& x){return bool(x);});
     for (const auto& x : c) if (!bool(x)) return false;
     return true;
   }
 
   /// Return true if @a f(x) is true for all @c x in container @a c, otherwise false.
   template <typename CONTAINER, typename FN>
   inline bool all(const CONTAINER& c, const FN& f) {
     return std::all_of(std::begin(c), std::end(c), f);
   }
 
   /// Return true if @a x is false for all @c x in container @a c, otherwise false.
   template <typename CONTAINER>
   inline bool none(const CONTAINER& c) {
     // return std::none_of(std::begin(c), std::end(c), [](){});
     for (const auto& x : c) if (bool(x)) return false;
     return true;
   }
 
   /// Return true if @a f(x) is false for all @c x in container @a c, otherwise false.
   template <typename CONTAINER, typename FN>
   inline bool none(const CONTAINER& c, const FN& f) {
     return std::none_of(std::begin(c), std::end(c), f);
   }
 
 
   /// A single-container-arg version of std::transform, aka @c map
   template <typename C1, typename C2, typename FN>
   inline const C2& transform(const C1& in, C2& out, const FN& f) {
     out.clear(); out.resize(in.size());
     std::transform(in.begin(), in.end(), out.begin(), f);
     return out;
   }
 
   /// A single-container-arg version of std::accumulate, aka @c reduce
   template <typename C1, typename T, typename FN>
   inline T accumulate(const C1& in, const T& init, const FN& f) {
     const T rtn = std::accumulate(in.begin(), in.end(), init, f);
     return rtn;
   }
 
   /// Generic sum function, adding @c x for all @c x in container @a c, starting with @a start
   template <typename CONTAINER, typename T>
   inline T sum(const CONTAINER& c, const T& start=T()) {
     T rtn = start;
     for (const auto& x : c) rtn += x;
     return rtn;
   }
 
   /// Generic sum function, adding @a fn(@c x) for all @c x in container @a c, starting with @a start
   template <typename CONTAINER, typename FN, typename T>
   inline T sum(const CONTAINER& c, const FN& f, const T& start=T()) {
     T rtn = start;
     for (const auto& x : c) rtn += f(x);
     return rtn;
   }
 
 
   /// Filter a collection in-place, removing the subset that passes the supplied function
   template <typename CONTAINER, typename FN>
   inline CONTAINER& ifilter_discard(CONTAINER& c, const FN& f) {
     const auto newend = std::remove_if(std::begin(c), std::end(c), f);
     c.erase(newend, c.end());
     return c;
   }
 
   /// Filter a collection by copy, removing the subset that passes the supplied function
   template <typename CONTAINER, typename FN>
   inline CONTAINER filter_discard(const CONTAINER& c, const FN& f) {
     CONTAINER rtn = c;
     return ifilter_discard(rtn, f); ///< @todo More efficient would be copy_if with back_inserter...
   }
 
   /// Filter a collection by copy into a supplied container, removing the subset that passes the supplied function
   /// @note New container will be replaced, not appended to
   template <typename CONTAINER, typename FN>
   inline CONTAINER& filter_discard(const CONTAINER& c, const FN& f, CONTAINER& out) {
     out = filter_discard(c, f);
     return out;
   }
 
 
   /// Filter a collection in-place, keeping the subset that passes the supplied function
   template <typename CONTAINER, typename FN>
   inline CONTAINER& ifilter_select(CONTAINER& c, const FN& f) {
     //using value_type = typename std::remove_reference<decltype(*std::begin(std::declval<typename std::add_lvalue_reference<CONTAINER>::type>()))>::type;
     auto invf = [&](const typename CONTAINER::value_type& x){ return !f(x); };
     return ifilter_discard(c, invf);
   }
 
   /// Filter a collection by copy, keeping the subset that passes the supplied function
   template <typename CONTAINER, typename FN>
   inline CONTAINER filter_select(const CONTAINER& c, const FN& f) {
     CONTAINER rtn = c;
     return ifilter_select(rtn, f); ///< @todo More efficient would be copy_if with back_inserter ... but is that equally container agnostic?
   }
 
   /// Filter a collection by copy into a supplied container, keeping the subset that passes the supplied function
   /// @note New container will be replaced, not appended to
   template <typename CONTAINER, typename FN>
   inline CONTAINER& filter_select(const CONTAINER& c, const FN& f, CONTAINER& out) {
     out = filter_select(c, f);
     return out;
   }
 
 
   /// @brief Slice of the container elements cf. Python's [i:j] syntax
   ///
   /// The element at the @j index is not included in the returned container.
   /// @a i and @a j can be negative, treated as backward offsets from the end of the container.
   template <typename CONTAINER>
   inline CONTAINER slice(const CONTAINER& c, int i, int j) {
     CONTAINER rtn;
     const size_t off1 = (i >= 0) ? i : c.size() + i;
     const size_t off2 = (j >= 0) ? j : c.size() + j;
     if (off1 > c.size() || off2 > c.size()) throw RangeError("Attempting to slice beyond requested offsets");
     if (off2 < off1) throw RangeError("Requested offsets in invalid order");
     rtn.resize(off2 - off1);
     std::copy(c.begin()+off1, c.begin()+off2, rtn.begin());
     return rtn;
   }
 
   /// @brief Tail slice of the container elements cf. Python's [i:] syntax
   ///
   /// Single-index specialisation of @c slice(c, i, j)
   template <typename CONTAINER>
   inline CONTAINER slice(const CONTAINER& c, int i) {
     return slice(c, i, c.size());
   }
 
   /// @brief Head slice of the @a n first container elements
   ///
   /// Negative @a n means to take the head excluding the @a{n}-element tail
   template <typename CONTAINER>
   inline CONTAINER head(const CONTAINER& c, int n) {
     // if (n > c.size()) throw RangeError("Requested head longer than container");
     if (n < 0) n = std::max(0, (int)c.size()+n);
     n = std::min(n, (int)c.size());
     return slice(c, 0, n);
   }
 
   /// @brief Tail slice of the @a n last container elements
   ///
   /// Negative @a n means to take the tail from after the @a{n}th element
   template <typename CONTAINER>
   inline CONTAINER tail(const CONTAINER& c, int n) {
     // if (n > c.size()) throw RangeError("Requested tail longer than container");
     if (n < 0) n = std::max(0, (int)c.size()+n);
     n = std::min(n, (int)c.size());
     return slice(c, c.size()-n);
   }
 
 
   using std::min;
   using std::max;
 
   /// Find the minimum value in the vector
   inline double min(const vector<double>& in, double errval=DBL_NAN) {
     return *std::min_element(in.begin(), in.end());
   }
 
   /// Find the maximum value in the vector
   inline double max(const vector<double>& in, double errval=DBL_NAN) {
     const auto e = std::max_element(in.begin(), in.end());
     return e != in.end() ? *e : errval;
   }
 
   /// Find the minimum and maximum values in the vector
   inline pair<double,double> minmax(const vector<double>& in, double errval=DBL_NAN) {
     const auto e = std::minmax_element(in.begin(), in.end());
     const double rtnmin = e.first != in.end() ? *e.first : errval;
     const double rtnmax = e.second != in.end() ? *e.first : errval;
     return std::make_pair(rtnmin, rtnmax);
   }
 
 
   /// Find the minimum value in the vector
   inline int min(const vector<int>& in, int errval=-1) {
     const auto e = std::min_element(in.begin(), in.end());
     return e != in.end() ? *e : errval;
   }
 
   /// Find the maximum value in the vector
   inline int max(const vector<int>& in, int errval=-1) {
     const auto e = std::max_element(in.begin(), in.end());
     return e != in.end() ? *e : errval;
   }
 
   /// Find the minimum and maximum values in the vector
   inline pair<int,int> minmax(const vector<int>& in, int errval=-1) {
     const auto e = std::minmax_element(in.begin(), in.end());
     const double rtnmin = e.first != in.end() ? *e.first : errval;
     const double rtnmax = e.second != in.end() ? *e.first : errval;
     return std::make_pair(rtnmin, rtnmax);
   }
 
   //@}
 
 
+  /// @brief Get a parameter from a named environment variable, with automatic type conversion
+  /// @note Return @a fallback if the variable is not defined, otherwise convert its string to the template type
+  /// @todo Should the param name have to be specific to an analysis? Can specialise as an Analysis member fn.
+  template <typename T>
+  T getEnvParam(const std::string name, const T& fallback) {
+    char* env = getenv(name.c_str());
+    return env ? lexical_cast<T>(env) : fallback;
+  }
+
+
 }
 
 #endif
diff --git a/m4/ax_openmp.m4 b/m4/ax_openmp.m4
new file mode 100644
--- /dev/null
+++ b/m4/ax_openmp.m4
@@ -0,0 +1,123 @@
+# ===========================================================================
+#        https://www.gnu.org/software/autoconf-archive/ax_openmp.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_OPENMP([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+#
+# DESCRIPTION
+#
+#   This macro tries to find out how to compile programs that use OpenMP a
+#   standard API and set of compiler directives for parallel programming
+#   (see http://www-unix.mcs/)
+#
+#   On success, it sets the OPENMP_CFLAGS/OPENMP_CXXFLAGS/OPENMP_F77FLAGS
+#   output variable to the flag (e.g. -omp) used both to compile *and* link
+#   OpenMP programs in the current language.
+#
+#   NOTE: You are assumed to not only compile your program with these flags,
+#   but also link it with them as well.
+#
+#   If you want to compile everything with OpenMP, you should set:
+#
+#     CFLAGS="$CFLAGS $OPENMP_CFLAGS"
+#     #OR#  CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"
+#     #OR#  FFLAGS="$FFLAGS $OPENMP_FFLAGS"
+#
+#   (depending on the selected language).
+#
+#   The user can override the default choice by setting the corresponding
+#   environment variable (e.g. OPENMP_CFLAGS).
+#
+#   ACTION-IF-FOUND is a list of shell commands to run if an OpenMP flag is
+#   found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is
+#   not found. If ACTION-IF-FOUND is not specified, the default action will
+#   define HAVE_OPENMP.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
+#   Copyright (c) 2015 John W. Peterson <jwpeterson@gmail.com>
+#   Copyright (c) 2016 Nick R. Papior <nickpapior@gmail.com>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 13
+
+AC_DEFUN([AX_OPENMP], [
+AC_PREREQ([2.69]) dnl for _AC_LANG_PREFIX
+
+AC_CACHE_CHECK([for OpenMP flag of _AC_LANG compiler], ax_cv_[]_AC_LANG_ABBREV[]_openmp, [save[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+ax_cv_[]_AC_LANG_ABBREV[]_openmp=unknown
+# Flags to try:  -fopenmp (gcc), -mp (SGI & PGI),
+#                -qopenmp (icc>=15), -openmp (icc),
+#                -xopenmp (Sun), -omp (Tru64),
+#                -qsmp=omp (AIX),
+#                none
+ax_openmp_flags="-fopenmp -openmp -qopenmp -mp -xopenmp -omp -qsmp=omp none"
+if test "x$OPENMP_[]_AC_LANG_PREFIX[]FLAGS" != x; then
+  ax_openmp_flags="$OPENMP_[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flags"
+fi
+for ax_openmp_flag in $ax_openmp_flags; do
+  case $ax_openmp_flag in
+    none) []_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[] ;;
+    *) []_AC_LANG_PREFIX[]FLAGS="$save[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flag" ;;
+  esac
+  AC_LINK_IFELSE([AC_LANG_SOURCE([[
+@%:@include <omp.h>
+
+static void
+parallel_fill(int * data, int n)
+{
+  int i;
+@%:@pragma omp parallel for
+  for (i = 0; i < n; ++i)
+    data[i] = i;
+}
+
+int
+main()
+{
+  int arr[100000];
+  omp_set_num_threads(2);
+  parallel_fill(arr, 100000);
+  return 0;
+}
+]])],[ax_cv_[]_AC_LANG_ABBREV[]_openmp=$ax_openmp_flag; break],[])
+done
+[]_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[]FLAGS
+])
+if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" = "xunknown"; then
+  m4_default([$2],:)
+else
+  if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" != "xnone"; then
+    OPENMP_[]_AC_LANG_PREFIX[]FLAGS=$ax_cv_[]_AC_LANG_ABBREV[]_openmp
+  fi
+  m4_default([$1], [AC_DEFINE(HAVE_OPENMP,1,[Define if OpenMP is enabled])])
+fi
+])dnl AX_OPENMP
diff --git a/src/Analyses/ALEPH_1991_S2435284.cc b/src/Analyses/ALEPH_1991_S2435284.cc
deleted file mode 100644
--- a/src/Analyses/ALEPH_1991_S2435284.cc
+++ /dev/null
@@ -1,62 +0,0 @@
-// -*- C++ -*-
-#include "Rivet/Analysis.hh"
-#include "Rivet/Projections/ChargedFinalState.hh"
-
-namespace Rivet {
-
-
-  /// @brief ALEPH LEP1 charged multiplicity in hadronic Z decay
-  /// @author Andy Buckley
-  class ALEPH_1991_S2435284 : public Analysis {
-  public:
-
-    /// Constructor.
-    ALEPH_1991_S2435284()
-      : Analysis("ALEPH_1991_S2435284")
-    {
-    }
-
-
-    /// @name Analysis methods
-    //@{
-
-    /// Book projections and histogram
-    void init() {
-      const ChargedFinalState cfs;
-      declare(cfs, "CFS");
-
-      _histChTot = bookHisto1D(1, 1, 1);
-    }
-
-
-    /// Do the analysis
-    void analyze(const Event& event) {
-      const FinalState& cfs = apply<FinalState>(event, "CFS");
-      MSG_DEBUG("Total charged multiplicity = " << cfs.size());
-      _histChTot->fill(cfs.size(), event.weight());
-    }
-
-
-    /// Normalize the histogram
-    void finalize() {
-      scale(_histChTot, 2.0/sumOfWeights()); // same as in ALEPH 1996
-    }
-
-    //@}
-
-
-  private:
-
-    /// @name Histograms
-    //@{
-    Histo1DPtr _histChTot;
-    //@}
-
-  };
-
-
-
-  // The hook for the plugin system
-  DECLARE_RIVET_PLUGIN(ALEPH_1991_S2435284);
-
-}
diff --git a/src/Analyses/ATLAS_2012_I1094061.cc b/src/Analyses/ATLAS_2012_I1094061.cc
deleted file mode 100644
--- a/src/Analyses/ATLAS_2012_I1094061.cc
+++ /dev/null
@@ -1,346 +0,0 @@
-// -*- C++ -*-
-#include "Rivet/Analysis.hh"
-#include "Rivet/Projections/ChargedFinalState.hh"
-
-namespace Rivet {
-
-
-  class ATLAS_2012_I1094061 : public Analysis {
-
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Little container to hold a pair of foreground and background histos and then
-     * divide them at the end of the analysis
-     */
-    struct HistoPair{
-      enum HistoType { FOREGROUND, BACKGROUND };
-
-      HistoPair(): _analysis(0),
-                   _h_foreground(0), _h_background(0), _d_final(0)
-      {  }
-
-      void init(int ds, int xaxis, int yaxis, ATLAS_2012_I1094061* analysis){
-        _ds = ds;
-        _xaxis = xaxis;
-        _yaxis = yaxis;
-        _analysis = analysis;
-        ++HistoPair::_s_counter;
-        const BinEdges& edges = _analysis->binEdges(_ds, _xaxis, _yaxis);
-        string sCount = boost::lexical_cast<string>(HistoPair::_s_counter);
-        _h_foreground = analysis->bookHistogram1D("tmpForeground" + sCount, edges);
-        _h_background = analysis->bookHistogram1D("tmpBackground" + sCount, edges);
-      }
-
-      void fillForeground(double value, double weight){
-        _h_foreground->fill(value, weight);
-        _h_foreground->fill(-value, weight);
-      }
-
-      void fillBackground(double value, double weight){
-        _h_background->fill(value, weight);
-        _h_background->fill(-value, weight);
-      }
-
-      void fill(double value, double weight, HistoType type){
-
-        switch(type){
-          case FOREGROUND:
-            fillForeground(value, weight);
-            break;
-          case BACKGROUND:
-            fillBackground(value, weight);
-            break;
-        }
-      }
-
-      void finalize(double wgtSum, double bgWeight, double avNTracks){
-
-        _h_foreground->scale(1. / wgtSum);
-        _h_background->scale(1. / bgWeight);
-
-        string histoPath = _analysis->histoPath(_ds, _xaxis, _yaxis);
-
-        AIDA::IDataPointSet *final = _analysis->histogramFactory().divide(histoPath, *_h_foreground, *_h_background);
-
-        for (int ii=0; ii!= final->size(); ++ii) {
-          AIDA::IDataPoint* pt = final->point(ii);
-          double y = pt->coordinate(1)->value();
-          pt->coordinate(1)->setValue(y-(avNTracks - 1));
-        }
-
-        _analysis->histogramFactory().destroy(_h_foreground);
-        _analysis->histogramFactory().destroy(_h_background);
-      }
-
-    private:
-
-      int _ds, _xaxis, _yaxis;
-
-      ATLAS_2012_I1094061 *_analysis;
-
-      AIDA::IHistogram1D* _h_foreground;
-      AIDA::IHistogram1D* _h_background;
-      AIDA::IDataPointSet* _d_final;
-
-      static short _s_counter;
-
-    };
-
-
-    ////////////////////////////////////////////////////////////////////////////
-
-  public:
-
-    ATLAS_2012_I1094061(): Analysis("ATLAS_2012_I1094061"),
-    _minpT(100.*MeV), _etaMax(2.5), _nVersions(5), _version(0),
-    _etaCut(2.), _phiCut(0.5*M_PI),
-    _historyInclusive(_nVersions, ParticleVector()), _historyN20(_nVersions, ParticleVector()),
-    _historyInclusiveWgts(_nVersions, 0.), _historyN20Wgts(_nVersions, 0.),
-    _particleCountInclusive(0.), _particleCountN20(0.),
-    _weightInclusive(0.), _weightN20(0.),
-    _bgWeightInclusive(0.), _bgWeightN20(0.){
-
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    void init(){
-
-      const ChargedFinalState cfs(-2.5, 2.5, _minpT);
-      declare(cfs, "ChargedParticles");
-
-      // Only do the multiplicity > 20 plots for 7 TeV collisions
-      _doN20 = (fabs(sqrtS() - 7000.*GeV) < 0.1*GeV);
-
-      int yaxis = (_doN20)? 2: 1;
-
-      _hp_DEta_0_pi.init(1, 1, yaxis, this);
-      _hp_DEta_0_pi2.init(2, 1, yaxis, this);
-      _hp_DEta_pi2_pi.init(3, 1, yaxis, this);
-
-      _hp_DPhi_0_2.init(4, 1, yaxis, this);
-      _hp_DPhi_2_5.init(5, 1, yaxis, this);
-
-      if(_doN20){
-
-        yaxis = 3;
-
-        _hp_N20_DEta_0_pi.init(1, 1, yaxis, this);
-        _hp_N20_DEta_0_pi2.init(2, 1, yaxis, this);
-        _hp_N20_DEta_pi2_pi.init(3, 1, yaxis, this);
-
-        _hp_N20_DPhi_0_2.init(4, 1, yaxis, this);
-        _hp_N20_DPhi_2_5.init(5, 1, yaxis, this);
-
-      }
-      return;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    void analyze(const Event &evt){
-
-      const ChargedFinalState &cfsProj = apply<ChargedFinalState>(evt, "ChargedParticles");
-
-      ParticleVector chargedParticles = cfsProj.particles();
-
-      if(chargedParticles.size() < 2) vetoEvent;
-
-      bool hasN20 = (_doN20 && chargedParticles.size() >= 20);
-
-      double dMultiplicity = (double)chargedParticles.size();
-
-      double multiplicityWeightIncr = dMultiplicity * evt.weight();
-
-      _weightInclusive += evt.weight();
-      _particleCountInclusive += multiplicityWeightIncr;
-
-      if(hasN20){
-        _weightN20 += evt.weight();
-        _particleCountN20 += multiplicityWeightIncr;
-      }
-
-      double fgWeight = 2.*evt.weight() / dMultiplicity;
-
-      for(ParticleVector::const_iterator p1 = chargedParticles.begin();
-          p1 != chargedParticles.end(); ++p1){
-
-        ParticleVector::const_iterator p2 = p1;
-        ++p2;
-
-        // fill the foreground distributions
-        while(p2 != chargedParticles.end()){
-          fillHistosInclusive(*p1, *p2, fgWeight, HistoPair::FOREGROUND);
-          if(hasN20) fillHistosN20(*p1, *p2, fgWeight, HistoPair::FOREGROUND);
-          ++p2;
-        }// end filling the foreground distributions
-
-        // loop over the history of particles from previous events and fill the background
-        // by correlating those particles with the current event
-
-        for(size_t version = 0; version != _nVersions; ++version){
-
-          const ParticleVector &bgParticles = _historyInclusive[version];
-          double bgWeight = evt.weight() * _historyInclusiveWgts[version];
-
-          for(ParticleVector::const_iterator p2 = bgParticles.begin();
-              p2 != bgParticles.end(); ++p2){
-            fillHistosInclusive(*p1, *p2, bgWeight, HistoPair::BACKGROUND);
-            _bgWeightInclusive += bgWeight;
-          }
-
-          if(!hasN20) continue;
-
-          const ParticleVector &bgParticlesN20 = _historyN20[version];
-          bgWeight = evt.weight() * _historyN20Wgts[version];
-
-          for(ParticleVector::const_iterator p2 = bgParticlesN20.begin();
-              p2 != bgParticlesN20.end(); ++p2){
-            fillHistosN20(*p1, *p2, bgWeight, HistoPair::BACKGROUND);
-            _bgWeightN20 += bgWeight;
-          }
-
-        }//end loop over particle history for background fill
-
-      }// end particle loop
-
-      // Overwrite the history for the version count number
-      _historyInclusive[_version] = chargedParticles;
-      _historyInclusiveWgts[_version] = evt.weight();
-
-      if(hasN20){
-        _historyN20[_version] = chargedParticles;
-        _historyN20Wgts[_version] = evt.weight();
-      }
-
-      ++_version;
-      if(_version == _nVersions) _version = 0;
-
-      return;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    void finalize(){
-
-      double avMultiplicity = _particleCountInclusive / _weightInclusive;
-
-      _hp_DEta_0_pi.finalize(_weightInclusive,  _bgWeightInclusive, avMultiplicity);
-      _hp_DEta_0_pi2.finalize(_weightInclusive, _bgWeightInclusive, avMultiplicity);
-      _hp_DEta_pi2_pi.finalize(_weightInclusive,_bgWeightInclusive, avMultiplicity);
-
-      _hp_DPhi_0_2.finalize(_weightInclusive, _bgWeightInclusive, avMultiplicity);
-      _hp_DPhi_2_5.finalize(_weightInclusive, _bgWeightInclusive, avMultiplicity);
-
-      if(_doN20){
-        avMultiplicity = _particleCountN20 / _weightN20;
-        _hp_N20_DEta_0_pi.finalize(_weightN20,   _bgWeightN20, avMultiplicity);
-        _hp_N20_DEta_0_pi2.finalize(_weightN20,  _bgWeightN20, avMultiplicity);
-        _hp_N20_DEta_pi2_pi.finalize(_weightN20, _bgWeightN20, avMultiplicity);
-
-        _hp_N20_DPhi_0_2.finalize(_weightN20, _bgWeightN20, avMultiplicity);
-        _hp_N20_DPhi_2_5.finalize(_weightN20, _bgWeightN20, avMultiplicity);
-      }
-
-      return;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-
-    void fillHistos(const Particle &p1, const Particle &p2, double weight,
-                    HistoPair::HistoType type, bool inclusive){
-
-      double dEta = fabs(p1.eta() - p2.eta());
-      double dPhi = mapAngle0ToPi(p1.phi() - p2.phi());
-      double dPhiShift = TWOPI - dPhi;
-
-      HistoPair &dEta_0_pi   = (inclusive)? _hp_DEta_0_pi   :_hp_N20_DEta_0_pi;
-      HistoPair &dPhi_0_2    = (inclusive)? _hp_DPhi_0_2    :_hp_N20_DPhi_0_2;
-      HistoPair &dPhi_2_5    = (inclusive)? _hp_DPhi_2_5    :_hp_N20_DPhi_2_5;
-      HistoPair &dEta_0_pi2  = (inclusive)? _hp_DEta_0_pi2  :_hp_N20_DEta_0_pi2;
-      HistoPair &dEta_pi2_pi = (inclusive)? _hp_DEta_pi2_pi :_hp_N20_DEta_pi2_pi;
-
-      dEta_0_pi.fill(dEta, weight, type);
-
-      if(dEta < _etaCut){
-        dPhi_0_2.fill(dPhi, weight, type);
-        dPhi_0_2.fill(dPhiShift, weight, type);
-      }else{
-        dPhi_2_5.fill(dPhi, weight, type);
-        dPhi_2_5.fill(dPhiShift, weight, type);
-      }
-
-      if(dPhi < _phiCut){
-        dEta_0_pi2.fill(dEta, weight, type);
-      }else{
-        dEta_pi2_pi.fill(dEta, weight, type);
-      }
-
-      return;
-
-    }
-    ////////////////////////////////////////////////////////////////////////////
-
-    void fillHistosInclusive(const Particle &p1, const Particle &p2, double weight,
-                             HistoPair::HistoType type){
-
-      fillHistos(p1, p2, weight, type, true);
-      return;
-    }
-
-    void fillHistosN20(const Particle &p1, const Particle &p2, double weight,
-                       HistoPair::HistoType type){
-
-      fillHistos(p1, p2, weight, type, false);
-      return;
-    }
-    ////////////////////////////////////////////////////////////////////////////
-
-
-    double _minpT;
-    double _etaMax;
-
-    size_t _nVersions;
-    size_t _version;
-
-    double _etaCut;
-    double _phiCut;
-
-    /// The "history" vectors contain the history of particles from _nVersions previous events
-    /// These are used to construct the background correlation.
-    vector<ParticleVector> _historyInclusive;
-    vector<ParticleVector> _historyN20;
-
-    vector<double>         _historyInclusiveWgts;
-    vector<double>         _historyN20Wgts;
-
-    double _particleCountInclusive;
-    double _particleCountN20;
-    double _weightInclusive;
-    double _weightN20;
-
-    double _bgWeightInclusive;
-    double _bgWeightN20;
-
-    bool _doN20;
-
-    HistoPair _hp_DEta_0_pi;
-    HistoPair _hp_DEta_0_pi2;
-    HistoPair _hp_DEta_pi2_pi;
-
-    HistoPair _hp_DPhi_0_2;
-    HistoPair _hp_DPhi_2_5;
-
-    HistoPair _hp_N20_DEta_0_pi;
-    HistoPair _hp_N20_DEta_0_pi2;
-    HistoPair _hp_N20_DEta_pi2_pi;
-
-    HistoPair _hp_N20_DPhi_0_2;
-    HistoPair _hp_N20_DPhi_2_5;
-
-  };
-
-
-  short ATLAS_2012_I1094061::HistoPair::_s_counter = 0;
-
-
-  DECLARE_RIVET_PLUGIN(ATLAS_2012_I1094061);
-
-}
diff --git a/src/Analyses/ATLAS_2016_CONF_2016_078.cc b/src/Analyses/ATLAS_2016_CONF_2016_078.cc
deleted file mode 100644
--- a/src/Analyses/ATLAS_2016_CONF_2016_078.cc
+++ /dev/null
@@ -1,269 +0,0 @@
-// -*- C++ -*-
-#include "Rivet/Analysis.hh"
-#include "Rivet/Projections/FinalState.hh"
-#include "Rivet/Projections/PromptFinalState.hh"
-#include "Rivet/Projections/FastJets.hh"
-#include "Rivet/Projections/Sphericity.hh"
-#include "Rivet/Projections/SmearedParticles.hh"
-#include "Rivet/Projections/SmearedJets.hh"
-#include "Rivet/Projections/SmearedMET.hh"
-#include "Rivet/Tools/Cutflow.hh"
-
-namespace Rivet {
-
-
-  /// @brief ATLAS 2016 0-lepton SUSY search, from 13/fb ICHEP'16 CONF note
-  class ATLAS_2016_CONF_2016_078 : public Analysis {
-  public:
-
-    /// Constructor
-    DEFAULT_RIVET_ANALYSIS_CTOR(ATLAS_2016_CONF_2016_078);
-
-
-    /// @name Analysis methods
-    //@{
-
-    /// Book histograms and initialise projections before the run
-    void init() {
-
-      // Initialise and register projections
-      FinalState calofs(Cuts::abseta < 3.2);
-      FastJets fj(calofs, FastJets::ANTIKT, 0.4);
-      declare(fj, "TruthJets");
-      declare(SmearedJets(fj, JET_SMEAR_ATLAS_RUN2, JET_BTAG_ATLAS_RUN2_MV2C10), "RecoJets");
-
-      MissingMomentum mm(calofs);
-      declare(mm, "TruthMET");
-      declare(SmearedMET(mm, MET_SMEAR_ATLAS_RUN2), "RecoMET");
-
-      PromptFinalState es(Cuts::abseta < 2.47 && Cuts::abspid == PID::ELECTRON, true, true);
-      declare(es, "TruthElectrons");
-      declare(SmearedParticles(es, ELECTRON_EFF_ATLAS_RUN2, ELECTRON_SMEAR_ATLAS_RUN2), "RecoElectrons");
-
-      PromptFinalState mus(Cuts::abseta < 2.7 && Cuts::abspid == PID::MUON, true);
-      declare(mus, "TruthMuons");
-      declare(SmearedParticles(mus, MUON_EFF_ATLAS_RUN2, MUON_SMEAR_ATLAS_RUN2), "RecoMuons");
-
-
-      // Book histograms/counters
-      _h_2j_0800 = bookCounter("2j-0800");
-      _h_2j_1200 = bookCounter("2j-1200");
-      _h_2j_1600 = bookCounter("2j-1600");
-      _h_2j_2000 = bookCounter("2j-2000");
-      _h_3j_1200 = bookCounter("2j-2000");
-      _h_4j_1000 = bookCounter("4j-1000");
-      _h_4j_1400 = bookCounter("4j-1400");
-      _h_4j_1800 = bookCounter("4j-1800");
-      _h_4j_2200 = bookCounter("4j-2200");
-      _h_4j_2600 = bookCounter("4j-2600");
-      _h_5j_1400 = bookCounter("5j-1400");
-      _h_6j_1800 = bookCounter("6j-1800");
-      _h_6j_2200 = bookCounter("6j-2200");
-
-
-      // Book cut-flows
-      const vector<string> cuts23j = {"Pre-sel+MET+pT1+meff", "Njet", "Dphi_min(j123,MET)", "Dphi_min(j4+,MET)", "pT2", "eta_j12", "MET/sqrtHT", "m_eff(incl)"};
-      _flows.addCutflow("2j-0800", cuts23j);
-      _flows.addCutflow("2j-1200", cuts23j);
-      _flows.addCutflow("2j-1600", cuts23j);
-      _flows.addCutflow("2j-2000", cuts23j);
-      _flows.addCutflow("3j-1200", cuts23j);
-      const vector<string> cuts456j = {"Pre-sel+MET+pT1+meff", "Njet", "Dphi_min(j123,MET)", "Dphi_min(j4+,MET)", "pT4", "eta_j1234", "Aplanarity", "MET/m_eff(Nj)", "m_eff(incl)"};
-      _flows.addCutflow("4j-1000", cuts456j);
-      _flows.addCutflow("4j-1400", cuts456j);
-      _flows.addCutflow("4j-1800", cuts456j);
-      _flows.addCutflow("4j-2200", cuts456j);
-      _flows.addCutflow("4j-2600", cuts456j);
-      _flows.addCutflow("5j-1400", cuts456j);
-      _flows.addCutflow("6j-1800", cuts456j);
-      _flows.addCutflow("6j-2200", cuts456j);
-
-    }
-
-
-    /// Perform the per-event analysis
-    void analyze(const Event& event) {
-
-      _flows.fillinit();
-
-      // Same MET cut for all signal regions
-      const Vector3 vmet = -apply<SmearedMET>(event, "RecoMET").vectorEt();
-      const double met = vmet.mod();
-      if (met < 250*GeV) vetoEvent;
-
-      // Get baseline electrons, muons, and jets
-      Particles elecs = apply<ParticleFinder>(event, "RecoElectrons").particles(Cuts::pT > 10*GeV);
-      Particles muons = apply<ParticleFinder>(event, "RecoMuons").particles(Cuts::pT > 10*GeV);
-      Jets jets = apply<JetAlg>(event, "RecoJets").jetsByPt(Cuts::pT > 20*GeV && Cuts::abseta < 2.8); ///< @todo Pile-up subtraction
-
-      // Jet/electron/muons overlap removal and selection
-      // Remove electrons within dR = 0.2 of a b-tagged jet
-      for (const Jet& j : jets)
-        if (j.abseta() < 2.5 && j.pT() > 50*GeV && j.bTagged(Cuts::pT > 5*GeV))
-          ifilter_discard(elecs, deltaRLess(j, 0.2, RAPIDITY));
-      // Remove any |eta| < 2.8 jet within dR = 0.2 of a remaining electron
-      for (const Particle& e : elecs)
-        ifilter_discard(jets, deltaRLess(e, 0.2, RAPIDITY));
-      // Remove any electron with dR in [0.2, 0.4] of a remaining jet
-      for (const Jet& j : jets)
-        ifilter_discard(elecs, [&](const Particle& e) { return inRange(deltaR(e,j, RAPIDITY), 0.2, 0.4); });
-      // Remove any muon with dR close to a remaining jet, via a functional form
-      for (const Jet& j : jets)
-        ifilter_discard(muons, [&](const Particle& m) { return deltaR(m,j, RAPIDITY) < min(0.4, 0.04 + 10*GeV/m.pT()); });
-      // Remove any |eta| < 2.8 jet within dR = 0.2 of a remaining muon if track conditions are met
-      for (const Particle& m : muons)
-        /// @todo Add track efficiency random filtering
-        ifilter_discard(jets, [&](const Jet& j) {
-            if (deltaR(j,m, RAPIDITY) > 0.2) return false;
-            const Particles trks = j.particles(Cuts::abscharge > 0 && Cuts::pT > 0.5*GeV);
-            return trks.size() < 3 || (m.pT() > 2*j.pT() && m.pT() > 0.7*sum(trks, pT, 0.0));
-          });
-      // Loose electron selection
-      ifilter_select(elecs, ParticleEffFilter(ELECTRON_IDEFF_ATLAS_RUN2_LOOSE));
-
-      // Veto the event if there are any remaining baseline leptons
-      if (!elecs.empty()) vetoEvent;
-      if (!muons.empty()) vetoEvent;
-
-      // Passed presel & MET
-      _flows.fill(0, true);
-
-      // Get jets and their pTs
-      const Jets jets20 = jets;
-      const Jets jets50 = filterBy(jets, Cuts::pT > 50*GeV);
-      const size_t njets50 = jets50.size(), njets20 = jets20.size();
-      if (jets50.size() < 2) vetoEvent;
-      vector<double> jetpts20, jetpts50;
-      transform(jets20, jetpts20, pT);
-      transform(jets50, jetpts50, pT);
-
-      // Construct multi-jet observables
-      const double ht = sum(jetpts20, 0.0);
-      const double met_sqrtHT = met / sqrt(ht);
-      const double meff_incl = sum(jetpts50, met);
-      const double meff_4 = (njets50 >= 4) ? sum(head(jetpts50, 4), met) : -1;
-      const double meff_5 = (njets50 >= 5) ? sum(head(jetpts50, 5), met) : -1;
-      const double meff_6 = (njets50 >= 6) ? sum(head(jetpts50, 6), met) : -1;
-      const double met_meff_4 = met / meff_4;
-      const double met_meff_5 = met / meff_5;
-      const double met_meff_6 = met / meff_6;
-
-      // Jet |eta|s
-      vector<double> jetetas20; transform(jets20, jetetas20, abseta);
-      const double etamax_2 = (njets20 >= 2) ? max(head(jetetas20, 2)) : -1;
-      const double etamax_4 = (njets20 >= 4) ? max(head(jetetas20, 4)) : -1;
-      const double etamax_6 = (njets20 >= 6) ? max(head(jetetas20, 6)) : -1;
-
-      // Get dphis between MET and jets
-      vector<double> dphimets50; transform(jets50, dphimets50, deltaPhiWRT(vmet));
-      const vector<double> dphimets50_123 = head(dphimets50, 3);
-      const vector<double> dphimets50_more = tail(dphimets50, -3);
-      const double dphimin_123 = !dphimets50_123.empty() ? min(dphimets50_123) : -1;
-      const double dphimin_more = !dphimets50_more.empty() ? min(dphimets50_more) : -1;
-
-      // Jet aplanarity
-      Sphericity sph; sph.calc(jets50);
-      const double aplanarity = sph.aplanarity();
-
-
-      //////////////////
-
-
-      const double w = event.weight();
-
-      // 2 jet regions
-      if (dphimin_123 > 0.8 && dphimin_more > 0.4) {
-        if (jetpts50[1] > 200*GeV && etamax_2 < 0.8) { //< implicit pT[0] cut
-          if (met_sqrtHT > 14*sqrt(GeV) && meff_incl > 800*GeV) _h_2j_0800->fill(w);
-        }
-        if (jetpts50[1] > 250*GeV && etamax_2 < 1.2) { //< implicit pT[0] cut
-          if (met_sqrtHT > 16*sqrt(GeV) && meff_incl > 1200*GeV) _h_2j_1200->fill(w);
-          if (met_sqrtHT > 18*sqrt(GeV) && meff_incl > 1600*GeV) _h_2j_1600->fill(w);
-          if (met_sqrtHT > 20*sqrt(GeV) && meff_incl > 2000*GeV) _h_2j_2000->fill(w);
-        }
-      }
-
-      // 3 jet region
-      if (njets50 >= 3 && dphimin_123 > 0.4 && dphimin_more > 0.2) {
-        if (jetpts50[0] > 600*GeV && jetpts50[2] > 50*GeV) { //< implicit pT[1] cut
-          if (met_sqrtHT > 16*sqrt(GeV) && meff_incl > 1200*GeV) _h_3j_1200->fill(w);
-        }
-      }
-
-      // 4 jet regions (note implicit pT[1,2] cuts)
-      if (njets50 >= 4 && dphimin_123 > 0.4 && dphimin_more > 0.4 && jetpts50[0] > 200*GeV && aplanarity > 0.04) {
-        if (jetpts50[3] > 100*GeV && etamax_4 < 1.2 && met_meff_4 > 0.25*sqrt(GeV) && meff_incl > 1000*GeV) _h_4j_1000->fill(w);
-        if (jetpts50[3] > 100*GeV && etamax_4 < 2.0 && met_meff_4 > 0.25*sqrt(GeV) && meff_incl > 1400*GeV) _h_4j_1400->fill(w);
-        if (jetpts50[3] > 100*GeV && etamax_4 < 2.0 && met_meff_4 > 0.20*sqrt(GeV) && meff_incl > 1800*GeV) _h_4j_1800->fill(w);
-        if (jetpts50[3] > 150*GeV && etamax_4 < 2.0 && met_meff_4 > 0.20*sqrt(GeV) && meff_incl > 2200*GeV) _h_4j_2200->fill(w);
-        if (jetpts50[3] > 150*GeV &&                   met_meff_4 > 0.20*sqrt(GeV) && meff_incl > 2600*GeV) _h_4j_2600->fill(w);
-      }
-
-      // 5 jet region (note implicit pT[1,2,3] cuts)
-      if (njets50 >= 5 && dphimin_123 > 0.4 && dphimin_more > 0.2 && jetpts50[0] > 500*GeV) {
-        if (jetpts50[4] > 50*GeV && met_meff_5 > 0.3*sqrt(GeV) && meff_incl > 1400*GeV) _h_5j_1400->fill(w);
-      }
-
-      // 6 jet regions (note implicit pT[1,2,3,4] cuts)
-      if (njets50 >= 6 && dphimin_123 > 0.4 && dphimin_more > 0.2 && jetpts50[0] > 200*GeV && aplanarity > 0.08) {
-        if (jetpts50[5] >  50*GeV && etamax_6 < 2.0 && met_meff_6*sqrt(GeV) > 0.20 && meff_incl > 1800*GeV) _h_6j_1800->fill(w);
-        if (jetpts50[5] > 100*GeV &&                   met_meff_6*sqrt(GeV) > 0.15 && meff_incl > 2200*GeV) _h_6j_2200->fill(w);
-      }
-
-      // Cutflows
-      _flows["2j-0800"].filltail({true, dphimin_123 > 0.8, dphimin_more > 0.4, jetpts50[1] > 200*GeV, etamax_2 < 0.8, met_sqrtHT > 14*sqrt(GeV), meff_incl >  800*GeV});
-      _flows["2j-1200"].filltail({true, dphimin_123 > 0.8, dphimin_more > 0.4, jetpts50[1] > 250*GeV, etamax_2 < 1.2, met_sqrtHT > 16*sqrt(GeV), meff_incl > 1200*GeV});
-      _flows["2j-1600"].filltail({true, dphimin_123 > 0.8, dphimin_more > 0.4, jetpts50[1] > 250*GeV, etamax_2 < 1.2, met_sqrtHT > 18*sqrt(GeV), meff_incl > 1600*GeV});
-      _flows["2j-2000"].filltail({true, dphimin_123 > 0.8, dphimin_more > 0.4, jetpts50[1] > 250*GeV, etamax_2 < 1.2, met_sqrtHT > 20*sqrt(GeV), meff_incl > 2000*GeV});
-      _flows["3j-1200"].filltail({njets50 >= 3, dphimin_123 > 0.4, dphimin_more > 0.2, jetpts50[0] > 600*GeV && jetpts50[2] > 50*GeV, true, met_sqrtHT > 16*sqrt(GeV), meff_incl > 1200*GeV});
-      _flows["4j-1000"].filltail({njets50 >= 4, dphimin_123 > 0.4, dphimin_more > 0.4, jetpts50[0] > 200*GeV && jetpts50[3] > 100*GeV, etamax_4 < 1.2, aplanarity > 0.04, met_meff_4 > 0.25*sqrt(GeV), meff_incl > 1000*GeV});
-      _flows["4j-1400"].filltail({njets50 >= 4, dphimin_123 > 0.4, dphimin_more > 0.4, jetpts50[0] > 200*GeV && jetpts50[3] > 100*GeV, etamax_4 < 2.0, aplanarity > 0.04, met_meff_4 > 0.25*sqrt(GeV), meff_incl > 1400*GeV});
-      _flows["4j-1800"].filltail({njets50 >= 4, dphimin_123 > 0.4, dphimin_more > 0.4, jetpts50[0] > 200*GeV && jetpts50[3] > 100*GeV, etamax_4 < 2.0, aplanarity > 0.04, met_meff_4 > 0.20*sqrt(GeV), meff_incl > 1800*GeV});
-      _flows["4j-2200"].filltail({njets50 >= 4, dphimin_123 > 0.4, dphimin_more > 0.4, jetpts50[0] > 200*GeV && jetpts50[3] > 150*GeV, etamax_4 < 2.0, aplanarity > 0.04, met_meff_4 > 0.20*sqrt(GeV), meff_incl > 2200*GeV});
-      _flows["4j-2600"].filltail({njets50 >= 4, dphimin_123 > 0.4, dphimin_more > 0.4, jetpts50[0] > 200*GeV && jetpts50[3] > 150*GeV, true,           aplanarity > 0.04, met_meff_4 > 0.20*sqrt(GeV), meff_incl > 2600*GeV});
-      _flows["5j-1400"].filltail({njets50 >= 5, dphimin_123 > 0.4, dphimin_more > 0.2, jetpts50[0] > 500*GeV && jetpts50[4] > 50*GeV, true, true, met_meff_5 > 0.3*sqrt(GeV), meff_incl > 1400*GeV});
-      _flows["6j-1800"].filltail({njets50 >= 6, dphimin_123 > 0.4, dphimin_more > 0.2, jetpts50[0] > 200*GeV && jetpts50[5] >  50*GeV, etamax_6 < 2.0, aplanarity > 0.08, met_meff_6 > 0.20*sqrt(GeV), meff_incl > 1800*GeV});
-      _flows["6j-2200"].filltail({njets50 >= 6, dphimin_123 > 0.4, dphimin_more > 0.2, jetpts50[0] > 200*GeV && jetpts50[5] > 100*GeV, true,           aplanarity > 0.08, met_meff_6 > 0.15*sqrt(GeV), meff_incl > 2200*GeV});
-
-    }
-
-
-    /// Normalise counters after the run
-    void finalize() {
-
-      const double sf = 13.3*crossSection()/femtobarn/sumOfWeights();
-      scale({_h_2j_0800, _h_2j_1200, _h_2j_1600, _h_2j_2000}, sf);
-      scale( _h_3j_1200, sf);
-      scale({_h_4j_1000, _h_4j_1400, _h_4j_1800, _h_4j_2200, _h_4j_2600}, sf);
-      scale( _h_5j_1400, sf);
-      scale({_h_6j_1800, _h_6j_2200}, sf);
-
-      _flows.scale(sf);
-      MSG_INFO("CUTFLOWS:\n\n" << _flows);
-
-    }
-
-    //@}
-
-
-  private:
-
-    /// @name Histograms
-    //@{
-    CounterPtr _h_2j_0800, _h_2j_1200, _h_2j_1600, _h_2j_2000, _h_3j_1200;
-    CounterPtr _h_4j_1000, _h_4j_1400, _h_4j_1800, _h_4j_2200, _h_4j_2600;
-    CounterPtr _h_5j_1400, _h_6j_1800, _h_6j_2200;
-    //@}
-
-    /// Cut-flows
-    Cutflows _flows;
-
-  };
-
-
-
-  // The hook for the plugin system
-  DECLARE_RIVET_PLUGIN(ATLAS_2016_CONF_2016_078);
-
-
-}
diff --git a/src/Analyses/CDF_2009_S8057893.cc b/src/Analyses/CDF_2009_S8057893.cc
deleted file mode 100644
--- a/src/Analyses/CDF_2009_S8057893.cc
+++ /dev/null
@@ -1,87 +0,0 @@
-#include "Rivet/Analysis.hh"
-#include "Rivet/Projections/FinalState.hh"
-#include "Rivet/Projections/FastJets.hh"
-
-namespace Rivet {
-
-
-  /// @brief CDF in-jet kT distribution analysis
-  /// @todo Finish!
-  class CDF_2009_S8057893 : public Analysis {
-  public:
-
-    /// Constructor
-    CDF_2009_S8057893::CDF_2009_S8057893()
-      : Analysis("CDF_2009_S8057893")
-    {
-    }
-
-
-    /// @name Analysis methods
-    //@{
-
-    void CDF_2009_S8057893::init() {
-      const FinalState fsj(-4.0, 4.0, 0.0*GeV);
-      declare(fsj, "FSJ");
-      declare(FastJets(fsj, FastJets::CDFMIDPOINT, 1.0), "Jets");
-    }
-
-
-    void CDF_2009_S8057893::analyze(const Event& event) {
-      const FastJets& jetpro = apply<FastJets>(e, "MidpointJets");
-      const Jets& jets = jetpro.jetsByPt();
-      MSG_DEBUG("Jet multiplicity = " << jets.size());
-      if (jets.size() < 1) {
-        MSG_DEBUG("Failed jet multiplicity cut");
-        vetoEvent;
-      }
-
-      // Email sent to authors:
-      // Okay, so here are the questions:
-
-      //  * What |eta| and pT_min acceptance cuts were used?
-      //  * Is the "cone algorithm" JETCLU or MIDPOINT? You refer to the old 1992 paper that defines
-      //    JETCLU, but I thought Run II analyses were using the more IRC-safe midpoint algorithm.
-      //  * Effective min j1, j2 Et values?
-      //  * Definition of "require the two leading jets to be well-balanced in Et"?
-      //  * Definition of the complementary cones: per-jet for j1, j2? Otherwise, what is defn of
-      //    "dijet axis" (since the two jet axes will not exactly match due to ISR and extra jets.)
-      //    Complementary cones are same eta as jet, but phi +- 90 degrees? Radius of compl. cones
-      //    = 1.0? Or defined in theta_c (not Lorentz invariant)?
-      //  * kT of tracks rel to jet axis for all jets, j1 & j2, or just j1?
-
-      // Herwig missing from plots!
-      // Data tables? More dijet mass bins (only 3 are shown, but 8 are mentioned)
-
-
-      // Only use tracks with kT > 0.3 GeV
-
-      // Low histo limit: kT_jet > 0.5 GeV
-
-      // Opening cone theta_c = 0.5 rad (in dijet rest frame)
-
-      //  95 < Mjj < 132 GeV
-      // 243 < Mjj < 323 GeV
-      // 428 < Mjj < 563 GeV
-      // < Mjj < GeV
-      // < Mjj < GeV
-      // < Mjj < GeV
-      // < Mjj < GeV
-      // < Mjj < GeV
-    }
-
-
-    void CDF_2009_S8057893::finalize() {
-
-    }
-
-    //@}
-
-  };
-
-
-
-  // The hook for the plugin system
-  DECLARE_RIVET_PLUGIN(CDF_2009_S8057893);
-
-}
diff --git a/src/Analyses/CMS_2015_I1370682.cc b/src/Analyses/CMS_2015_I1370682.cc
deleted file mode 100644
--- a/src/Analyses/CMS_2015_I1370682.cc
+++ /dev/null
@@ -1,612 +0,0 @@
-#include "Rivet/Analysis.hh"
-#include "Rivet/Math/LorentzTrans.hh"
-#include "Rivet/Projections/FinalState.hh"
-#include "Rivet/Projections/FastJets.hh"
-
-namespace Rivet {
-
-
-  namespace { //< only visible in this compilation unit
-
-    /// @brief Pseudo top finder
-    ///
-    /// Find top quark in the particle level.
-    /// The definition is based on the agreement at the LHC working group.
-    class PseudoTop : public FinalState {
-    public:
-      /// @name Standard constructors and destructors.
-      //@{
-
-      /// The default constructor. May specify the minimum and maximum
-      /// pseudorapidity \f$ \eta \f$ and the min \f$ p_T \f$ (in GeV).
-      PseudoTop(double lepR = 0.1, double lepMinPt = 20, double lepMaxEta = 2.4,
-                double jetR = 0.4, double jetMinPt = 30, double jetMaxEta = 4.7)
-        : FinalState(-MAXDOUBLE, MAXDOUBLE, 0*GeV),
-          _lepR(lepR), _lepMinPt(lepMinPt), _lepMaxEta(lepMaxEta),
-          _jetR(jetR), _jetMinPt(jetMinPt), _jetMaxEta(jetMaxEta)
-      {
-        setName("PseudoTop");
-      }
-
-      enum TTbarMode {CH_NONE=-1, CH_FULLHADRON = 0, CH_SEMILEPTON, CH_FULLLEPTON};
-      enum DecayMode {CH_HADRON = 0, CH_MUON, CH_ELECTRON};
-
-      TTbarMode mode() const {
-        if (!_isValid) return CH_NONE;
-        if (_mode1 == CH_HADRON && _mode2 == CH_HADRON) return CH_FULLHADRON;
-        else if ( _mode1 != CH_HADRON && _mode2 != CH_HADRON) return CH_FULLLEPTON;
-        else return CH_SEMILEPTON;
-      }
-      DecayMode mode1() const {return _mode1;}
-      DecayMode mode2() const {return _mode2;}
-
-      /// Clone on the heap.
-      virtual unique_ptr<Projection> clone() const {
-        return unique_ptr<Projection>(new PseudoTop(*this));
-      }
-
-      //@}
-
-    public:
-      Particle t1() const {return _t1;}
-      Particle t2() const {return _t2;}
-      Particle b1() const {return _b1;}
-      Particle b2() const {return _b2;}
-      ParticleVector wDecays1() const {return _wDecays1;}
-      ParticleVector wDecays2() const {return _wDecays2;}
-      Jets jets() const {return _jets;}
-      Jets bjets() const {return _bjets;}
-      Jets ljets() const {return _ljets;}
-
-    protected:
-      // Apply the projection to the event
-      void project(const Event& e); // override; ///< @todo Re-enable when C++11 allowed
-      void cleanup(std::map<double, std::pair<size_t, size_t> >& v, const bool doCrossCleanup=false) const;
-
-    private:
-      const double _lepR, _lepMinPt, _lepMaxEta;
-      const double _jetR, _jetMinPt, _jetMaxEta;
-
-      //constexpr ///< @todo Re-enable when C++11 allowed
-      static double _tMass; // = 172.5*GeV; ///< @todo Re-enable when C++11 allowed
-      //constexpr ///< @todo Re-enable when C++11 allowed
-      static double _wMass; // = 80.4*GeV; ///< @todo Re-enable when C++11 allowed
-
-    private:
-      bool _isValid;
-      DecayMode _mode1, _mode2;
-
-      Particle _t1, _t2;
-      Particle _b1, _b2;
-      ParticleVector _wDecays1, _wDecays2;
-      Jets _jets, _bjets, _ljets;
-
-    };
-
-    // More implementation below the analysis code
-
-  }
-
-
-
-  /// Pseudo-top analysis from CMS
-  class CMS_2015_I1370682 : public Analysis {
-  public:
-
-    CMS_2015_I1370682()
-      : Analysis("CMS_2015_I1370682"),
-        _applyCorrection(true),
-        _doShapeOnly(false)
-    {    }
-
-
-    void init() {
-      declare(PseudoTop(0.1, 20, 2.4, 0.5, 30, 2.4), "ttbar");
-
-      // Lepton + Jet channel
-      _hSL_topPt         = bookHisto1D("d15-x01-y01"); // 1/sigma dsigma/dpt(top)
-      _hSL_topPtTtbarSys = bookHisto1D("d16-x01-y01"); // 1/sigma dsigma/dpt*(top)
-      _hSL_topY          = bookHisto1D("d17-x01-y01"); // 1/sigma dsigma/dy(top)
-      _hSL_ttbarDelPhi   = bookHisto1D("d18-x01-y01"); // 1/sigma dsigma/ddeltaphi(t,tbar)
-      _hSL_topPtLead     = bookHisto1D("d19-x01-y01"); // 1/sigma dsigma/dpt(t1)
-      _hSL_topPtSubLead  = bookHisto1D("d20-x01-y01"); // 1/sigma dsigma/dpt(t2)
-      _hSL_ttbarPt       = bookHisto1D("d21-x01-y01"); // 1/sigma dsigma/dpt(ttbar)
-      _hSL_ttbarY        = bookHisto1D("d22-x01-y01"); // 1/sigma dsigma/dy(ttbar)
-      _hSL_ttbarMass     = bookHisto1D("d23-x01-y01"); // 1/sigma dsigma/dm(ttbar)
-
-      // Dilepton channel
-      _hDL_topPt         = bookHisto1D("d24-x01-y01"); // 1/sigma dsigma/dpt(top)
-      _hDL_topPtTtbarSys = bookHisto1D("d25-x01-y01"); // 1/sigma dsigma/dpt*(top)
-      _hDL_topY          = bookHisto1D("d26-x01-y01"); // 1/sigma dsigma/dy(top)
-      _hDL_ttbarDelPhi   = bookHisto1D("d27-x01-y01"); // 1/sigma dsigma/ddeltaphi(t,tbar)
-      _hDL_topPtLead     = bookHisto1D("d28-x01-y01"); // 1/sigma dsigma/dpt(t1)
-      _hDL_topPtSubLead  = bookHisto1D("d29-x01-y01"); // 1/sigma dsigma/dpt(t2)
-      _hDL_ttbarPt       = bookHisto1D("d30-x01-y01"); // 1/sigma dsigma/dpt(ttbar)
-      _hDL_ttbarY        = bookHisto1D("d31-x01-y01"); // 1/sigma dsigma/dy(ttbar)
-      _hDL_ttbarMass     = bookHisto1D("d32-x01-y01"); // 1/sigma dsigma/dm(ttbar)
-
-    }
-
-
-    void analyze(const Event& event) {
-
-      // Get the ttbar candidate
-      const PseudoTop& ttbar = apply<PseudoTop>(event, "ttbar");
-      if ( ttbar.mode() == PseudoTop::CH_NONE ) vetoEvent;
-
-      const FourMomentum& t1P4 = ttbar.t1().momentum();
-      const FourMomentum& t2P4 = ttbar.t2().momentum();
-      const double pt1 = std::max(t1P4.pT(), t2P4.pT());
-      const double pt2 = std::min(t1P4.pT(), t2P4.pT());
-      const double dPhi = deltaPhi(t1P4, t2P4);
-      const FourMomentum ttP4 = t1P4 + t2P4;
-      const FourMomentum t1P4AtCM = LorentzTransform::mkFrameTransformFromBeta(ttP4.betaVec()).transform(t1P4);
-
-      const double weight = event.weight();
-
-      if ( ttbar.mode() == PseudoTop::CH_SEMILEPTON ) {
-        const Particle lCand1 = ttbar.wDecays1()[0]; // w1 dau0 is the lepton in the PseudoTop
-        if (lCand1.pT() < 33*GeV || lCand1.abseta() > 2.1) vetoEvent;
-        _hSL_topPt->fill(t1P4.pT(), weight);
-        _hSL_topPt->fill(t2P4.pT(), weight);
-        _hSL_topPtTtbarSys->fill(t1P4AtCM.pT(), weight);
-        _hSL_topY->fill(t1P4.rapidity(), weight);
-        _hSL_topY->fill(t2P4.rapidity(), weight);
-        _hSL_ttbarDelPhi->fill(dPhi, weight);
-        _hSL_topPtLead->fill(pt1, weight);
-        _hSL_topPtSubLead->fill(pt2, weight);
-        _hSL_ttbarPt->fill(ttP4.pT(), weight);
-        _hSL_ttbarY->fill(ttP4.rapidity(), weight);
-        _hSL_ttbarMass->fill(ttP4.mass(), weight);
-      }
-      else if ( ttbar.mode() == PseudoTop::CH_FULLLEPTON ) {
-        const Particle lCand1 = ttbar.wDecays1()[0]; // dau0 are the lepton in the PseudoTop
-        const Particle lCand2 = ttbar.wDecays2()[0]; // dau0 are the lepton in the PseudoTop
-        if (lCand1.pT() < 20*GeV || lCand1.abseta() > 2.4) vetoEvent;
-        if (lCand2.pT() < 20*GeV || lCand2.abseta() > 2.4) vetoEvent;
-        _hDL_topPt->fill(t1P4.pT(), weight);
-        _hDL_topPt->fill(t2P4.pT(), weight);
-        _hDL_topPtTtbarSys->fill(t1P4AtCM.pT(), weight);
-        _hDL_topY->fill(t1P4.rapidity(), weight);
-        _hDL_topY->fill(t2P4.rapidity(), weight);
-        _hDL_ttbarDelPhi->fill(dPhi, weight);
-        _hDL_topPtLead->fill(pt1, weight);
-        _hDL_topPtSubLead->fill(pt2, weight);
-        _hDL_ttbarPt->fill(ttP4.pT(), weight);
-        _hDL_ttbarY->fill(ttP4.rapidity(), weight);
-        _hDL_ttbarMass->fill(ttP4.mass(), weight);
-      }
-
-    }
-
-
-    void finalize() {
-      if ( _applyCorrection ) {
-        // Correction functions for TOP-12-028 paper, (parton bin height)/(pseudotop bin height)
-        const double ch15[] = { 5.473609, 4.941048, 4.173346, 3.391191, 2.785644, 2.371346, 2.194161, 2.197167, };
-        const double ch16[] = { 5.470905, 4.948201, 4.081982, 3.225532, 2.617519, 2.239217, 2.127878, 2.185918, };
-        const double ch17[] = { 10.003667, 4.546519, 3.828115, 3.601018, 3.522194, 3.524694, 3.600951, 3.808553, 4.531891, 9.995370, };
-        const double ch18[] = { 4.406683, 4.054041, 3.885393, 4.213646, };
-        const double ch19[] = { 6.182537, 5.257703, 4.422280, 3.568402, 2.889408, 2.415878, 2.189974, 2.173210, };
-        const double ch20[] = { 5.199874, 4.693318, 3.902882, 3.143785, 2.607877, 2.280189, 2.204124, 2.260829, };
-        const double ch21[] = { 6.053523, 3.777506, 3.562251, 3.601356, 3.569347, 3.410472, };
-        const double ch22[] = { 11.932351, 4.803773, 3.782709, 3.390775, 3.226806, 3.218982, 3.382678, 3.773653, 4.788191, 11.905338, };
-        const double ch23[] = { 7.145255, 5.637595, 4.049882, 3.025917, 2.326430, 1.773824, 1.235329, };
-
-        const double ch24[] = { 2.268193, 2.372063, 2.323975, 2.034655, 1.736793, };
-        const double ch25[] = { 2.231852, 2.383086, 2.341894, 2.031318, 1.729672, 1.486993, };
-        const double ch26[] = { 3.993526, 2.308249, 2.075136, 2.038297, 2.036302, 2.078270, 2.295817, 4.017713, };
-        const double ch27[] = { 2.205978, 2.175010, 2.215376, 2.473144, };
-        const double ch28[] = { 2.321077, 2.371895, 2.338871, 2.057821, 1.755382, };
-        const double ch29[] = { 2.222707, 2.372591, 2.301688, 1.991162, 1.695343, };
-        const double ch30[] = { 2.599677, 2.026855, 2.138620, 2.229553, };
-        const double ch31[] = { 5.791779, 2.636219, 2.103642, 1.967198, 1.962168, 2.096514, 2.641189, 5.780828, };
-        const double ch32[] = { 2.006685, 2.545525, 2.477745, 2.335747, 2.194226, 2.076500, };
-
-        applyCorrection(_hSL_topPt, ch15);
-        applyCorrection(_hSL_topPtTtbarSys, ch16);
-        applyCorrection(_hSL_topY, ch17);
-        applyCorrection(_hSL_ttbarDelPhi, ch18);
-        applyCorrection(_hSL_topPtLead, ch19);
-        applyCorrection(_hSL_topPtSubLead, ch20);
-        applyCorrection(_hSL_ttbarPt, ch21);
-        applyCorrection(_hSL_ttbarY, ch22);
-        applyCorrection(_hSL_ttbarMass, ch23);
-
-        applyCorrection(_hDL_topPt, ch24);
-        applyCorrection(_hDL_topPtTtbarSys, ch25);
-        applyCorrection(_hDL_topY, ch26);
-        applyCorrection(_hDL_ttbarDelPhi, ch27);
-        applyCorrection(_hDL_topPtLead, ch28);
-        applyCorrection(_hDL_topPtSubLead, ch29);
-        applyCorrection(_hDL_ttbarPt, ch30);
-        applyCorrection(_hDL_ttbarY, ch31);
-        applyCorrection(_hDL_ttbarMass, ch32);
-      }
-
-      if ( _doShapeOnly ) {
-        normalize(_hSL_topPt        );
-        normalize(_hSL_topPtTtbarSys);
-        normalize(_hSL_topY         );
-        normalize(_hSL_ttbarDelPhi  );
-        normalize(_hSL_topPtLead    );
-        normalize(_hSL_topPtSubLead );
-        normalize(_hSL_ttbarPt      );
-        normalize(_hSL_ttbarY       );
-        normalize(_hSL_ttbarMass    );
-
-        normalize(_hDL_topPt        );
-        normalize(_hDL_topPtTtbarSys);
-        normalize(_hDL_topY         );
-        normalize(_hDL_ttbarDelPhi  );
-        normalize(_hDL_topPtLead    );
-        normalize(_hDL_topPtSubLead );
-        normalize(_hDL_ttbarPt      );
-        normalize(_hDL_ttbarY       );
-        normalize(_hDL_ttbarMass    );
-      }
-      else {
-        const double s = 1./sumOfWeights();
-        scale(_hSL_topPt        , s);
-        scale(_hSL_topPtTtbarSys, s);
-        scale(_hSL_topY         , s);
-        scale(_hSL_ttbarDelPhi  , s);
-        scale(_hSL_topPtLead    , s);
-        scale(_hSL_topPtSubLead , s);
-        scale(_hSL_ttbarPt      , s);
-        scale(_hSL_ttbarY       , s);
-        scale(_hSL_ttbarMass    , s);
-        scale(_hDL_topPt        , s);
-        scale(_hDL_topPtTtbarSys, s);
-        scale(_hDL_topY         , s);
-        scale(_hDL_ttbarDelPhi  , s);
-        scale(_hDL_topPtLead    , s);
-        scale(_hDL_topPtSubLead , s);
-        scale(_hDL_ttbarPt      , s);
-        scale(_hDL_ttbarY       , s);
-        scale(_hDL_ttbarMass    , s);
-      }
-
-    }
-
-
-    void applyCorrection(Histo1DPtr h, const double* cf) {
-      vector<YODA::HistoBin1D>& bins = h->bins();
-      for (size_t i=0, n=bins.size(); i<n; ++i ) {
-        const double s = cf[i];
-        YODA::HistoBin1D& bin = bins[i];
-        bin.scaleW(s);
-      }
-    }
-
-
-  private:
-
-    const bool _applyCorrection, _doShapeOnly;
-    Histo1DPtr _hSL_topPt, _hSL_topPtTtbarSys, _hSL_topY, _hSL_ttbarDelPhi, _hSL_topPtLead,
-      _hSL_topPtSubLead, _hSL_ttbarPt, _hSL_ttbarY, _hSL_ttbarMass;
-    Histo1DPtr _hDL_topPt, _hDL_topPtTtbarSys, _hDL_topY, _hDL_ttbarDelPhi, _hDL_topPtLead,
-      _hDL_topPtSubLead, _hDL_ttbarPt, _hDL_ttbarY, _hDL_ttbarMass;
-
-  };
-
-
-
-  DECLARE_RIVET_PLUGIN(CMS_2015_I1370682);
-
-
-  ///////////////
-
-  // More PseudoTop implementation
-  namespace {
-
-
-    double PseudoTop::_tMass = 172.5*GeV;
-    double PseudoTop::_wMass = 80.4*GeV;
-
-
-    void PseudoTop::cleanup(map<double, pair<size_t, size_t> >& v, const bool doCrossCleanup) const {
-      vector<map<double, pair<size_t, size_t> >::iterator> toErase;
-      set<size_t> usedLeg1, usedLeg2;
-      if ( !doCrossCleanup ) {
-        /// @todo Reinstate when C++11 allowed: for (auto key = v.begin(); key != v.end(); ++key) {
-        for (map<double, pair<size_t, size_t> >::iterator key = v.begin(); key != v.end(); ++key) {
-          const size_t leg1 = key->second.first;
-          const size_t leg2 = key->second.second;
-          if (usedLeg1.find(leg1) == usedLeg1.end() and
-              usedLeg2.find(leg2) == usedLeg2.end()) {
-            usedLeg1.insert(leg1);
-            usedLeg2.insert(leg2);
-          } else {
-            toErase.push_back(key);
-          }
-        }
-      }
-      else {
-        /// @todo Reinstate when C++11 allowed: for (auto key = v.begin(); key != v.end(); ++key) {
-        for (map<double, pair<size_t, size_t> >::iterator key = v.begin(); key != v.end(); ++key) {
-          const size_t leg1 = key->second.first;
-          const size_t leg2 = key->second.second;
-          if (usedLeg1.find(leg1) == usedLeg1.end() and
-              usedLeg1.find(leg2) == usedLeg1.end()) {
-            usedLeg1.insert(leg1);
-            usedLeg1.insert(leg2);
-          } else {
-            toErase.push_back(key);
-          }
-        }
-      }
-      /// @todo Reinstate when C++11 allowed:  for (auto& key : toErase) v.erase(key);
-      for (size_t i = 0; i < toErase.size(); ++i) v.erase(toErase[i]);
-    }
-
-
-    void PseudoTop::project(const Event& e) {
-      // Leptons : do the lepton clustering anti-kt R=0.1 using stable photons and leptons not from hadron decay
-      // Neutrinos : neutrinos not from hadron decay
-      // MET : vector sum of all invisible particles in x-y plane
-      // Jets : anti-kt R=0.4 using all particles excluding neutrinos and particles used in lepton clustering
-      //        add ghost B hadrons during the jet clustering to identify B jets.
-
-      // W->lv : dressed lepton and neutrino pairs
-      // W->jj : light flavored dijet
-      // W candidate : select lv or jj pairs which minimise |mW1-80.4|+|mW2-80.4|
-      //               lepton-neutrino pair will be selected with higher priority
-
-      // t->Wb : W candidate + b jet
-      // t candidate : select Wb pairs which minimise |mtop1-172.5|+|mtop2-172.5|
-
-      _isValid = false;
-      _theParticles.clear();
-      _wDecays1.clear();
-      _wDecays2.clear();
-      _jets.clear();
-      _bjets.clear();
-      _ljets.clear();
-      _mode1 = _mode2 = CH_HADRON;
-
-      // Collect final state particles
-      Particles pForLep, pForJet;
-      Particles neutrinos; // Prompt neutrinos
-      /// @todo Avoid this unsafe jump into HepMC -- all this can be done properly via VisibleFS and HeavyHadrons projections
-      for (const GenParticle* p : Rivet::particles(e.genEvent())) {
-        const int status = p->status();
-        const int pdgId = p->pdg_id();
-        if (status == 1) {
-          Particle rp = *p;
-          if (!PID::isHadron(pdgId) && !rp.fromHadron()) {
-            // Collect particles not from hadron decay
-            if (rp.isNeutrino()) {
-              // Prompt neutrinos are kept in separate collection
-              neutrinos.push_back(rp);
-            } else if (pdgId == 22 || rp.isLepton()) {
-              // Leptons and photons for the dressing
-              pForLep.push_back(rp);
-            }
-          } else if (!rp.isNeutrino()) {
-            // Use all particles from hadron decay
-            pForJet.push_back(rp);
-          }
-        } else if (PID::isHadron(pdgId) && PID::hasBottom(pdgId)) {
-          // NOTE: Consider B hadrons with pT > 5GeV - not in CMS proposal
-          //if ( p->momentum().perp() < 5 ) continue;
-
-          // Do unstable particles, to be used in the ghost B clustering
-          // Use last B hadrons only
-          bool isLast = true;
-          for (const GenParticlePtr pp : Rivet::particles(p->end_vertex(), HepMC::children)) {
-            if (PID::hasBottom(pp->pdg_id())) {
-              isLast = false;
-              break;
-            }
-          }
-          if (!isLast) continue;
-
-          // Rescale momentum by 10^-20
-          Particle ghost(pdgId, FourMomentum(p->momentum())*1e-20/p->momentum().rho());
-          pForJet.push_back(ghost);
-        }
-      }
-
-      // Start object building from trivial thing - prompt neutrinos
-      sortByPt(neutrinos);
-
-      // Proceed to lepton dressing
-      const PseudoJets lep_pjs = mkPseudoJets(pForLep);
-      const fastjet::JetDefinition lep_jdef(fastjet::antikt_algorithm, _lepR);
-      const Jets leps_all = mkJets(fastjet::ClusterSequence(lep_pjs, lep_jdef).inclusive_jets());
-      const Jets leps_sel = sortByPt(filterBy(leps_all, Cuts::pT > _lepMinPt));
-      // FastJets fjLep(FastJets::ANTIKT, _lepR);
-      // fjLep.calc(pForLep);
-
-      Jets leptons;
-      vector<int> leptonsId;
-      set<int> dressedIdxs;
-      for (const Jet& lep : leps_sel) {
-        if (lep.abseta() > _lepMaxEta) continue;
-        double leadingPt = -1;
-        int leptonId = 0;
-        for (const Particle& p : lep.particles()) {
-          /// @warning Barcodes aren't future-proof in HepMC
-          dressedIdxs.insert(p.genParticle()->barcode());
-          if (p.isLepton() && p.pT() > leadingPt) {
-            leadingPt = p.pT();
-            leptonId = p.pid();
-          }
-        }
-        if (leptonId == 0) continue;
-        leptons.push_back(lep);
-        leptonsId.push_back(leptonId);
-      }
-
-      // Re-use particles not used in lepton dressing
-      for (const Particle& rp : pForLep) {
-        /// @warning Barcodes aren't future-proof in HepMC
-        const int barcode = rp.genParticle()->barcode();
-        // Skip if the particle is used in dressing
-        if (dressedIdxs.find(barcode) != dressedIdxs.end()) continue;
-        // Put back to be used in jet clustering
-        pForJet.push_back(rp);
-      }
-
-      // Then do the jet clustering
-      const PseudoJets jet_pjs = mkPseudoJets(pForJet);
-      const fastjet::JetDefinition jet_jdef(fastjet::antikt_algorithm, _jetR);
-      const Jets jets_all = mkJets(fastjet::ClusterSequence(jet_pjs, jet_jdef).inclusive_jets());
-      const Jets jets_sel = sortByPt(filterBy(jets_all, Cuts::pT > _jetMinPt));
-      // FastJets fjJet(FastJets::ANTIKT, _jetR);
-      //fjJet.useInvisibles(); // NOTE: CMS proposal to remove neutrinos (AB: wouldn't work anyway, since they were excluded from clustering inputs)
-      // fjJet.calc(pForJet);
-      for (const Jet& jet : jets_sel) {
-        if (jet.abseta() > _jetMaxEta) continue;
-        _jets.push_back(jet);
-        bool isBJet = false;
-        for (const Particle& rp : jet.particles()) {
-          if (PID::hasBottom(rp.pdgId())) {
-            isBJet = true;
-            break;
-          }
-        }
-        if ( isBJet ) _bjets.push_back(jet);
-        else _ljets.push_back(jet);
-      }
-
-      // Every building blocks are ready. Continue to pseudo-W and pseudo-top combination
-
-      if (_bjets.size() < 2) return; // Ignore single top for now
-      map<double, pair<size_t, size_t> > wLepCandIdxs;
-      map<double, pair<size_t, size_t> > wHadCandIdxs;
-
-      // Collect leptonic-decaying W's
-      for (size_t iLep = 0, nLep = leptons.size(); iLep < nLep; ++iLep) {
-        const Jet& lep = leptons.at(iLep);
-        for (size_t iNu = 0, nNu = neutrinos.size(); iNu < nNu; ++iNu) {
-          const Particle& nu = neutrinos.at(iNu);
-          const double m = (lep.momentum()+nu.momentum()).mass();
-          const double dm = std::abs(m-_wMass);
-          wLepCandIdxs[dm] = make_pair(iLep, iNu);
-        }
-      }
-
-      // Continue to hadronic decaying W's
-      for (size_t i = 0, nLjet = _ljets.size(); i < nLjet; ++i) {
-        const Jet& ljet1 = _ljets[i];
-        for (size_t j = i+1; j < nLjet; ++j) {
-          const Jet& ljet2 = _ljets[j];
-          const double m = (ljet1.momentum()+ljet2.momentum()).mass();
-          const double dm = std::abs(m-_wMass);
-          wHadCandIdxs[dm] = make_pair(i, j);
-        }
-      }
-
-      // Cleanup W candidate, choose pairs with minimum dm if they share decay products
-      cleanup(wLepCandIdxs);
-      cleanup(wHadCandIdxs, true);
-      const size_t nWLepCand = wLepCandIdxs.size();
-      const size_t nWHadCand = wHadCandIdxs.size();
-
-      if (nWLepCand + nWHadCand < 2) return; // We skip single top
-
-      int w1Q = 1, w2Q = -1;
-      int w1dau1Id = 1, w2dau1Id = -1;
-      FourMomentum w1dau1LVec, w1dau2LVec;
-      FourMomentum w2dau1LVec, w2dau2LVec;
-      if (nWLepCand == 0) { // Full hadronic case
-        const pair<size_t, size_t>& idPair1 = wHadCandIdxs.begin()->second;
-        const pair<size_t, size_t>& idPair2 = (++wHadCandIdxs.begin())->second;  ///< @todo Reinstate std::next
-        const Jet& w1dau1 = _ljets[idPair1.first];
-        const Jet& w1dau2 = _ljets[idPair1.second];
-        const Jet& w2dau1 = _ljets[idPair2.first];
-        const Jet& w2dau2 = _ljets[idPair2.second];
-        w1dau1LVec = w1dau1.momentum();
-        w1dau2LVec = w1dau2.momentum();
-        w2dau1LVec = w2dau1.momentum();
-        w2dau2LVec = w2dau2.momentum();
-      } else if (nWLepCand == 1) { // Semi-leptonic case
-        const pair<size_t, size_t>& idPair1 = wLepCandIdxs.begin()->second;
-        const pair<size_t, size_t>& idPair2 = wHadCandIdxs.begin()->second;
-        const Jet& w1dau1 = leptons[idPair1.first];
-        const Particle& w1dau2 = neutrinos[idPair1.second];
-        const Jet& w2dau1 = _ljets[idPair2.first];
-        const Jet& w2dau2 = _ljets[idPair2.second];
-        w1dau1LVec = w1dau1.momentum();
-        w1dau2LVec = w1dau2.momentum();
-        w2dau1LVec = w2dau1.momentum();
-        w2dau2LVec = w2dau2.momentum();
-        w1dau1Id = leptonsId[idPair1.first];
-        w1Q = w1dau1Id > 0 ? -1 : 1;
-        w2Q = -w1Q;
-        switch (w1dau1Id) {
-        case 13: case -13: _mode1 = CH_MUON; break;
-        case 11: case -11: _mode1 = CH_ELECTRON; break;
-        }
-      } else { // Full leptonic case
-        const pair<size_t, size_t>& idPair1 = wLepCandIdxs.begin()->second;
-        const pair<size_t, size_t>& idPair2 = (++wLepCandIdxs.begin())->second;  ///< @todo Reinstate std::next
-        const Jet& w1dau1 = leptons[idPair1.first];
-        const Particle& w1dau2 = neutrinos[idPair1.second];
-        const Jet& w2dau1 = leptons[idPair2.first];
-        const Particle& w2dau2 = neutrinos[idPair2.second];
-        w1dau1LVec = w1dau1.momentum();
-        w1dau2LVec = w1dau2.momentum();
-        w2dau1LVec = w2dau1.momentum();
-        w2dau2LVec = w2dau2.momentum();
-        w1dau1Id = leptonsId[idPair1.first];
-        w2dau1Id = leptonsId[idPair2.first];
-        w1Q = w1dau1Id > 0 ? -1 : 1;
-        w2Q = w2dau1Id > 0 ? -1 : 1;
-        switch (w1dau1Id) {
-        case 13: case -13: _mode1 = CH_MUON; break;
-        case 11: case -11: _mode1 = CH_ELECTRON; break;
-        }
-        switch (w2dau1Id) {
-        case 13: case -13: _mode2 = CH_MUON; break;
-        case 11: case -11: _mode2 = CH_ELECTRON; break;
-        }
-      }
-      const FourMomentum w1LVec = w1dau1LVec+w1dau2LVec;
-      const FourMomentum w2LVec = w2dau1LVec+w2dau2LVec;
-
-      // Combine b jets
-      double sumDm = 1e9;
-      FourMomentum b1LVec, b2LVec;
-      for (size_t i = 0, n = _bjets.size(); i < n; ++i) {
-        const Jet& bjet1 = _bjets[i];
-        const double mtop1 = (w1LVec+bjet1.momentum()).mass();
-        const double dmtop1 = std::abs(mtop1-_tMass);
-        for (size_t j=0; j<n; ++j) {
-          if (i == j) continue;
-          const Jet& bjet2 = _bjets[j];
-          const double mtop2 = (w2LVec+bjet2.momentum()).mass();
-          const double dmtop2 = std::abs(mtop2-_tMass);
-
-          if (sumDm <= dmtop1+dmtop2) continue;
-
-          sumDm = dmtop1+dmtop2;
-          b1LVec = bjet1.momentum();
-          b2LVec = bjet2.momentum();
-        }
-      }
-      if (sumDm >= 1e9) return; // Failed to make top, but this should not happen.
-
-      const FourMomentum t1LVec = w1LVec + b1LVec;
-      const FourMomentum t2LVec = w2LVec + b2LVec;
-
-      // Put all of them into candidate collection
-      _t1 = Particle(w1Q*6, t1LVec);
-      _b1 = Particle(w1Q*5, b1LVec);
-      _wDecays1.push_back(Particle(w1dau1Id, w1dau1LVec));
-      _wDecays1.push_back(Particle(-w1dau1Id+w1Q, w1dau2LVec));
-
-      _t2 = Particle(w2Q*6, t2LVec);
-      _b2 = Particle(w2Q*5, b2LVec);
-      _wDecays2.push_back(Particle(w2dau1Id, w2dau1LVec));
-      _wDecays2.push_back(Particle(-w2dau1Id+w2Q, w2dau2LVec));
-
-      _isValid = true;
-    }
-
-  }
-
-
-}
diff --git a/src/Analyses/CMS_2016_I1473674.cc b/src/Analyses/CMS_2016_I1473674.cc
deleted file mode 100644
--- a/src/Analyses/CMS_2016_I1473674.cc
+++ /dev/null
@@ -1,141 +0,0 @@
-#include "Rivet/Analysis.hh"
-#include "Rivet/Tools/Logging.hh"
-#include "Rivet/Projections/FinalState.hh"
-#include "Rivet/Projections/FastJets.hh"
-#include "Rivet/Projections/TauFinder.hh"
-#include "Rivet/Projections/DressedLeptons.hh"
-#include "Rivet/Projections/IdentifiedFinalState.hh"
-#include "Rivet/Projections/PromptFinalState.hh"
-#include "Rivet/Projections/VetoedFinalState.hh"
-#include "Rivet/Projections/InvMassFinalState.hh"
-#include "Rivet/Projections/MissingMomentum.hh"
-#include "Rivet/Tools/ParticleIdUtils.hh"
-
-namespace Rivet {
-
-  class CMS_2016_I1473674 : public Analysis {
-  public:
-
-    // Minimal constructor
-    CMS_2016_I1473674() : Analysis("CMS_2016_I1473674") {
-    }
-
-    // Set up projections and book histograms
-    void init() {
-      // Complete final state
-      FinalState fs(-MAXDOUBLE, MAXDOUBLE, 0*GeV);
-
-      // Projection for taus
-      TauFinder taus(TauFinder::ANY);
-      addProjection(taus, "Tau");
-      IdentifiedFinalState nu_taus(fs);
-      nu_taus.acceptIdPair(PID::NU_TAU);
-      addProjection(nu_taus, "NuTau");
-
-      // Projection for electrons and muons
-      IdentifiedFinalState photons(fs);
-      photons.acceptIdPair(PID::PHOTON);
-
-      IdentifiedFinalState el_id(fs);
-      el_id.acceptIdPair(PID::ELECTRON);
-      PromptFinalState electrons(el_id);
-      addProjection(electrons, "Electrons");
-      DressedLeptons dressed_electrons(photons, electrons, 0.1, Cuts::open(), true, false);
-      addProjection(dressed_electrons, "DressedElectrons");
-
-      IdentifiedFinalState mu_id(fs);
-      mu_id.acceptIdPair(PID::MUON);
-      PromptFinalState muons(mu_id);
-      addProjection(muons, "Muons");
-      DressedLeptons dressed_muons(photons, muons, 0.1, Cuts::open(), true, false);
-      addProjection(dressed_muons, "DressedMuons");
-
-      // Projection for jets
-      VetoedFinalState fs_jets(FinalState(-MAXDOUBLE, MAXDOUBLE, 0*GeV));
-      fs_jets.addVetoOnThisFinalState(dressed_muons);
-      addProjection(FastJets(fs_jets, FastJets::ANTIKT, 0.5), "Jets");
-
-      // Projections for MET
-      addProjection(MissingMomentum(), "MET");
-
-      // Booking of histograms
-      _hist_met = bookHisto1D(5, 1, 1);
-      _hist_ht  = bookHisto1D(6, 1, 1);
-      _hist_st  = bookHisto1D(7, 1, 1);
-      _hist_wpt = bookHisto1D(8, 1, 1);
-    }
-
-
-    // per event analysis
-    void analyze(const Event& event) {
-      const double weight = event.weight();
-
-      // select ttbar -> lepton+jets
-      const DressedLeptons& dressed_electrons = applyProjection<DressedLeptons>(event, "DressedElectrons");
-      const DressedLeptons& dressed_muons = applyProjection<DressedLeptons>(event, "DressedMuons");
-      if (dressed_electrons.dressedLeptons().size() +
-          dressed_muons.dressedLeptons().size() != 1) {
-        vetoEvent;
-      }
-
-      FourMomentum lepton;
-      if (dressed_electrons.dressedLeptons().size() == 1) {
-        lepton = dressed_electrons.dressedLeptons()[0].momentum();
-      } else {
-        lepton = dressed_muons.dressedLeptons()[0].momentum();
-      }
-
-      // veto if lepton is tau
-      const TauFinder& taus = applyProjection<TauFinder>(event, "Tau");
-      const IdentifiedFinalState nu_taus = applyProjection<IdentifiedFinalState>(event, "NuTau");
-      foreach (const Particle& tau, taus.taus()) {
-        foreach (const Particle& nu, nu_taus.particles()) {
-          if (tau.pid() * nu.pid() < 0)
-            continue;
-
-          const FourMomentum w_candidate = tau.momentum() + nu.momentum();
-          if (abs(w_candidate.mass() - 80.4) > 5.)
-            vetoEvent;
-        }
-      }
-
-
-      // MET
-      const MissingMomentum& met = applyProjection<MissingMomentum>(event, "MET");
-      _hist_met->fill(met.visibleMomentum().pT()/GeV, weight);
-
-      // HT and ST
-      const FastJets& jetpro = applyProjection<FastJets>(event, "Jets");
-      const Jets jets = jetpro.jetsByPt(20*GeV);
-
-      double ht = 0.0;
-      foreach (const Jet& j, jets) {
-        if (deltaR(j.momentum(), lepton) > 0.3) {
-          ht += j.pT();
-        }
-      }
-
-      double st = ht + lepton.pT() + met.visibleMomentum().pT();
-      _hist_ht->fill(ht/GeV, weight);
-      _hist_st->fill(st/GeV, weight);
-
-      // WPT
-      FourMomentum w = lepton - met.visibleMomentum();
-      _hist_wpt->fill(w.pT()/GeV, weight);
-    }
-
-    // scale by 1 over weight
-    void finalize() {
-      normalize(_hist_met);
-      normalize(_hist_ht);
-      normalize(_hist_st);
-      normalize(_hist_wpt);
-    }
-
-  private:
-    Histo1DPtr _hist_met, _hist_ht, _hist_st, _hist_wpt;
-  };
-
-  // The hook for the plugin system
-  DECLARE_RIVET_PLUGIN(CMS_2016_I1473674);
-}
diff --git a/src/Analyses/CMS_2016_PAS_SUS_16_14.cc b/src/Analyses/CMS_2016_PAS_SUS_16_14.cc
deleted file mode 100644
--- a/src/Analyses/CMS_2016_PAS_SUS_16_14.cc
+++ /dev/null
@@ -1,201 +0,0 @@
-// -*- C++ -*-
-#include "Rivet/Analysis.hh"
-#include "Rivet/Projections/FinalState.hh"
-#include "Rivet/Projections/PromptFinalState.hh"
-#include "Rivet/Projections/FastJets.hh"
-#include "Rivet/Projections/Sphericity.hh"
-#include "Rivet/Projections/SmearedParticles.hh"
-#include "Rivet/Projections/SmearedJets.hh"
-#include "Rivet/Projections/SmearedMET.hh"
-#include "Rivet/Tools/Cutflow.hh"
-
-namespace Rivet {
-
-
-  /// @brief CMS 2016 0-lepton SUSY search, from 13/fb PAS note
-  class CMS_2016_PAS_SUS_16_14 : public Analysis {
-  public:
-
-    /// Constructor
-    DEFAULT_RIVET_ANALYSIS_CTOR(CMS_2016_PAS_SUS_16_14);
-
-
-    /// @name Analysis methods
-    //@{
-
-    /// Book histograms and initialise projections before the run
-    void init() {
-
-      // Initialise and register projections
-      FinalState calofs(Cuts::abseta < 5.0);
-      FastJets fj(calofs, FastJets::ANTIKT, 0.4);
-      declare(fj, "TruthJets");
-      declare(SmearedJets(fj, JET_SMEAR_CMS_RUN2, [](const Jet& j) {
-            if (j.abseta() > 2.5) return 0.;
-            return j.bTagged() ? 0.55 : j.cTagged() ? 0.12 : 0.016; }), "Jets");
-
-      FinalState es(Cuts::abspid == PID::ELECTRON && Cuts::abseta < 2.5);
-      declare(es, "TruthElectrons");
-      declare(SmearedParticles(es, ELECTRON_EFF_CMS_RUN2, ELECTRON_SMEAR_CMS_RUN2), "Electrons");
-
-      FinalState mus(Cuts::abspid == PID::MUON && Cuts::abseta < 2.4);
-      declare(mus, "TruthMuons");
-      declare(SmearedParticles(mus, MUON_EFF_CMS_RUN2, MUON_SMEAR_CMS_RUN2), "Muons");
-
-      FinalState isofs(Cuts::abseta < 3.0 && Cuts::abspid != PID::ELECTRON && Cuts::abspid != PID::MUON);
-      declare(isofs, "IsoFS");
-      FinalState cfs(Cuts::abseta < 2.5 && Cuts::abscharge != 0);
-      declare(cfs, "TruthTracks");
-      declare(SmearedParticles(cfs, TRK_EFF_CMS_RUN2), "Tracks");
-
-      // Book histograms/counters
-      _h_srcounts.resize(160);
-      for (size_t ij = 0; ij < 4; ++ij) {
-        for (size_t ib = 0; ib < 4; ++ib) {
-          for (size_t ih = 0; ih < 10; ++ih) {
-            const size_t i = 40*ij + 10*ib + ih;
-            _h_srcounts[i] = bookCounter(toString(2*ij+3) + "j-" + toString(ib) + "b-" + toString(ih));
-          }
-        }
-      }
-
-    }
-
-
-    /// Perform the per-event analysis
-    void analyze(const Event& event) {
-
-      // Get jets and require Nj >= 3
-      const Jets jets24 = apply<JetAlg>(event, "Jets").jetsByPt(Cuts::pT > 30*GeV && Cuts::abseta < 2.4);
-      if (jets24.size() < 3) vetoEvent;
-
-      // HT cut
-      vector<double> jetpts24; transform(jets24, jetpts24, pT);
-      const double ht = sum(jetpts24, 0.0);
-      if (ht < 300*GeV) vetoEvent;
-
-      // HTmiss cut
-      const Jets jets50 = apply<JetAlg>(event, "Jets").jetsByPt(Cuts::pT > 30*GeV && Cuts::abseta < 5.0);
-      const FourMomentum htmissvec = -sum(jets24, mom, FourMomentum());
-      const double htmiss = htmissvec.pT();
-      if (htmissvec.pT() < 300*GeV) vetoEvent;
-
-
-      // Get baseline electrons & muons
-      Particles elecs = apply<ParticleFinder>(event, "Electrons").particles(Cuts::pT > 10*GeV);
-      Particles muons = apply<ParticleFinder>(event, "Muons").particles(Cuts::pT > 10*GeV);
-
-      // Electron/muon isolation
-      const Particles calofs = apply<ParticleFinder>(event, "IsoFS").particles();
-      ifilter_discard(elecs, [&](const Particle& e) {
-          const double R = max(0.05, min(0.2, 10*GeV/e.pT()));
-          double ptsum = -e.pT();
-          for (const Particle& p : calofs)
-            if (deltaR(p,e) < R) ptsum += p.pT();
-          return ptsum / e.pT() > 0.1;
-        });
-      ifilter_discard(muons, [&](const Particle& m) {
-          const double R = max(0.05, min(0.2, 10*GeV/m.pT()));
-          double ptsum = -m.pT();
-          for (const Particle& p : calofs)
-            if (deltaR(p,m) < R) ptsum += p.pT();
-          return ptsum / m.pT() > 0.2;
-        });
-
-      // Veto the event if there are any remaining baseline leptons
-      if (!elecs.empty()) vetoEvent;
-      if (!muons.empty()) vetoEvent;
-
-
-      // Get isolated tracks
-      Particles trks25 = apply<ParticleFinder>(event, "Tracks").particles();
-      ifilter_discard(trks25, [&](const Particle& t) {
-          double ptsum = -t.pT();
-          for (const Particle& p : trks25)
-            if (deltaR(p,t) < 0.3) ptsum += p.pT();
-          return ptsum/t.pT() > ((t.abspid() == PID::ELECTRON || t.abspid() == PID::MUON) ? 0.2 : 0.1);
-        });
-      const Particles trks = filter_select(trks25, Cuts::abseta < 2.4);
-
-      // Isolated track pT, pTmiss and mT cut
-      // mT^2 = m1^2 + m2^2 + 2(ET1 ET2 - pT1 . pT2))
-      // => mT0^2 = 2(ET1 |pT2| - pT1 . pT2)) for m1, m2 -> 0
-      FourMomentum ptmissvec = htmissvec; ///< @todo Can we do better? No e,mu left...
-      const double ptmiss = ptmissvec.pT();
-      for (const Particle& t : trks) {
-        const double ptcut = (t.abspid() == PID::ELECTRON || t.abspid() == PID::MUON) ? 5*GeV : 10*GeV;
-        const double mT = sqrt( t.mass2() + 2*(t.Et()*ptmiss - t.pT()*ptmiss*cos(deltaPhi(t,ptmissvec))) );
-        if (mT < 100*GeV && t.pT() < ptcut) vetoEvent;
-      }
-
-      // Lead jets isolation from Htmiss
-      if (deltaPhi(htmissvec, jets24[0]) < 0.5) vetoEvent;
-      if (deltaPhi(htmissvec, jets24[1]) < 0.5) vetoEvent;
-      if (deltaPhi(htmissvec, jets24[2]) < 0.3) vetoEvent;
-      if (jets24.size() >= 4 && deltaPhi(htmissvec, jets24[3]) < 0.3) vetoEvent;
-
-
-      ////////
-
-
-      // Calculate a bin index for this event
-      // Nj bin
-      static const vector<double> njedges = {3., 5., 7., 9.};
-      const size_t nj = jets24.size();
-      // Nbj bin
-      static const vector<double> njbedges = {0., 1., 2., 3.};
-      const size_t inj = binIndex(nj, njedges, true);
-      size_t nbj = 0;
-      for (const Jet& j : jets24)
-        if (j.bTagged()) nbj += 1;
-      const size_t inbj = binIndex(nbj, njbedges, true);
-      // HTmiss vs HT 2D bin
-      int iht = 0;
-      if (htmiss < 350*GeV) {
-        iht = ht < 500 ? 1 : ht < 1000 ? 2 : 3;
-      } if (htmiss < 500*GeV && ht > 350*GeV) {
-        iht = ht < 500 ? 4 : ht < 1000 ? 5 : 6;
-      } if (htmiss < 750*GeV && ht > 500*GeV) {
-        iht = ht < 1000 ? 7 : 8;
-      } if (ht > 750*GeV) {
-        iht = ht < 1500 ? 9 : 10;
-      }
-      if (iht == 0) vetoEvent;
-      iht -= 1; //< change from the paper's indexing scheme to C++ zero-indexed
-      // Total bin number
-      const size_t ibin = 40*inj + 10*inbj + (size_t)iht;
-
-      // Fill SR counter
-      _h_srcounts[ibin]->fill(event.weight());
-
-    }
-
-
-    /// Normalise counters after the run
-    void finalize() {
-
-      const double sf = 12.9*crossSection()/femtobarn/sumOfWeights();
-      scale(_h_srcounts, sf);
-
-    }
-
-    //@}
-
-
-  private:
-
-    /// @name Histograms
-    //@{
-    vector<CounterPtr> _h_srcounts;
-    //@}
-
-
-  };
-
-
-
-  // The hook for the plugin system
-  DECLARE_RIVET_PLUGIN(CMS_2016_PAS_SUS_16_14);
-
-
-}
diff --git a/src/Analyses/cat_with_lines b/src/Analyses/cat_with_lines
deleted file mode 100755
--- a/src/Analyses/cat_with_lines
+++ /dev/null
@@ -1,6 +0,0 @@
-#! /bin/bash
-for i in "$@"
-do
-	echo "#line 1 \"$i\""
-	cat "$i"
-done
diff --git a/src/Analyses/MC_JetAnalysis.cc b/src/AnalysisTools/MC_JetAnalysis.cc
rename from src/Analyses/MC_JetAnalysis.cc
rename to src/AnalysisTools/MC_JetAnalysis.cc
--- a/src/Analyses/MC_JetAnalysis.cc
+++ b/src/AnalysisTools/MC_JetAnalysis.cc
@@ -1,179 +1,181 @@
 // -*- C++ -*-
 #include "Rivet/Analyses/MC_JetAnalysis.hh"
 #include "Rivet/Projections/FastJets.hh"
 
 namespace Rivet {
 
   
 
 
   MC_JetAnalysis::MC_JetAnalysis(const string& name,
                                  size_t njet,
                                  const string& jetpro_name,
                                  double jetptcut)
     : Analysis(name), _njet(njet), _jetpro_name(jetpro_name), _jetptcut(jetptcut),
       _h_pT_jet(njet),
       _h_eta_jet(njet), _h_eta_jet_plus(njet), _h_eta_jet_minus(njet),
       _h_rap_jet(njet), _h_rap_jet_plus(njet), _h_rap_jet_minus(njet),
       _h_mass_jet(njet)
   {
     setNeedsCrossSection(true); // legitimate use, since a base class has no .info file!
   }
 
 
 
   // Book histograms
   void MC_JetAnalysis::init() {
     const double sqrts = sqrtS() ? sqrtS() : 14000.*GeV;
 
     for (size_t i = 0; i < _njet; ++i) {
       const string pTname = "jet_pT_" + to_str(i+1);
       const double pTmax = 1.0/(double(i)+2.0) * sqrts/GeV/2.0;
       const int nbins_pT = 100/(i+1);
-      _h_pT_jet[i] = bookHisto1D(pTname, logspace(nbins_pT, 10.0, pTmax));
+      if (pTmax > 10) { // Protection aginst logspace exception, needed for LEP
+        _h_pT_jet[i] = bookHisto1D(pTname, logspace(nbins_pT, 10.0, pTmax));
+      }
 
       const string massname = "jet_mass_" + to_str(i+1);
       const double mmax = 100.0;
       const int nbins_m = 100/(i+1);
       _h_mass_jet[i] = bookHisto1D(massname, logspace(nbins_m, 1.0, mmax));
 
       const string etaname = "jet_eta_" + to_str(i+1);
       _h_eta_jet[i] = bookHisto1D(etaname, i > 1 ? 25 : 50, -5.0, 5.0);
       _h_eta_jet_plus[i].reset(new Histo1D(i > 1 ? 15 : 25, 0, 5));
       _h_eta_jet_minus[i].reset(new Histo1D(i > 1 ? 15 : 25, 0, 5));
 
       const string rapname = "jet_y_" + to_str(i+1);
       _h_rap_jet[i] = bookHisto1D(rapname, i>1 ? 25 : 50, -5.0, 5.0);
       _h_rap_jet_plus[i].reset(new Histo1D(i > 1 ? 15 : 25, 0, 5));
       _h_rap_jet_minus[i].reset(new Histo1D(i > 1 ? 15 : 25, 0, 5));
 
       for (size_t j = i+1; j < min(size_t(3), _njet); ++j) {
         const std::pair<size_t, size_t> ij = std::make_pair(i, j);
 
         string detaname = "jets_deta_" + to_str(i+1) + to_str(j+1);
         _h_deta_jets.insert(make_pair(ij, bookHisto1D(detaname, 25, -5.0, 5.0)));
 
         string dphiname = "jets_dphi_" + to_str(i+1) + to_str(j+1);
         _h_dphi_jets.insert(make_pair(ij, bookHisto1D(dphiname, 25, 0.0, M_PI)));
 
         string dRname = "jets_dR_" + to_str(i+1) + to_str(j+1);
         _h_dR_jets.insert(make_pair(ij, bookHisto1D(dRname, 25, 0.0, 5.0)));
       }
     }
 
     _h_jet_multi_exclusive = bookHisto1D("jet_multi_exclusive", _njet+3, -0.5, _njet+3-0.5);
     _h_jet_multi_inclusive = bookHisto1D("jet_multi_inclusive", _njet+3, -0.5, _njet+3-0.5);
     _h_jet_multi_ratio = bookScatter2D("jet_multi_ratio");
     _h_jet_HT = bookHisto1D("jet_HT", logspace(50, _jetptcut, sqrts/GeV/2.0));
     _h_mjj_jets = bookHisto1D("jets_mjj", 40, 0.0, sqrts/GeV/2.0);
   }
 
 
   // Do the analysis
   void MC_JetAnalysis::analyze(const Event & e) {
     const double weight = e.weight();
 
     const Jets& jets = apply<FastJets>(e, _jetpro_name).jetsByPt(_jetptcut);
 
     for (size_t i = 0; i < _njet; ++i) {
       if (jets.size() < i+1) continue;
       _h_pT_jet[i]->fill(jets[i].pT()/GeV, weight);
       // Check for numerical precision issues with jet masses
       double m2_i = jets[i].mass2();
       if (m2_i < 0) {
         if (m2_i < -1e-4) {
           MSG_WARNING("Jet mass2 is negative: " << m2_i << " GeV^2. "
                       << "Truncating to 0.0, assuming numerical precision is to blame.");
         }
         m2_i = 0.0;
       }
 
       // Jet mass
       _h_mass_jet[i]->fill(sqrt(m2_i)/GeV, weight);
 
       // Jet eta
       const double eta_i = jets[i].eta();
       _h_eta_jet[i]->fill(eta_i, weight);
       (eta_i > 0.0 ? _h_eta_jet_plus : _h_eta_jet_minus)[i]->fill(fabs(eta_i), weight);
 
       // Jet rapidity
       const double rap_i = jets[i].rapidity();
       _h_rap_jet[i]->fill(rap_i, weight);
       (rap_i > 0.0 ? _h_rap_jet_plus : _h_rap_jet_minus)[i]->fill(fabs(rap_i), weight);
 
       // Inter-jet properties
       for (size_t j = i+1; j < min(size_t(3),_njet); ++j) {
         if (jets.size() < j+1) continue;
         std::pair<size_t, size_t> ij = std::make_pair(i, j);
         double deta = jets[i].eta()-jets[j].eta();
         double dphi = deltaPhi(jets[i].momentum(),jets[j].momentum());
         double dR = deltaR(jets[i].momentum(), jets[j].momentum());
         _h_deta_jets[ij]->fill(deta, weight);
         _h_dphi_jets[ij]->fill(dphi, weight);
         _h_dR_jets[ij]->fill(dR, weight);
       }
     }
 
     // Multiplicities
     _h_jet_multi_exclusive->fill(jets.size(), weight);
     for (size_t i = 0; i < _njet+2; ++i) {
       if (jets.size() >= i) {
         _h_jet_multi_inclusive->fill(i, weight);
       }
     }
 
     // HT
     double HT = 0.0;
     foreach (const Jet& jet, jets) {
       HT += jet.pT();
     }
     _h_jet_HT->fill(HT, weight);
 
     // mjj
     if (jets.size() > 1) {
       double mjj = (jets[0].momentum() + jets[1].momentum()).mass();
       _h_mjj_jets->fill(mjj, weight);
     }
   }
 
 
   // Finalize
   void MC_JetAnalysis::finalize() {
     for (size_t i = 0; i < _njet; ++i) {
       scale(_h_pT_jet[i], crossSection()/sumOfWeights());
       scale(_h_mass_jet[i], crossSection()/sumOfWeights());
       scale(_h_eta_jet[i], crossSection()/sumOfWeights());
       scale(_h_rap_jet[i], crossSection()/sumOfWeights());
 
       // Create eta/rapidity ratio plots
       divide(*_h_eta_jet_plus[i], *_h_eta_jet_minus[i], bookScatter2D("jet_eta_pmratio_" + to_str(i+1)));
       divide(*_h_rap_jet_plus[i], *_h_rap_jet_minus[i], bookScatter2D("jet_y_pmratio_" + to_str(i+1)));
     }
 
     // Scale the d{eta,phi,R} histograms
     typedef map<pair<size_t, size_t>, Histo1DPtr> HistMap;
     foreach (HistMap::value_type& it, _h_deta_jets) scale(it.second, crossSection()/sumOfWeights());
     foreach (HistMap::value_type& it, _h_dphi_jets) scale(it.second, crossSection()/sumOfWeights());
     foreach (HistMap::value_type& it, _h_dR_jets) scale(it.second, crossSection()/sumOfWeights());
 
     // Fill inclusive jet multi ratio
     int Nbins = _h_jet_multi_inclusive->numBins();
     for (int i = 0; i < Nbins-1; ++i) {
       _h_jet_multi_ratio->addPoint(i+1, 0, 0.5, 0);
       if (_h_jet_multi_inclusive->bin(i).sumW() > 0.0) {
         const double ratio = _h_jet_multi_inclusive->bin(i+1).sumW()/_h_jet_multi_inclusive->bin(i).sumW();
         const double relerr_i = _h_jet_multi_inclusive->bin(i).relErr();
         const double relerr_j = _h_jet_multi_inclusive->bin(i+1).relErr();
         const double err = ratio * (relerr_i + relerr_j);
         _h_jet_multi_ratio->point(i).setY(ratio, err);
       }
     }
 
     scale(_h_jet_multi_exclusive, crossSection()/sumOfWeights());
     scale(_h_jet_multi_inclusive, crossSection()/sumOfWeights());
     scale(_h_jet_HT, crossSection()/sumOfWeights());
     scale(_h_mjj_jets, crossSection()/sumOfWeights());
   }
 
 
 }
diff --git a/src/Analyses/MC_JetSplittings.cc b/src/AnalysisTools/MC_JetSplittings.cc
rename from src/Analyses/MC_JetSplittings.cc
rename to src/AnalysisTools/MC_JetSplittings.cc
diff --git a/src/Analyses/MC_ParticleAnalysis.cc b/src/AnalysisTools/MC_ParticleAnalysis.cc
rename from src/Analyses/MC_ParticleAnalysis.cc
rename to src/AnalysisTools/MC_ParticleAnalysis.cc
diff --git a/src/Analyses/Makefile.am b/src/AnalysisTools/Makefile.am
copy from src/Analyses/Makefile.am
copy to src/AnalysisTools/Makefile.am
--- a/src/Analyses/Makefile.am
+++ b/src/AnalysisTools/Makefile.am
@@ -1,626 +1,9 @@
-AUTOMAKE_OPTIONS = -Wno-portability
+noinst_LTLIBRARIES = libRivetAnalysisTools.la
 
-## Flags for building all plugins
-AM_LDFLAGS = $(LDFLAGS) -module -avoid-version -L$(FASTJETLIBPATH)
-LIBS = $(FASTJETCONFIGLIBADD)
-lib_LTLIBRARIES =
-
-BUILT_SOURCES =
-DISTCLEANFILES =
-
-EXTRA_DIST = cat_with_lines
-
-noinst_LTLIBRARIES = libRivetAnalysisTools.la
 libRivetAnalysisTools_la_SOURCES = \
     MC_ParticleAnalysis.cc \
     MC_JetAnalysis.cc \
     MC_JetSplittings.cc
 
-%__all.cc :
-	$(srcdir)/cat_with_lines $^ > $@
-
-if ENABLE_ANALYSES
-
-lib_LTLIBRARIES += RivetALICEAnalyses.la
-
-nodist_RivetALICEAnalyses_la_SOURCES = ALICE__all.cc
-BUILT_SOURCES += ALICE__all.cc
-DISTCLEANFILES += ALICE__all.cc
-
-ALICE__all.cc : $(ALICE_ALL)
-
-EXTRA_DIST += $(ALICE_ALL)
-
-ALICE_ALL = \
-    ALICE_2010_I880049.cc \
-    ALICE_2010_S8624100.cc \
-    ALICE_2010_S8625980.cc \
-    ALICE_2010_S8706239.cc \
-    ALICE_2011_S8909580.cc \
-    ALICE_2011_S8945144.cc \
-    ALICE_2012_I1116147.cc \
-    ALICE_2012_I1127497.cc \
-    ALICE_2012_I1181770.cc \
-    ALICE_2014_I1300380.cc \
-    ALICE_2015_I1357424.cc
-
-
-lib_LTLIBRARIES += RivetATLASAnalyses.la
-
-nodist_RivetATLASAnalyses_la_SOURCES = ATLAS_1__all.cc ATLAS_2__all.cc
-BUILT_SOURCES += ATLAS_1__all.cc ATLAS_2__all.cc
-DISTCLEANFILES += ATLAS_1__all.cc ATLAS_2__all.cc
-
-ATLAS_1__all.cc : $(ATLAS_ALL_1)
-ATLAS_2__all.cc : $(ATLAS_ALL_2)
-
-EXTRA_DIST += $(ATLAS_ALL_1) $(ATLAS_ALL_2)
-
-ATLAS_ALL_1 = \
-    ATLAS_2010_S8591806.cc \
-    ATLAS_2010_S8817804.cc \
-    ATLAS_2010_S8894728.cc \
-    ATLAS_2010_S8914702.cc \
-    ATLAS_2010_S8918562.cc \
-    ATLAS_2010_S8919674.cc \
-    ATLAS_2011_S8924791.cc \
-    ATLAS_2011_S8971293.cc \
-    ATLAS_2011_S8994773.cc \
-    ATLAS_2011_S8983313.cc \
-    ATLAS_2011_S9002537.cc \
-    ATLAS_2011_S9120807.cc \
-    ATLAS_2011_S9126244.cc \
-    ATLAS_2011_S9128077.cc \
-    ATLAS_2011_S9131140.cc \
-    ATLAS_2011_S9212183.cc \
-    ATLAS_2011_S9225137.cc \
-    ATLAS_2011_S9019561.cc \
-    ATLAS_2011_I894867.cc \
-    ATLAS_2011_I919017.cc \
-    ATLAS_2011_I921594.cc \
-    ATLAS_2011_I925932.cc \
-    ATLAS_2011_I926145.cc \
-    ATLAS_2011_I929691.cc \
-    ATLAS_2011_I930220.cc \
-    ATLAS_2011_I944826.cc \
-    ATLAS_2011_I945498.cc \
-    ATLAS_2011_I954993.cc \
-    ATLAS_2011_I928289_W.cc \
-    ATLAS_2011_I928289_Z.cc \
-    ATLAS_2011_S9035664.cc \
-    ATLAS_2012_I943401.cc \
-    ATLAS_2012_I1082009.cc \
-    ATLAS_2012_I1082936.cc \
-    ATLAS_2012_I1083318.cc \
-    ATLAS_2012_I1084540.cc \
-    ATLAS_2012_I1091481.cc \
-    ATLAS_2012_I1093734.cc \
-    ATLAS_2012_I1093738.cc \
-    ATLAS_2012_I1094564.cc \
-    ATLAS_2012_I1094568.cc \
-    ATLAS_2012_I1112263.cc \
-    ATLAS_2012_I1117704.cc \
-    ATLAS_2012_I1118269.cc \
-    ATLAS_2012_I1119557.cc \
-    ATLAS_2012_I1124167.cc \
-    ATLAS_2012_I1125575.cc \
-    ATLAS_2012_I1125961.cc \
-    ATLAS_2012_I1183818.cc \
-    ATLAS_2012_I1188891.cc \
-    ATLAS_2012_I1199269.cc \
-    ATLAS_2012_I1203852.cc \
-    ATLAS_2012_I1204447.cc \
-    ATLAS_2012_I1204784.cc \
-    ATLAS_2013_I1190187.cc \
-    ATLAS_2013_I1217867.cc \
-    ATLAS_2013_I1219109.cc \
-    ATLAS_2013_I1230812.cc \
-    ATLAS_2013_I1243871.cc \
-    ATLAS_2013_I1263495.cc \
-    ATLAS_2014_I1268975.cc \
-    ATLAS_2014_I1279489.cc \
-    ATLAS_2014_I1282441.cc \
-    ATLAS_2014_I1298811.cc \
-    ATLAS_2014_I1304688.cc \
-    ATLAS_2014_I1307756.cc \
-    ATLAS_2014_I1306294.cc \
-    ATLAS_2014_I1315949.cc \
-    ATLAS_2014_I1325553.cc \
-    ATLAS_2014_I1300647.cc \
-    ATLAS_2014_I1288706.cc \
-    ATLAS_2014_I1307243.cc \
-    ATLAS_2014_I1312627.cc
-
-ATLAS_ALL_2 = \
-    ATLAS_2013_I1217863_W.cc \
-    ATLAS_2013_I1217863_Z.cc \
-    ATLAS_2014_I1306615.cc \
-    ATLAS_2013_I1216670.cc \
-    ATLAS_2013_I1244522.cc \
-    ATLAS_2014_I1282447.cc \
-    ATLAS_2014_I1298023.cc \
-    ATLAS_2014_I1319490.cc \
-    ATLAS_2014_I1326641.cc \
-    ATLAS_2014_I1327229.cc \
-    ATLAS_2015_I1345452.cc \
-    ATLAS_2015_I1351916.cc \
-    ATLAS_2015_I1364361.cc \
-    ATLAS_2015_I1376945.cc \
-    ATLAS_2015_I1387176.cc \
-    ATLAS_2015_I1390114.cc \
-    ATLAS_2015_I1393758.cc \
-    ATLAS_2015_I1394679.cc \
-    ATLAS_2015_I1397635.cc \
-    ATLAS_2015_I1397637.cc \
-    ATLAS_2015_I1404878.cc \
-    ATLAS_2015_I1408516.cc \
-    ATLAS_2016_I1419070.cc \
-    ATLAS_2016_I1419652.cc \
-    ATLAS_2016_I1424838.cc \
-    ATLAS_2016_I1426695.cc \
-    ATLAS_2016_I1444991.cc \
-    ATLAS_2016_I1452559.cc \
-    ATLAS_2016_I1457605.cc \
-    ATLAS_2016_I1458270.cc \
-    ATLAS_2016_I1468168.cc \
-    ATLAS_2016_I1467230.cc \
-    ATLAS_2016_I1467454.cc \
-    ATLAS_2016_I1468167.cc \
-    ATLAS_2016_I1479760.cc
-
-# PRELIMINARY / OBSOLETE
-ATLAS_ALL_2 += \
-    ATLAS_2012_CONF_2012_001.cc \
-    ATLAS_2010_CONF_2010_049.cc \
-    ATLAS_2011_CONF_2011_090.cc \
-    ATLAS_2011_CONF_2011_098.cc \
-    ATLAS_2012_CONF_2012_103.cc \
-    ATLAS_2012_CONF_2012_104.cc \
-    ATLAS_2012_CONF_2012_105.cc \
-    ATLAS_2012_CONF_2012_109.cc \
-    ATLAS_2012_CONF_2012_153.cc \
-    ATLAS_2015_CONF_2015_041.cc \
-    ATLAS_2016_CONF_2016_037.cc \
-    ATLAS_2016_CONF_2016_054.cc \
-    ATLAS_2016_CONF_2016_078.cc \
-    ATLAS_2016_CONF_2016_094.cc \
-    ATLAS_2011_S9041966.cc \
-    ATLAS_2011_S9212353.cc \
-    ATLAS_2012_I946427.cc
-# UNVALIDATED
-ATLAS_ALL_2 += \
-    ATLAS_2011_S9108483.cc \
-    ATLAS_2012_I1095236.cc \
-    ATLAS_2012_I1126136.cc \
-    ATLAS_2012_I1180197.cc \
-    ATLAS_2012_I1186556.cc \
-    ATLAS_2012_I1190891.cc
-
-
-lib_LTLIBRARIES += RivetCMSAnalyses.la
-
-nodist_RivetCMSAnalyses_la_SOURCES = CMS__all.cc
-BUILT_SOURCES += CMS__all.cc
-DISTCLEANFILES += CMS__all.cc
-
-CMS__all.cc : $(CMS_ALL)
-
-EXTRA_DIST += $(CMS_ALL)
-
-
-
-CMS_ALL = \
-    CMS_2010_S8547297.cc \
-    CMS_2010_S8656010.cc \
-    CMS_2011_S8884919.cc \
-    CMS_2011_S8941262.cc \
-    CMS_2011_S8950903.cc \
-    CMS_2011_S8957746.cc \
-    CMS_2011_S8968497.cc \
-    CMS_2011_S8973270.cc \
-    CMS_2011_S8978280.cc \
-    CMS_2011_S9086218.cc \
-    CMS_2011_S9088458.cc \
-    CMS_2011_S9120041.cc \
-    CMS_2011_S9215166.cc \
-    CMS_2012_I941555.cc  \
-    CMS_2011_I954992.cc  \
-    CMS_2012_I1087342.cc \
-    CMS_2012_I1090423.cc \
-    CMS_2012_I1102908.cc \
-    CMS_2012_I1107658.cc \
-    CMS_2012_I1184941.cc \
-    CMS_2012_I1193338.cc \
-    CMS_2013_I1122847.cc \
-    CMS_2013_I1208923.cc \
-    CMS_2013_I1209721.cc \
-    CMS_2013_I1218372.cc \
-    CMS_2013_I1223519.cc \
-    CMS_2013_I1224539_DIJET.cc \
-    CMS_2013_I1224539_WJET.cc \
-    CMS_2013_I1224539_ZJET.cc \
-    CMS_2013_I1256943.cc \
-    CMS_2013_I1258128.cc \
-    CMS_2013_I1261026.cc \
-    CMS_2013_I1265659.cc \
-    CMS_2013_I1272853.cc \
-    CMS_2013_I1273574.cc \
-    CMS_2012_I1298807.cc \
-    CMS_2014_I1298810.cc \
-    CMS_2014_I1303894.cc \
-    CMS_2014_I1305624.cc \
-    CMS_2015_I1310737.cc \
-    CMS_2015_I1327224.cc \
-    CMS_2015_I1346843.cc \
-    CMS_2015_I1356998.cc \
-    CMS_2015_I1370682.cc \
-    CMS_2015_I1384119.cc \
-    CMS_2015_I1385107.cc \
-    CMS_2015_I1397174.cc \
-    CMS_2016_I1459051.cc \
-    CMS_2016_I1473674.cc \
-    CMSTOTEM_2014_I1294140.cc \
-    TOTEM_2014_I1328627.cc
-# PRELIMINARY
-CMS_ALL += \
-    CMS_2010_PAS_QCD_10_024.cc \
-    CMS_2012_PAS_QCD_11_010.cc \
-    CMS_2012_PAS_FSQ_12_020.cc \
-    CMS_2016_PAS_SUS_16_14.cc
-
-
-lib_LTLIBRARIES += RivetLHCbAnalyses.la
-
-nodist_RivetLHCbAnalyses_la_SOURCES = LHCb__all.cc
-BUILT_SOURCES += LHCb__all.cc
-DISTCLEANFILES += LHCb__all.cc
-
-LHCb__all.cc : $(LHCb_ALL)
-
-EXTRA_DIST += $(LHCb_ALL)
-
-LHCb_ALL = \
-    LHCB_2010_I867355.cc \
-    LHCB_2010_S8758301.cc \
-    LHCB_2011_I917009.cc \
-    LHCB_2011_I919315.cc \
-    LHCB_2012_I1119400.cc \
-    LHCB_2012_I1208102.cc \
-    LHCB_2013_I1218996.cc \
-    LHCB_2013_I1208105.cc \
-    LHCB_2014_I1262703.cc \
-    LHCB_2014_I1281685.cc \
-    LHCB_2015_I1333223.cc
-
-
-lib_LTLIBRARIES += RivetLHCfAnalyses.la
-RivetLHCfAnalyses_la_SOURCES = \
-    LHCF_2012_I1115479.cc
-
-
-lib_LTLIBRARIES += RivetTOTEMAnalyses.la
-RivetTOTEMAnalyses_la_SOURCES = \
-    TOTEM_2012_I1115294.cc \
-    TOTEM_2012_I1220862.cc
-
-
-lib_LTLIBRARIES += RivetCDFAnalyses.la
-
-nodist_RivetCDFAnalyses_la_SOURCES = CDF__all.cc
-BUILT_SOURCES += CDF__all.cc
-DISTCLEANFILES += CDF__all.cc
-
-CDF__all.cc : $(CDF_ALL)
-
-EXTRA_DIST += $(CDF_ALL)
-
-
-
-CDF_ALL = \
-    CDF_1988_S1865951.cc \
-    CDF_1990_S2089246.cc \
-    CDF_1994_S2952106.cc \
-    CDF_1996_S3418421.cc \
-    CDF_1998_S3618439.cc \
-    CDF_2000_S4155203.cc \
-    CDF_2000_S4266730.cc \
-    CDF_2001_S4517016.cc \
-    CDF_2001_S4751469.cc \
-    CDF_2002_S4796047.cc \
-    CDF_2004_S5839831.cc \
-    CDF_2005_S6080774.cc \
-    CDF_2005_S6217184.cc \
-    CDF_2006_S6450792.cc \
-    CDF_2006_S6653332.cc \
-    CDF_2007_S7057202.cc \
-    CDF_2008_S7540469.cc \
-    CDF_2008_S7541902.cc \
-    CDF_2008_S7782535.cc \
-    CDF_2008_S7828950.cc \
-    CDF_2008_S8093652.cc \
-    CDF_2008_S8095620.cc \
-    CDF_2009_S8233977.cc \
-    CDF_2009_I856131.cc \
-    CDF_2009_S8436959.cc \
-    CDF_2010_S8591881_DY.cc \
-    CDF_2010_S8591881_QCD.cc \
-    CDF_2012_I1124333.cc \
-    CDF_2015_1388868.cc
-# PRELIMINARY
-CDF_ALL += \
-    CDF_2009_NOTE_9936.cc \
-    CDF_2012_NOTE10874.cc
-# UNVALIDATED
-CDF_ALL += \
-    CDF_1993_S2742446.cc \
-    CDF_1996_S3108457.cc \
-    CDF_1996_S3349578.cc \
-    CDF_1997_S3541940.cc \
-    CDF_2001_S4563131.cc
-
-
-lib_LTLIBRARIES += RivetD0Analyses.la
-
-nodist_RivetD0Analyses_la_SOURCES = D0__all.cc
-BUILT_SOURCES += D0__all.cc
-DISTCLEANFILES += D0__all.cc
-
-D0__all.cc : $(D0_ALL)
-
-EXTRA_DIST += $(D0_ALL)
-
-
-
-D0_ALL = \
-    D0_1995_I398175.cc \
-    D0_2000_I499943.cc \
-    D0_2000_S4480767.cc \
-    D0_2001_S4674421.cc \
-    D0_2004_S5992206.cc \
-    D0_2006_S6438750.cc \
-    D0_2007_S7075677.cc \
-    D0_2008_S6879055.cc \
-    D0_2008_S7554427.cc \
-    D0_2008_S7662670.cc \
-    D0_2008_S7719523.cc \
-    D0_2008_S7837160.cc \
-    D0_2008_S7863608.cc \
-    D0_2009_S8202443.cc \
-    D0_2009_S8320160.cc \
-    D0_2009_S8349509.cc \
-    D0_2010_S8566488.cc \
-    D0_2010_S8570965.cc \
-    D0_2010_S8671338.cc \
-    D0_2010_S8821313.cc \
-    D0_2011_I895662.cc \
-    D0_2015_I1324946.cc \
-    D0_2000_I503361.cc
-# UNVALIDATED
-D0_ALL += \
-    D0_1996_S3214044.cc \
-    D0_1996_S3324664.cc
-
-
-lib_LTLIBRARIES += RivetHERAAnalyses.la
-
-nodist_RivetHERAAnalyses_la_SOURCES = HERA__all.cc
-BUILT_SOURCES += HERA__all.cc
-DISTCLEANFILES += HERA__all.cc
-
-HERA__all.cc : $(HERA_ALL)
-
-EXTRA_DIST += $(HERA_ALL)
-
-
-
-HERA_ALL = \
-    H1_1994_S2919893.cc \
-    H1_2000_S4129130.cc
-# UNVALIDATED
-HERA_ALL += \
-    H1_1995_S3167097.cc \
-    ZEUS_2001_S4815815.cc
-
-
-lib_LTLIBRARIES += RivetPetraAnalyses.la
-RivetPetraAnalyses_la_SOURCES = \
-    JADE_1998_S3612880.cc \
-    TASSO_1990_S2148048.cc
-
-lib_LTLIBRARIES += RivetLEPAnalyses.la
-
-nodist_RivetLEPAnalyses_la_SOURCES = LEP__all.cc
-BUILT_SOURCES += LEP__all.cc
-DISTCLEANFILES += LEP__all.cc
-
-LEP__all.cc : $(LEP_ALL)
-
-EXTRA_DIST += $(LEP_ALL)
-
-
-
-LEP_ALL = \
-    ALEPH_1991_S2435284.cc \
-    ALEPH_1995_I382179.cc \
-    ALEPH_1996_S3486095.cc \
-    ALEPH_1996_S3196992.cc \
-    ALEPH_1999_S4193598.cc \
-    ALEPH_2001_S4656318.cc \
-    ALEPH_2002_S4823664.cc \
-    ALEPH_2004_S5765862.cc \
-    DELPHI_1995_S3137023.cc \
-    DELPHI_1996_S3430090.cc \
-    DELPHI_1999_S3960137.cc \
-    DELPHI_2000_S4328825.cc \
-    DELPHI_2011_I890503.cc \
-    L3_1992_I336180.cc \
-    L3_2004_I652683.cc \
-    OPAL_1993_I342766.cc \
-    OPAL_1994_S2927284.cc \
-    OPAL_1995_S3198391.cc \
-    OPAL_1996_S3257789.cc \
-    OPAL_1997_S3396100.cc \
-    OPAL_1997_S3608263.cc \
-    OPAL_1998_S3702294.cc \
-    OPAL_1998_S3749908.cc \
-    OPAL_1998_S3780481.cc \
-    OPAL_2000_S4418603.cc \
-    OPAL_2001_S4553896.cc \
-    OPAL_2002_S5361494.cc \
-    OPAL_2003_I599181.cc \
-    OPAL_2004_S6132243.cc \
-    SLD_1996_S3398250.cc \
-    SLD_1999_S3743934.cc \
-    SLD_2002_S4869273.cc \
-    SLD_2004_S5693039.cc
-# UNVALIDATED
-LEP_ALL += \
-    OPAL_1993_S2692198.cc
-# OBSOLETE
-LEP_ALL += \
-    DELPHI_2002_069_CONF_603.cc
-
-
-lib_LTLIBRARIES += RivetRHICAnalyses.la
-
-nodist_RivetRHICAnalyses_la_SOURCES = RHIC__all.cc
-BUILT_SOURCES += RHIC__all.cc
-DISTCLEANFILES += RHIC__all.cc
-
-RHIC__all.cc : $(RHIC_ALL)
-
-EXTRA_DIST += $(RHIC_ALL)
-
-
-
-RHIC_ALL = \
-    STAR_2006_S6500200.cc \
-    STAR_2006_S6860818.cc \
-    STAR_2006_S6870392.cc
-# PRELIMINARY
-RHIC_ALL += \
-    STAR_2009_UE_HELEN.cc
-# UNVALIDATED
-RHIC_ALL += \
-    STAR_2008_S7869363.cc \
-    STAR_2008_S7993412.cc
-
-
-lib_LTLIBRARIES += RivetSPSAnalyses.la
-
-nodist_RivetSPSAnalyses_la_SOURCES = SPS__all.cc
-BUILT_SOURCES += SPS__all.cc
-DISTCLEANFILES += SPS__all.cc
-
-SPS__all.cc : $(SPS_ALL)
-
-EXTRA_DIST += $(SPS_ALL)
-
-
-
-SPS_ALL = \
-    UA1_1990_S2044935.cc \
-    UA5_1982_S875503.cc \
-    UA5_1986_S1583476.cc \
-    UA5_1987_S1640666.cc \
-    UA5_1988_S1867512.cc \
-    UA5_1989_S1926373.cc
-
-
-lib_LTLIBRARIES += RivetMiscAnalyses.la
-
-nodist_RivetMiscAnalyses_la_SOURCES = Misc__all.cc
-BUILT_SOURCES += Misc__all.cc
-DISTCLEANFILES += Misc__all.cc
-
-Misc__all.cc : $(Misc_ALL)
-
-EXTRA_DIST += $(Misc_ALL)
-
-
-
-Misc_ALL = \
-    E735_1998_S3905616.cc \
-    PDG_HADRON_MULTIPLICITIES.cc \
-    PDG_HADRON_MULTIPLICITIES_RATIOS.cc \
-    PDG_TAUS.cc \
-    JADE_OPAL_2000_S4300807.cc \
-    ARGUS_1993_S2653028.cc \
-    ARGUS_1993_S2669951.cc \
-    ARGUS_1993_S2789213.cc \
-    BABAR_2003_I593379.cc \
-    BABAR_2005_S6181155.cc \
-    BABAR_2007_S6895344.cc \
-    BABAR_2007_S7266081.cc \
-    BABAR_2013_I1116411.cc \
-    BABAR_2013_I1238276.cc \
-    BABAR_2015_I1334693.cc \
-    BELLE_2001_S4598261.cc \
-    BELLE_2008_I786560.cc \
-    BELLE_2011_I878990.cc \
-    BELLE_2013_I1216515.cc \
-    BELLE_2013_I1238273.cc \
-    BELLE_2015_I1397632.cc \
-    CLEO_2004_S5809304.cc
-# UNVALIDATED
-Misc_ALL += \
-    SFM_1984_S1178091.cc
-
-
-lib_LTLIBRARIES += RivetMCAnalyses.la
-
-nodist_RivetMCAnalyses_la_SOURCES = MC__all.cc
-BUILT_SOURCES += MC__all.cc
-DISTCLEANFILES += MC__all.cc
-
-MC__all.cc : $(MC_ALL)
-
-EXTRA_DIST += $(MC_ALL)
-
-
-
-MC_ALL = \
-    EXAMPLE.cc \
-    EXAMPLE_CUTS.cc \
-    EXAMPLE_SMEAR.cc \
-    MC_QCD_PARTONS.cc \
-    MC_Centrality.cc \
-    MC_DIPHOTON.cc \
-    MC_ELECTRONS.cc \
-    MC_GENERIC.cc \
-    MC_HINC.cc \
-    MC_HJETS.cc \
-    MC_HHJETS.cc \
-    MC_HKTSPLITTINGS.cc \
-    MC_IDENTIFIED.cc \
-    MC_JETS.cc \
-    MC_JETTAGS.cc \
-    MC_HFJETS.cc \
-    MC_LEADJETUE.cc \
-    MC_MET.cc \
-    MC_MUONS.cc \
-    MC_PDFS.cc \
-    MC_PHOTONINC.cc \
-    MC_PHOTONJETS.cc \
-    MC_PHOTONKTSPLITTINGS.cc \
-    MC_PHOTONS.cc \
-    MC_PRINTEVENT.cc \
-    MC_SUSY.cc \
-    MC_TTBAR.cc \
-    MC_VH2BB.cc \
-    MC_WINC.cc \
-    MC_WJETS.cc \
-    MC_WKTSPLITTINGS.cc \
-    MC_WPOL.cc \
-    MC_WWINC.cc \
-    MC_WWJETS.cc \
-    MC_WWKTSPLITTINGS.cc \
-    MC_XS.cc \
-    MC_ZINC.cc \
-    MC_ZJETS.cc \
-    MC_ZKTSPLITTINGS.cc \
-    MC_ZZINC.cc \
-    MC_ZZJETS.cc \
-    MC_ZZKTSPLITTINGS.cc
-
-endif
+libRivetAnalysisTools_la_LDFLAGS = $(AM_LDFLAGS) -L$(FASTJETLIBPATH)
+libRivetAnalysisTools_la_LIBS = $(FASTJETCONFIGLIBADD)
diff --git a/src/Core/Analysis.cc b/src/Core/Analysis.cc
--- a/src/Core/Analysis.cc
+++ b/src/Core/Analysis.cc
@@ -1,885 +1,897 @@
 // -*- C++ -*-
 #include "Rivet/Config/RivetCommon.hh"
 #include "Rivet/Analysis.hh"
 #include "Rivet/AnalysisHandler.hh"
 #include "Rivet/AnalysisInfo.hh"
 #include "Rivet/Tools/BeamConstraint.hh"
 
 namespace Rivet {
 
 
   Analysis::Analysis(const string& name)
     : _haveReadData(false),
       _crossSection(-1.0),
       _gotCrossSection(false),
       _analysishandler(NULL)
   {
     ProjectionApplier::_allowProjReg = false;
     _defaultname = name;
 
     unique_ptr<AnalysisInfo> ai = AnalysisInfo::make(name);
     assert(ai);
     _info = move(ai);
     assert(_info);
   }
   
   
   /// xyz This method replaces the content of all those pointers in "_analysisobjects" which have
   /// a partner in "objectsRead". The AnalysisObjectPtr are matched by their path.
   void Analysis::replaceByData( std::map< std::string, AnalysisObjectPtr > readObjects) {
 
     if( _haveReadData ) {
       MSG_WARNING("Analysis " << name() << " already got data. This is the second time and the older objects will be overwritten!");
     }
 
     for( AnalysisObjectPtr ao : _analysisobjects ) {
 
       if( !readObjects[ao->path()] ) {
         continue;
       }
 
       /// xyz type cast from AnalysisObjectPtr to respective pointer in order to check for number of
       // entries and points, respectively. Further, the operator "=" for YODA::AnalysisObject does
       // only copy the path/names and not the entries. However, this is done by the operator respective
       // "=" of YODA::Histo1D etc.
       // @note may not be the most efficient solution
       Histo1DPtr tmpHisto1D, tmpHisto1DRead;
       Histo2DPtr tmpHisto2D, tmpHisto2DRead;
       Profile1DPtr tmpProfile1D, tmpProfile1DRead;
       Profile2DPtr tmpProfile2D, tmpProfile2DRead;
       Scatter1DPtr tmpScatter1D, tmpScatter1DRead;
       Scatter2DPtr tmpScatter2D, tmpScatter2DRead;
       Scatter3DPtr tmpScatter3D, tmpScatter3DRead;
       
       // assume that type casting in the following is successful. Will be set to false if none of the
       // type castings was successful
       bool replaced = true;
 
       try {
 
         if( ( tmpHisto1D = dynamic_pointer_cast< YODA::Histo1D >( ao ) ) && ( tmpHisto1DRead = dynamic_pointer_cast< YODA::Histo1D >( readObjects[ao->path()] ) ) ) {
           *tmpHisto1D = *tmpHisto1DRead;
         } else if ( ( tmpHisto2D = dynamic_pointer_cast< YODA::Histo2D >( ao ) ) && ( tmpHisto2DRead = dynamic_pointer_cast< YODA::Histo2D >( readObjects[ao->path()] ) ) ) {
           *tmpHisto2D = *tmpHisto2DRead;
         } else if ( ( tmpProfile1D = dynamic_pointer_cast< YODA::Profile1D >( ao ) ) && ( tmpProfile1DRead = dynamic_pointer_cast< YODA::Profile1D >( readObjects[ao->path()] ) ) ) {
           *tmpProfile1D = *tmpProfile1DRead;
         } else if ( ( tmpProfile2D = dynamic_pointer_cast< YODA::Profile2D >( ao ) ) && ( tmpProfile2DRead = dynamic_pointer_cast< YODA::Profile2D >( readObjects[ao->path()] ) ) ) {
           *tmpProfile2D = *tmpProfile2DRead;
         } else if ( ( tmpScatter1D = dynamic_pointer_cast< YODA::Scatter1D >( ao ) ) && ( tmpScatter1DRead = dynamic_pointer_cast< YODA::Scatter1D >( readObjects[ao->path()] ) ) ) {
           *tmpScatter1D = *tmpScatter1DRead;
         } else if ( ( tmpScatter2D = dynamic_pointer_cast< YODA::Scatter2D >( ao ) ) && ( tmpScatter2DRead = dynamic_pointer_cast< YODA::Scatter2D >( readObjects[ao->path()] ) ) ) {
           *tmpScatter2D = *tmpScatter2DRead;
         } else if ( ( tmpScatter3D = dynamic_pointer_cast< YODA::Scatter3D >( ao ) ) && ( tmpScatter3DRead = dynamic_pointer_cast< YODA::Scatter3D >( readObjects[ao->path()] ) ) ) {
           *tmpScatter3D = *tmpScatter3DRead;
         } else {
           MSG_ERROR( "Unknown analysis object type " << ao->type() << " with path " << ao->path() );
           replaced = false;
         }
 
       } catch(...) {
 	throw UserError("Replacing histograms by given data failed in analysis");
       }
 
       if( replaced ) {
         MSG_INFO("Histogram with path " << ao->path() << " replaced");
         _haveReadData = true; // set to true because at least one object has been read
       }
 
     }
     
   }
   
   double Analysis::sqrtS() const {
     return handler().sqrtS();
   }
 
   const ParticlePair& Analysis::beams() const {
     return handler().beams();
   }
 
   const PdgIdPair Analysis::beamIds() const {
     return handler().beamIds();
   }
 
 
   const string Analysis::histoDir() const {
     /// @todo Cache in a member variable
     string _histoDir;
     if (_histoDir.empty()) {
       _histoDir = "/" + name();
       if (handler().runName().length() > 0) {
         _histoDir = "/" + handler().runName() + _histoDir;
       }
       replace_all(_histoDir, "//", "/"); //< iterates until none
     }
     return _histoDir;
   }
 
 
   const string Analysis::histoPath(const string& hname) const {
     const string path = histoDir() + "/" + hname;
     return path;
   }
 
 
   const string Analysis::histoPath(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const {
     return histoDir() + "/" + makeAxisCode(datasetId, xAxisId, yAxisId);
   }
 
 
   const string Analysis::makeAxisCode(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const {
     stringstream axisCode;
     axisCode << "d";
     if (datasetId < 10) axisCode << 0;
     axisCode << datasetId;
     axisCode << "-x";
     if (xAxisId < 10) axisCode << 0;
     axisCode << xAxisId;
     axisCode << "-y";
     if (yAxisId < 10) axisCode << 0;
     axisCode << yAxisId;
     return axisCode.str();
   }
 
 
   Log& Analysis::getLog() const {
     string logname = "Rivet.Analysis." + name();
     return Log::getLog(logname);
   }
 
 
   size_t Analysis::numEvents() const {
     return handler().numEvents();
   }
 
 
   double Analysis::sumOfWeights() const {
     return handler().sumOfWeights();
   }
 
 
   ///////////////////////////////////////////
 
 
   bool Analysis::isCompatible(const ParticlePair& beams) const {
     return isCompatible(beams.first.pid(),  beams.second.pid(),
                         beams.first.energy(), beams.second.energy());
   }
 
 
   bool Analysis::isCompatible(PdgId beam1, PdgId beam2, double e1, double e2) const {
     PdgIdPair beams(beam1, beam2);
     pair<double,double> energies(e1, e2);
     return isCompatible(beams, energies);
   }
 
 
   bool Analysis::isCompatible(const PdgIdPair& beams, const pair<double,double>& energies) const {
     // First check the beam IDs
     bool beamIdsOk = false;
     foreach (const PdgIdPair& bp, requiredBeams()) {
       if (compatible(beams, bp)) {
         beamIdsOk =  true;
         break;
       }
     }
     if (!beamIdsOk) return false;
 
     // Next check that the energies are compatible (within 1% or 1 GeV, whichever is larger, for a bit of UI forgiveness)
 
     /// @todo Use some sort of standard ordering to improve comparisons, esp. when the two beams are different particles
     bool beamEnergiesOk = requiredEnergies().size() > 0 ? false : true;
     typedef pair<double,double> DoublePair;
     foreach (const DoublePair& ep, requiredEnergies()) {
       if ((fuzzyEquals(ep.first, energies.first, 0.01) && fuzzyEquals(ep.second, energies.second, 0.01)) ||
           (fuzzyEquals(ep.first, energies.second, 0.01) && fuzzyEquals(ep.second, energies.first, 0.01)) ||
           (abs(ep.first - energies.first) < 1*GeV && abs(ep.second - energies.second) < 1*GeV) ||
           (abs(ep.first - energies.second) < 1*GeV && abs(ep.second - energies.first) < 1*GeV)) {
         beamEnergiesOk =  true;
         break;
       }
     }
     return beamEnergiesOk;
 
     /// @todo Need to also check internal consistency of the analysis'
     /// beam requirements with those of the projections it uses.
   }
 
 
   ///////////////////////////////////////////
 
 
   Analysis& Analysis::setCrossSection(double xs) {
     _crossSection = xs;
     _gotCrossSection = true;
     return *this;
   }
 
   double Analysis::crossSection() const {
     if (!_gotCrossSection || std::isnan(_crossSection)) {
       string errMsg = "You did not set the cross section for the analysis " + name();
       throw Error(errMsg);
     }
     return _crossSection;
   }
 
   double Analysis::crossSectionPerEvent() const {
     const double sumW = sumOfWeights();
     assert(sumW != 0.0);
     return _crossSection / sumW;
   }
 
 
 
   ////////////////////////////////////////////////////////////
   // Histogramming
 
 
   void Analysis::_cacheRefData() const {
     if (_refdata.empty()) {
       MSG_TRACE("Getting refdata cache for paper " << name());
       _refdata = getRefData(name());
     }
   }
 
 
-  const Scatter2D& Analysis::refData(const string& hname) const {
-    _cacheRefData();
-    MSG_TRACE("Using histo bin edges for " << name() << ":" << hname);
-    if (!_refdata[hname]) {
-      MSG_ERROR("Can't find reference histogram " << hname);
-      throw Exception("Reference data " + hname + " not found.");
-    }
-    return dynamic_cast<Scatter2D&>(*_refdata[hname]);
-  }
-
-
-  const Scatter2D& Analysis::refData(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const {
-    const string hname = makeAxisCode(datasetId, xAxisId, yAxisId);
-    return refData(hname);
-  }
-
-
   CounterPtr Analysis::bookCounter(const string& cname,
                                    const string& title) {
                                    // const string& xtitle,
                                    // const string& ytitle) {
     const string path = histoPath(cname);
     CounterPtr ctr = make_shared<Counter>(path, title);
     addAnalysisObject(ctr);
     MSG_TRACE("Made counter " << cname << " for " << name());
     // hist->setAnnotation("XLabel", xtitle);
     // hist->setAnnotation("YLabel", ytitle);
     return ctr;
   }
 
 
   CounterPtr Analysis::bookCounter(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId,
                                    const string& title) {
                                    // const string& xtitle,
                                    // const string& ytitle) {
     const string axisCode = makeAxisCode(datasetId, xAxisId, yAxisId);
     return bookCounter(axisCode, title);
   }
 
 
   Histo1DPtr Analysis::bookHisto1D(const string& hname,
                                    size_t nbins, double lower, double upper,
                                    const string& title,
                                    const string& xtitle,
                                    const string& ytitle) {
-    const string path = histoPath(hname);
-    Histo1DPtr hist = make_shared<Histo1D>(nbins, lower, upper, path, title);
-    addAnalysisObject(hist);
-    MSG_TRACE("Made histogram " << hname <<  " for " << name());
+    Histo1DPtr hist;
+    try { // try to bind to pre-existing
+      // AnalysisObjectPtr ao = getAnalysisObject(path);
+      // hist = dynamic_pointer_cast<Histo1D>(ao);
+      hist = getHisto1D(hname);
+      /// @todo Test that cast worked
+      /// @todo Also test that binning is as expected?
+      MSG_TRACE("Bound pre-existing histogram " << hname <<  " for " << name());
+    } catch (...) { // binding failed; make it from scratch
+      hist = make_shared<Histo1D>(nbins, lower, upper, histoPath(hname), title);
+      addAnalysisObject(hist);
+      MSG_TRACE("Made histogram " << hname <<  " for " << name());
+    }
+    hist->setTitle(title);
     hist->setAnnotation("XLabel", xtitle);
     hist->setAnnotation("YLabel", ytitle);
     return hist;
   }
 
 
   Histo1DPtr Analysis::bookHisto1D(const string& hname,
                                    const vector<double>& binedges,
                                    const string& title,
                                    const string& xtitle,
                                    const string& ytitle) {
-    const string path = histoPath(hname);
-    Histo1DPtr hist = make_shared<Histo1D>(binedges, path, title);
-    addAnalysisObject(hist);
-    MSG_TRACE("Made histogram " << hname <<  " for " << name());
+    Histo1DPtr hist;
+    try { // try to bind to pre-existing
+      // AnalysisObjectPtr ao = getAnalysisObject(path);
+      // hist = dynamic_pointer_cast<Histo1D>(ao);
+      hist = getHisto1D(hname);
+      /// @todo Test that cast worked
+      /// @todo Also test that binning is as expected?
+      MSG_TRACE("Bound pre-existing histogram " << hname <<  " for " << name());
+    } catch (...) { // binding failed; make it from scratch
+      hist = make_shared<Histo1D>(binedges, histoPath(hname), title);
+      addAnalysisObject(hist);
+      MSG_TRACE("Made histogram " << hname <<  " for " << name());
+    }
+    hist->setTitle(title);
     hist->setAnnotation("XLabel", xtitle);
     hist->setAnnotation("YLabel", ytitle);
     return hist;
   }
 
 
   Histo1DPtr Analysis::bookHisto1D(const string& hname,
                                    const Scatter2D& refscatter,
                                    const string& title,
                                    const string& xtitle,
                                    const string& ytitle) {
-    const string path = histoPath(hname);
-    Histo1DPtr hist = make_shared<Histo1D>(refscatter, path);
-    addAnalysisObject(hist);
-    MSG_TRACE("Made histogram " << hname <<  " for " << name());
+    Histo1DPtr hist;
+    try { // try to bind to pre-existing
+      // AnalysisObjectPtr ao = getAnalysisObject(path);
+      // hist = dynamic_pointer_cast<Histo1D>(ao);
+      hist = getHisto1D(hname);
+      /// @todo Test that cast worked
+      /// @todo Also test that binning is as expected?
+      MSG_TRACE("Bound pre-existing histogram " << hname <<  " for " << name());
+    } catch (...) { // binding failed; make it from scratch
+      hist = make_shared<Histo1D>(refscatter, histoPath(hname));
+      addAnalysisObject(hist);
+      MSG_TRACE("Made histogram " << hname <<  " for " << name());
+    }
     hist->setTitle(title);
     hist->setAnnotation("XLabel", xtitle);
     hist->setAnnotation("YLabel", ytitle);
     return hist;
   }
 
 
   Histo1DPtr Analysis::bookHisto1D(const string& hname,
                                    const string& title,
                                    const string& xtitle,
                                    const string& ytitle) {
     const Scatter2D& refdata = refData(hname);
     return bookHisto1D(hname, refdata, title, xtitle, ytitle);
   }
 
 
   Histo1DPtr Analysis::bookHisto1D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId,
                                    const string& title,
                                    const string& xtitle,
                                    const string& ytitle) {
     const string axisCode = makeAxisCode(datasetId, xAxisId, yAxisId);
     return bookHisto1D(axisCode, title, xtitle, ytitle);
   }
 
 
   /// @todo Add booking methods which take a path, titles and *a reference Scatter from which to book*
 
 
   /////////////////
 
 
   Histo2DPtr Analysis::bookHisto2D(const string& hname,
                                    size_t nxbins, double xlower, double xupper,
                                    size_t nybins, double ylower, double yupper,
                                    const string& title,
                                    const string& xtitle,
                                    const string& ytitle,
                                    const string& ztitle)
   {
     const string path = histoPath(hname);
     Histo2DPtr hist = make_shared<Histo2D>(nxbins, xlower, xupper, nybins, ylower, yupper, path, title);
     addAnalysisObject(hist);
     MSG_TRACE("Made 2D histogram " << hname <<  " for " << name());
     hist->setAnnotation("XLabel", xtitle);
     hist->setAnnotation("YLabel", ytitle);
     hist->setAnnotation("ZLabel", ztitle);
     return hist;
   }
 
 
   Histo2DPtr Analysis::bookHisto2D(const string& hname,
                                    const vector<double>& xbinedges,
                                    const vector<double>& ybinedges,
                                    const string& title,
                                    const string& xtitle,
                                    const string& ytitle,
                                    const string& ztitle)
   {
     const string path = histoPath(hname);
     Histo2DPtr hist = make_shared<Histo2D>(xbinedges, ybinedges, path, title);
     addAnalysisObject(hist);
     MSG_TRACE("Made 2D histogram " << hname <<  " for " << name());
     hist->setAnnotation("XLabel", xtitle);
     hist->setAnnotation("YLabel", ytitle);
     hist->setAnnotation("ZLabel", ztitle);
     return hist;
   }
 
 
   // Histo2DPtr Analysis::bookHisto2D(const string& hname,
   //                                  const Scatter3D& refscatter,
   //                                  const string& title="",
   //                                  const string& xtitle="",
   //                                  const string& ytitle="",
   //                                  const string& ztitle="") {
   //   const string path = histoPath(hname);
   //   Histo2DPtr hist( new Histo2D(refscatter, path) );
   //   addAnalysisObject(hist);
   //   MSG_TRACE("Made 2D histogram " << hname <<  " for " << name());
   //   hist->setTitle(title);
   //   hist->setAnnotation("XLabel", xtitle);
   //   hist->setAnnotation("YLabel", ytitle);
   //   hist->setAnnotation("ZLabel", ztitle);
   //   return hist;
   // }
 
 
   // Histo2DPtr Analysis::bookHisto2D(const string& hname,
   //                                  const string& title,
   //                                  const string& xtitle,
   //                                  const string& ytitle,
   //                                  const string& ztitle) {
   //   const Scatter3D& refdata = refData(hname);
   //   return bookHisto2D(hname, refdata, title, xtitle, ytitle, ztitle);
   // }
 
 
   // Histo2DPtr Analysis::bookHisto2D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId,
   //                                  const string& title,
   //                                  const string& xtitle,
   //                                  const string& ytitle,
   //                                  const string& ztitle) {
   //   const string axisCode = makeAxisCode(datasetId, xAxisId, yAxisId);
   //   return bookHisto2D(axisCode, title, xtitle, ytitle, ztitle);
   // }
 
 
   /////////////////
 
 
   Profile1DPtr Analysis::bookProfile1D(const string& hname,
                                        size_t nbins, double lower, double upper,
                                        const string& title,
                                        const string& xtitle,
                                        const string& ytitle) {
     const string path = histoPath(hname);
     Profile1DPtr prof = make_shared<Profile1D>(nbins, lower, upper, path, title);
     addAnalysisObject(prof);
     MSG_TRACE("Made profile histogram " << hname <<  " for " << name());
     prof->setAnnotation("XLabel", xtitle);
     prof->setAnnotation("YLabel", ytitle);
     return prof;
   }
 
 
   Profile1DPtr Analysis::bookProfile1D(const string& hname,
                                        const vector<double>& binedges,
                                        const string& title,
                                        const string& xtitle,
                                        const string& ytitle) {
     const string path = histoPath(hname);
     Profile1DPtr prof = make_shared<Profile1D>(binedges, path, title);
     addAnalysisObject(prof);
     MSG_TRACE("Made profile histogram " << hname <<  " for " << name());
     prof->setAnnotation("XLabel", xtitle);
     prof->setAnnotation("YLabel", ytitle);
     return prof;
   }
 
 
   Profile1DPtr Analysis::bookProfile1D(const string& hname,
                                        const Scatter2D& refscatter,
                                        const string& title,
                                        const string& xtitle,
                                        const string& ytitle) {
     const string path = histoPath(hname);
     Profile1DPtr prof = make_shared<Profile1D>(refscatter, path);
     addAnalysisObject(prof);
     MSG_TRACE("Made profile histogram " << hname <<  " for " << name());
     prof->setTitle(title);
     prof->setAnnotation("XLabel", xtitle);
     prof->setAnnotation("YLabel", ytitle);
     return prof;
   }
 
 
   Profile1DPtr Analysis::bookProfile1D(const string& hname,
                                        const string& title,
                                        const string& xtitle,
                                        const string& ytitle) {
     const Scatter2D& refdata = refData(hname);
     return bookProfile1D(hname, refdata, title, xtitle, ytitle);
   }
 
 
   Profile1DPtr Analysis::bookProfile1D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId,
                                        const string& title,
                                        const string& xtitle,
                                        const string& ytitle) {
     const string axisCode = makeAxisCode(datasetId, xAxisId, yAxisId);
     return bookProfile1D(axisCode, title, xtitle, ytitle);
   }
 
 
   ///////////////////
 
 
 
   Profile2DPtr Analysis::bookProfile2D(const string& hname,
                                    size_t nxbins, double xlower, double xupper,
                                    size_t nybins, double ylower, double yupper,
                                    const string& title,
                                    const string& xtitle,
                                    const string& ytitle,
                                    const string& ztitle)
   {
     const string path = histoPath(hname);
     Profile2DPtr prof = make_shared<Profile2D>(nxbins, xlower, xupper, nybins, ylower, yupper, path, title);
     addAnalysisObject(prof);
     MSG_TRACE("Made 2D profile histogram " << hname <<  " for " << name());
     prof->setAnnotation("XLabel", xtitle);
     prof->setAnnotation("YLabel", ytitle);
     prof->setAnnotation("ZLabel", ztitle);
     return prof;
   }
 
 
   Profile2DPtr Analysis::bookProfile2D(const string& hname,
                                    const vector<double>& xbinedges,
                                    const vector<double>& ybinedges,
                                    const string& title,
                                    const string& xtitle,
                                    const string& ytitle,
                                    const string& ztitle)
   {
     const string path = histoPath(hname);
     Profile2DPtr prof = make_shared<Profile2D>(xbinedges, ybinedges, path, title);
     addAnalysisObject(prof);
     MSG_TRACE("Made 2D profile histogram " << hname <<  " for " << name());
     prof->setAnnotation("XLabel", xtitle);
     prof->setAnnotation("YLabel", ytitle);
     prof->setAnnotation("ZLabel", ztitle);
     return prof;
   }
 
 
   // Profile2DPtr Analysis::bookProfile2D(const string& hname,
   //                                  const Scatter3D& refscatter,
   //                                  const string& title="",
   //                                  const string& xtitle="",
   //                                  const string& ytitle="",
   //                                  const string& ztitle="") {
   //   const string path = histoPath(hname);
   //   Profile2DPtr prof( new Profile2D(refscatter, path) );
   //   addAnalysisObject(prof);
   //   MSG_TRACE("Made 2D profile histogram " << hname <<  " for " << name());
   //   prof->setTitle(title);
   //   prof->setAnnotation("XLabel", xtitle);
   //   prof->setAnnotation("YLabel", ytitle);
   //   prof->setAnnotation("ZLabel", ztitle);
   //   return prof;
   // }
 
 
   // Profile2DPtr Analysis::bookProfile2D(const string& hname,
   //                                  const string& title,
   //                                  const string& xtitle,
   //                                  const string& ytitle,
   //                                  const string& ztitle) {
   //   const Scatter3D& refdata = refData(hname);
   //   return bookProfile2D(hname, refdata, title, xtitle, ytitle, ztitle);
   // }
 
 
   // Profile2DPtr Analysis::bookProfile2D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId,
   //                                  const string& title,
   //                                  const string& xtitle,
   //                                  const string& ytitle,
   //                                  const string& ztitle) {
   //   const string axisCode = makeAxisCode(datasetId, xAxisId, yAxisId);
   //   return bookProfile2D(axisCode, title, xtitle, ytitle, ztitle);
   // }
 
 
   /////////////////
 
 
   Scatter2DPtr Analysis::bookScatter2D(unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId,
                                        bool copy_pts,
                                        const string& title,
                                        const string& xtitle,
                                        const string& ytitle) {
     const string axisCode = makeAxisCode(datasetId, xAxisId, yAxisId);
     return bookScatter2D(axisCode, copy_pts, title, xtitle, ytitle);
   }
 
 
   Scatter2DPtr Analysis::bookScatter2D(const string& hname,
                                        bool copy_pts,
                                        const string& title,
                                        const string& xtitle,
                                        const string& ytitle) {
     Scatter2DPtr s;
     const string path = histoPath(hname);
     if (copy_pts) {
       const Scatter2D& refdata = refData(hname);
       s = make_shared<Scatter2D>(refdata, path);
       foreach (Point2D& p, s->points()) p.setY(0, 0);
     } else {
       s = make_shared<Scatter2D>(path);
     }
     addAnalysisObject(s);
     MSG_TRACE("Made scatter " << hname <<  " for " << name());
     s->setTitle(title);
     s->setAnnotation("XLabel", xtitle);
     s->setAnnotation("YLabel", ytitle);
     return s;
   }
 
 
   Scatter2DPtr Analysis::bookScatter2D(const string& hname,
                                        size_t npts, double lower, double upper,
                                        const string& title,
                                        const string& xtitle,
                                        const string& ytitle) {
     const string path = histoPath(hname);
     Scatter2DPtr s = make_shared<Scatter2D>(path);
     const double binwidth = (upper-lower)/npts;
     for (size_t pt = 0; pt < npts; ++pt) {
       const double bincentre = lower + (pt + 0.5) * binwidth;
       s->addPoint(bincentre, 0, binwidth/2.0, 0);
     }
     addAnalysisObject(s);
     MSG_TRACE("Made scatter " << hname <<  " for " << name());
     s->setTitle(title);
     s->setAnnotation("XLabel", xtitle);
     s->setAnnotation("YLabel", ytitle);
     return s;
   }
 
 
   Scatter2DPtr Analysis::bookScatter2D(const string& hname,
                                        const vector<double>& binedges,
                                        const string& title,
                                        const string& xtitle,
                                        const string& ytitle) {
     const string path = histoPath(hname);
     Scatter2DPtr s = make_shared<Scatter2D>(path);
     for (size_t pt = 0; pt < binedges.size()-1; ++pt) {
       const double bincentre = (binedges[pt] + binedges[pt+1]) / 2.0;
       const double binwidth = binedges[pt+1] - binedges[pt];
       s->addPoint(bincentre, 0, binwidth/2.0, 0);
     }
     addAnalysisObject(s);
     MSG_TRACE("Made scatter " << hname <<  " for " << name());
     s->setTitle(title);
     s->setAnnotation("XLabel", xtitle);
     s->setAnnotation("YLabel", ytitle);
     return s;
   }
 
 
   /////////////////////
 
 
   void Analysis::divide(CounterPtr c1, CounterPtr c2, Scatter1DPtr s) const {
     const string path = s->path();
     *s = *c1 / *c2;
     s->setPath(path);
   }
 
   void Analysis::divide(const Counter& c1, const Counter& c2, Scatter1DPtr s) const {
     const string path = s->path();
     *s = c1 / c2;
     s->setPath(path);
   }
 
 
   void Analysis::divide(Histo1DPtr h1, Histo1DPtr h2, Scatter2DPtr s) const {
     const string path = s->path();
     *s = *h1 / *h2;
     s->setPath(path);
   }
 
   void Analysis::divide(const Histo1D& h1, const Histo1D& h2, Scatter2DPtr s) const {
     const string path = s->path();
     *s = h1 / h2;
     s->setPath(path);
   }
 
 
   void Analysis::divide(Profile1DPtr p1, Profile1DPtr p2, Scatter2DPtr s) const {
     const string path = s->path();
     *s = *p1 / *p2;
     s->setPath(path);
   }
 
   void Analysis::divide(const Profile1D& p1, const Profile1D& p2, Scatter2DPtr s) const {
     const string path = s->path();
     *s = p1 / p2;
     s->setPath(path);
   }
 
 
   void Analysis::divide(Histo2DPtr h1, Histo2DPtr h2, Scatter3DPtr s) const {
     const string path = s->path();
     *s = *h1 / *h2;
     s->setPath(path);
   }
 
   void Analysis::divide(const Histo2D& h1, const Histo2D& h2, Scatter3DPtr s) const {
     const string path = s->path();
     *s = h1 / h2;
     s->setPath(path);
   }
 
 
   void Analysis::divide(Profile2DPtr p1, Profile2DPtr p2, Scatter3DPtr s) const {
     const string path = s->path();
     *s = *p1 / *p2;
     s->setPath(path);
   }
 
   void Analysis::divide(const Profile2D& p1, const Profile2D& p2, Scatter3DPtr s) const {
     const string path = s->path();
     *s = p1 / p2;
     s->setPath(path);
   }
 
 
   /// @todo Counter and Histo2D efficiencies and asymms
 
 
   void Analysis::efficiency(Histo1DPtr h1, Histo1DPtr h2, Scatter2DPtr s) const {
     const string path = s->path();
     *s = YODA::efficiency(*h1, *h2);
     s->setPath(path);
   }
 
   void Analysis::efficiency(const Histo1D& h1, const Histo1D& h2, Scatter2DPtr s) const {
     const string path = s->path();
     *s = YODA::efficiency(h1, h2);
     s->setPath(path);
   }
 
 
   void Analysis::asymm(Histo1DPtr h1, Histo1DPtr h2, Scatter2DPtr s) const {
     const string path = s->path();
     *s = YODA::asymm(*h1, *h2);
     s->setPath(path);
   }
 
   void Analysis::asymm(const Histo1D& h1, const Histo1D& h2, Scatter2DPtr s) const {
     const string path = s->path();
     *s = YODA::asymm(h1, h2);
     s->setPath(path);
   }
 
 
   void Analysis::scale(CounterPtr cnt, double factor) {
     if (!cnt) {
       MSG_WARNING("Failed to scale counter=NULL in analysis " << name() << " (scale=" << factor << ")");
       return;
     }
     if (std::isnan(factor) || std::isinf(factor)) {
       MSG_WARNING("Failed to scale counter=" << cnt->path() << " in analysis: " << name() << " (invalid scale factor = " << factor << ")");
       factor = 0;
     }
     MSG_TRACE("Scaling counter " << cnt->path() << " by factor " << factor);
     try {
       cnt->scaleW(factor);
     } catch (YODA::Exception& we) {
       MSG_WARNING("Could not scale counter " << cnt->path());
       return;
     }
   }
 
 
   void Analysis::normalize(Histo1DPtr histo, double norm, bool includeoverflows) {
     if (!histo) {
       MSG_WARNING("Failed to normalize histo=NULL in analysis " << name() << " (norm=" << norm << ")");
       return;
     }
     MSG_TRACE("Normalizing histo " << histo->path() << " to " << norm);
     try {
       histo->normalize(norm, includeoverflows);
     } catch (YODA::Exception& we) {
       MSG_WARNING("Could not normalize histo " << histo->path());
       return;
     }
   }
 
 
   void Analysis::scale(Histo1DPtr histo, double factor) {
     if (!histo) {
       MSG_WARNING("Failed to scale histo=NULL in analysis " << name() << " (scale=" << factor << ")");
       return;
     }
     if (std::isnan(factor) || std::isinf(factor)) {
       MSG_WARNING("Failed to scale histo=" << histo->path() << " in analysis: " << name() << " (invalid scale factor = " << factor << ")");
       factor = 0;
     }
     MSG_TRACE("Scaling histo " << histo->path() << " by factor " << factor);
     try {
       histo->scaleW(factor);
     } catch (YODA::Exception& we) {
       MSG_WARNING("Could not scale histo " << histo->path());
       return;
     }
   }
 
 
   void Analysis::normalize(Histo2DPtr histo, double norm, bool includeoverflows) {
     if (!histo) {
       MSG_ERROR("Failed to normalize histo=NULL in analysis " << name() << " (norm=" << norm << ")");
       return;
     }
     MSG_TRACE("Normalizing histo " << histo->path() << " to " << norm);
     try {
       histo->normalize(norm, includeoverflows);
     } catch (YODA::Exception& we) {
       MSG_WARNING("Could not normalize histo " << histo->path());
       return;
     }
   }
 
 
   void Analysis::scale(Histo2DPtr histo, double factor) {
     if (!histo) {
       MSG_ERROR("Failed to scale histo=NULL in analysis " << name() << " (scale=" << factor << ")");
       return;
     }
     if (std::isnan(factor) || std::isinf(factor)) {
       MSG_ERROR("Failed to scale histo=" << histo->path() << " in analysis: " << name() << " (invalid scale factor = " << factor << ")");
       factor = 0;
     }
     MSG_TRACE("Scaling histo " << histo->path() << " by factor " << factor);
     try {
       histo->scaleW(factor);
     } catch (YODA::Exception& we) {
       MSG_WARNING("Could not scale histo " << histo->path());
       return;
     }
   }
 
 
   void Analysis::integrate(Histo1DPtr h, Scatter2DPtr s) const {
     // preserve the path info
     const string path = s->path();
     *s = toIntegralHisto(*h);
     s->setPath(path);
   }
 
   void Analysis::integrate(const Histo1D& h, Scatter2DPtr s) const {
     // preserve the path info
     const string path = s->path();
     *s = toIntegralHisto(h);
     s->setPath(path);
   }
 
 
   /// @todo 2D versions of integrate... defined how, exactly?!?
 
 
   //////////////////////////////////
 
 
   void Analysis::addAnalysisObject(AnalysisObjectPtr ao) {
     _analysisobjects.push_back(ao);
   }
 
   void Analysis::removeAnalysisObject(const string& path) {
     for (vector<AnalysisObjectPtr>::iterator it = _analysisobjects.begin();  it != _analysisobjects.end(); ++it) {
       if ((*it)->path() == path) {
         _analysisobjects.erase(it);
         break;
       }
     }
   }
 
   void Analysis::removeAnalysisObject(AnalysisObjectPtr ao) {
     for (vector<AnalysisObjectPtr>::iterator it = _analysisobjects.begin();  it != _analysisobjects.end(); ++it) {
       if (*it == ao) {
         _analysisobjects.erase(it);
         break;
       }
     }
  }
 
 
 }
diff --git a/src/Core/AnalysisHandler.cc b/src/Core/AnalysisHandler.cc
--- a/src/Core/AnalysisHandler.cc
+++ b/src/Core/AnalysisHandler.cc
@@ -1,431 +1,468 @@
 // -*- C++ -*-
 #include "Rivet/Config/RivetCommon.hh"
 #include "Rivet/AnalysisHandler.hh"
 #include "Rivet/Analysis.hh"
 #include "Rivet/Tools/ParticleName.hh"
 #include "Rivet/Tools/BeamConstraint.hh"
 #include "Rivet/Tools/Logging.hh"
 #include "Rivet/Projections/Beam.hh"
+#include "YODA/ReaderYODA.h"
 #include "YODA/WriterYODA.h"
 #include "YODA/ReaderYODA.h"
 
 namespace Rivet {
 
 
   AnalysisHandler::AnalysisHandler(const string& runname) // xyz Initialize introduced member "_haveReadData"
     : _haveReadData(false), _runname(runname), _numEvents(0),
       _sumOfWeights(0.0), _xs(NAN),
       _initialised(false), _ignoreBeams(false)
   {}
 
 
   AnalysisHandler::~AnalysisHandler()
   {}
 
 
   Log& AnalysisHandler::getLog() const {
     return Log::getLog("Rivet.Analysis.Handler");
   }
 
 
   void AnalysisHandler::init(const GenEvent& ge) {
     if (_initialised)
       throw UserError("AnalysisHandler::init has already been called: cannot re-initialize!");
 
     setRunBeams(Rivet::beams(ge));
     MSG_DEBUG("Initialising the analysis handler");
     _numEvents = 0;
     _sumOfWeights = 0.0;
     _sumOfWeightsSq = 0.0;
 
     // Check that analyses are beam-compatible, and remove those that aren't
     const size_t num_anas_requested = analysisNames().size();
     vector<string> anamestodelete;
     for (const AnaHandle a : _analyses) {
       if (!_ignoreBeams && !a->isCompatible(beams())) {
         //MSG_DEBUG(a->name() << " requires beams " << a->requiredBeams() << " @ " << a->requiredEnergies() << " GeV");
         anamestodelete.push_back(a->name());
       }
     }
     for (const string& aname : anamestodelete) {
       MSG_WARNING("Analysis '" << aname << "' is incompatible with the provided beams: removing");
       removeAnalysis(aname);
     }
     if (num_anas_requested > 0 && analysisNames().empty()) {
       cerr << "All analyses were incompatible with the first event's beams\n"
            << "Exiting, since this probably wasn't intentional!" << endl;
       exit(1);
     }
 
     // Warn if any analysis' status is not unblemished
     for (const AnaHandle a : analyses()) {
       if (toUpper(a->status()) == "PRELIMINARY") {
         MSG_WARNING("Analysis '" << a->name() << "' is preliminary: be careful, it may change and/or be renamed!");
       } else if (toUpper(a->status()) == "OBSOLETE") {
         MSG_WARNING("Analysis '" << a->name() << "' is obsolete: please update!");
       } else if (toUpper(a->status()).find("UNVALIDATED") != string::npos) {
         MSG_WARNING("Analysis '" << a->name() << "' is unvalidated: be careful, it may be broken!");
       }
     }
 
     // Initialize the remaining analyses
     for (AnaHandle a : _analyses) {
       MSG_DEBUG("Initialising analysis: " << a->name());
       try {
         // Allow projection registration in the init phase onwards
         a->_allowProjReg = true;
         a->init();
         //MSG_DEBUG("Checking consistency of analysis: " << a->name());
         //a->checkConsistency();
       } catch (const Error& err) {
         cerr << "Error in " << a->name() << "::init method: " << err.what() << endl;
         exit(1);
       }
       MSG_DEBUG("Done initialising analysis: " << a->name());
     }
     _initialised = true;
     MSG_DEBUG("Analysis handler initialised");
   }
 
 
   void AnalysisHandler::analyze(const GenEvent& ge) {
     // Call init with event as template if not already initialised
     if (!_initialised) init(ge);
     assert(_initialised);
 
-    // Ensure that beam details match those from the first event
-    const PdgIdPair beams = Rivet::beamIds(ge);
-    const double sqrts = Rivet::sqrtS(ge);
-    if (!compatible(beams, _beams) || !fuzzyEquals(sqrts, sqrtS())) {
-      cerr << "Event beams mismatch: "
-           << PID::toBeamsString(beams) << " @ " << sqrts/GeV << " GeV" << " vs. first beams "
-           << this->beams() << " @ " << this->sqrtS()/GeV << " GeV" << endl;
-      exit(1);
+    // Ensure that beam details match those from the first event (if we're checking beams)
+    if ( !_ignoreBeams ) {
+      const PdgIdPair beams = Rivet::beamIds(ge);
+      const double sqrts = Rivet::sqrtS(ge);
+      if (!compatible(beams, _beams) || !fuzzyEquals(sqrts, sqrtS())) {
+        cerr << "Event beams mismatch: "
+             << PID::toBeamsString(beams) << " @ " << sqrts/GeV << " GeV" << " vs. first beams "
+             << this->beams() << " @ " << this->sqrtS()/GeV << " GeV" << endl;
+        exit(1);
+      }
     }
 
+
     // Create the Rivet event wrapper
     /// @todo Filter/normalize the event here
     Event event(ge);
 
     // Weights
     /// @todo Drop this / just report first weight when we support multiweight events
     _numEvents += 1;
     _sumOfWeights += event.weight();
     _sumOfWeightsSq += sqr(event.weight());
     MSG_DEBUG("Event #" << _numEvents << " weight = " << event.weight());
 
     // Cross-section
     #ifdef HEPMC_HAS_CROSS_SECTION
     if (ge.cross_section()) {
       _xs = ge.cross_section()->cross_section();
       _xserr = ge.cross_section()->cross_section_error();
     }
     #endif
 
     // Run the analyses
     for (AnaHandle a : _analyses) {
       MSG_TRACE("About to run analysis " << a->name());
       try {
         a->analyze(event);
       } catch (const Error& err) {
         cerr << "Error in " << a->name() << "::analyze method: " << err.what() << endl;
         exit(1);
       }
       MSG_TRACE("Finished running analysis " << a->name());
     }
   }
 
 
   void AnalysisHandler::analyze(const GenEvent* ge) {
     if (ge == NULL) {
       MSG_ERROR("AnalysisHandler received null pointer to GenEvent");
       //throw Error("AnalysisHandler received null pointer to GenEvent");
     }
     analyze(*ge);
   }
 
 
   void AnalysisHandler::finalize() {
     if (!_initialised) return;
     MSG_INFO("Finalising analyses");
     for (AnaHandle a : _analyses) {
       a->setCrossSection(_xs);
       try {
         a->finalize();
       } catch (const Error& err) {
         cerr << "Error in " << a->name() << "::finalize method: " << err.what() << endl;
         exit(1);
       }
     }
 
     // Print out number of events processed
     MSG_INFO("Processed " << _numEvents << " event" << (_numEvents == 1 ? "" : "s"));
 
     // // Delete analyses
     // MSG_DEBUG("Deleting analyses");
     // _analyses.clear();
 
     // Print out MCnet boilerplate
     cout << endl;
     cout << "The MCnet usage guidelines apply to Rivet: see http://www.montecarlonet.org/GUIDELINES" << endl;
     cout << "Please acknowledge plots made with Rivet analyses, and cite arXiv:1003.0694 (http://arxiv.org/abs/1003.0694)" << endl;
   }
 
 
   /// This method does three things: (1) In case, the hanlder is not initialized,
   /// Analysis::init() is called for each analysis, (2) if YODA objects have been
   /// read before, those are passed to the analysis which replaces the content of
   /// the booked objects and after all (3) Analysis::post() is called.
   void AnalysisHandler::post() {
     MSG_INFO("Post-processing analyses");
     if( _haveReadData ) {
       MSG_INFO("Replace by data in case paths are matching");
     }
     for (AnaHandle a : _analyses) {
       if( !_initialised ) {
         MSG_INFO( "No MC running: The post-processing is based on YODA files only." );
         try {
           a->_allowProjReg = true;
           a->init();
         } catch( const Error& err ) {
           MSG_ERROR( "Unexpected error in " << a->name() << "::init() during the initialisation for the post-processing: " << err.what() );
           exit(1);
         }
       }
       if( _haveReadData ) {
         try {
           MSG_INFO("Replacing data ...");
           a->replaceByData( _readObjects );
         } catch (const UserError& err) {
           MSG_ERROR("Error in analysis " << a->name() << ": " << err.what() ) ;
 	}
       }
       try {
         a->post();
       } catch (const Error& err) {
         MSG_ERROR("Unexpected error in post() in analysis " << a->name() );
       }
     }
     MSG_INFO("Post-processing finished");
   }
 
   AnalysisHandler& AnalysisHandler::addAnalysis(const string& analysisname) {
     // Check for a duplicate analysis
     /// @todo Might we want to be able to run an analysis twice, with different params?
     ///       Requires avoiding histo tree clashes, i.e. storing the histos on the analysis objects.
     for (const AnaHandle& a : _analyses) {
       if (a->name() == analysisname) {
         MSG_WARNING("Analysis '" << analysisname << "' already registered: skipping duplicate");
         return *this;
       }
     }
     AnaHandle analysis( AnalysisLoader::getAnalysis(analysisname) );
     if (analysis.get() != 0) { // < Check for null analysis.
       MSG_DEBUG("Adding analysis '" << analysisname << "'");
       analysis->_analysishandler = this;
       _analyses.insert(analysis);
     } else {
       MSG_WARNING("Analysis '" << analysisname << "' not found.");
     }
     // MSG_WARNING(_analyses.size());
     // for (const AnaHandle& a : _analyses) MSG_WARNING(a->name());
     return *this;
   }
 
 
   AnalysisHandler& AnalysisHandler::removeAnalysis(const string& analysisname) {
     std::shared_ptr<Analysis> toremove;
     for (const AnaHandle a : _analyses) {
       if (a->name() == analysisname) {
         toremove = a;
         break;
       }
     }
     if (toremove.get() != 0) {
       MSG_DEBUG("Removing analysis '" << analysisname << "'");
       _analyses.erase(toremove);
     }
     return *this;
   }
 
 
+  /////////////////////////////
+
+
+  void AnalysisHandler::addData(const std::vector<AnalysisObjectPtr>& aos) {
+    for (const AnalysisObjectPtr ao : aos) {
+      const string path = ao->path();
+      if (path.size() > 1) { // path > "/"
+        try {
+          const string ananame =  split(path, "/")[0];
+          AnaHandle a = analysis(ananame);
+          a->addAnalysisObject(ao); /// @todo Need to statistically merge...
+        } catch (const Error& e) {
+          MSG_WARNING(e.what());
+        }
+      }
+    }
+  }
+
+
+  void AnalysisHandler::readData(const string& filename) {
+    vector<AnalysisObjectPtr> aos;
+    try {
+      /// @todo Use new YODA SFINAE to fill the smart ptr vector directly
+      vector<YODA::AnalysisObject*> aos_raw;
+      YODA::ReaderYODA::read(filename, aos_raw);
+      for (AnalysisObject* aor : aos_raw) aos.push_back(AnalysisObjectPtr(aor));
+    } catch (...) { //< YODA::ReadError&
+      throw UserError("Unexpected error in reading file: " + filename);
+    }
+    if (!aos.empty()) addData(aos);
+  }
+
+
   vector<AnalysisObjectPtr> AnalysisHandler::getData() const {
     vector<AnalysisObjectPtr> rtn;
+    // Event counter
     rtn.push_back( make_shared<Counter>(YODA::Dbn0D(_numEvents, _sumOfWeights, _sumOfWeightsSq), "/_EVTCOUNT") );
+    // Cross-section + err as scatter
     YODA::Scatter1D::Points pts; pts.insert(YODA::Point1D(_xs, _xserr));
     rtn.push_back( make_shared<Scatter1D>(pts, "/_XSEC") );
+    // Analysis histograms
     for (const AnaHandle a : analyses()) {
       vector<AnalysisObjectPtr> aos = a->analysisObjects();
       // MSG_WARNING(a->name() << " " << aos.size());
       for (const AnalysisObjectPtr ao : aos) {
-        // Exclude paths starting with /TMP/ from final write-out
+        // Exclude paths from final write-out if they contain a "TMP" layer (i.e. matching "/TMP/")
         /// @todo This needs to be much more nuanced for re-entrant histogramming
         if (ao->path().find("/TMP/") != string::npos) continue;
         rtn.push_back(ao);
       }
     }
-    sort(rtn.begin(), rtn.end(),
-         [](AnalysisObjectPtr a, AnalysisObjectPtr b) {
-              return a->path() < b->path();
-          }
-        );
+    // Sort histograms alphanumerically by path before write-out
+    sort(rtn.begin(), rtn.end(), [](AnalysisObjectPtr a, AnalysisObjectPtr b) {return a->path() < b->path();});
     return rtn;
   }
 
 
   void AnalysisHandler::writeData(const string& filename) const {
     const vector<AnalysisObjectPtr> aos = getData();
     try {
       YODA::WriterYODA::write(filename, aos.begin(), aos.end());
-    } catch (...) { /// @todo Move to specific YODA::WriteError type when YODA >= 1.5.0 is well-established
-      throw UserError("Unexpected error in writing file to: " + filename);
+    } catch (...) { //< YODA::WriteError&
+      throw UserError("Unexpected error in writing file: " + filename);
     }
   }
 
 
   /// xyz Reads Objects from a given YODA file and stores those in a map. No duplicates possible
   /// since they would be overwritten. @note Method has to be called before AnalysisHandler::init
   /// since there potential read objects are given to the added analyses.
   void AnalysisHandler::readData( const std::string& filename ) {
 
     YODA::Reader &reader = YODA::mkReader( filename );
 
     std::vector< YODA::AnalysisObject* > aos;
 
     try {
       reader.read( filename, aos );
     } catch(const YODA::ReadError& err) {
       MSG_ERROR( "Error in AnalysisHandler::readData: " << err.what() );
       exit(1);
     }
     MSG_INFO( "Read data from " << filename );
 
     for( const auto ao : aos ) {
       //MSG_INFO( "type of ao is " << typeid( ao ).name() );
       AnalysisObjectPtr append( ao );
 
       int numEntries = 0;
 
       try {
 
         if( Histo1DPtr tmpHisto1D = dynamic_pointer_cast< YODA::Histo1D >( append ) ) {
           numEntries = tmpHisto1D->numEntries();
 	} else if ( Histo2DPtr tmpHisto2D = dynamic_pointer_cast< YODA::Histo2D >( append ) ) {
           numEntries = tmpHisto2D->numEntries();
         } else if ( Profile1DPtr tmpProfile1D = dynamic_pointer_cast< YODA::Profile1D >( append ) ) {
           numEntries = tmpProfile1D->numEntries();
         } else if ( Profile2DPtr tmpProfile2D = dynamic_pointer_cast< YODA::Profile2D >( append ) ) {
           numEntries = tmpProfile2D->numEntries();
 	} else if ( Scatter1DPtr tmpScatter1D = dynamic_pointer_cast< YODA::Scatter1D >( append ) ) {
           numEntries = tmpScatter1D->numPoints();
         } else if ( Scatter2DPtr tmpScatter2D = dynamic_pointer_cast< YODA::Scatter2D >( append ) ) {
           numEntries = tmpScatter2D->numPoints();
         } else if ( Scatter3DPtr tmpScatter3D = dynamic_pointer_cast< YODA::Scatter3D >( append ) ) {
           numEntries = tmpScatter3D->numPoints();
         }
 
         if( numEntries <= 0 ) {
           continue;
         }
 
         if ( !_readObjects[ao->path()] ) {
           _readObjects[ao->path()] = append;
         }
         // in case an object with the given path is already read try to merge the new and the old one and save this version
         // else
 	// merge...; or fail
       } catch(...) {
         MSG_ERROR( "Unable to read data!" );
         throw UserError( "Unexpected error while reading data!" );
       }
     }
     _haveReadData = true;
   }
 
 
   string AnalysisHandler::runName() const { return _runname; }
   size_t AnalysisHandler::numEvents() const { return _numEvents; }
   double AnalysisHandler::sumOfWeights() const { return _sumOfWeights; }
 
 
   void AnalysisHandler::setSumOfWeights(const double& sum) {
     _sumOfWeights=sum;
   }
 
 
   std::vector<std::string> AnalysisHandler::analysisNames() const {
     std::vector<std::string> rtn;
     for (AnaHandle a : _analyses) {
       rtn.push_back(a->name());
     }
     return rtn;
   }
 
 
   const AnaHandle AnalysisHandler::analysis(const std::string& analysisname) const {
     for (const AnaHandle a : analyses())
       if (a->name() == analysisname) return a;
     throw Error("No analysis named '" + analysisname + "' registered in AnalysisHandler");
   }
 
 
   AnalysisHandler& AnalysisHandler::addAnalyses(const std::vector<std::string>& analysisnames) {
     for (const string& aname : analysisnames) {
       //MSG_DEBUG("Adding analysis '" << aname << "'");
       addAnalysis(aname);
     }
     return *this;
   }
 
 
   AnalysisHandler& AnalysisHandler::removeAnalyses(const std::vector<std::string>& analysisnames) {
     for (const string& aname : analysisnames) {
       removeAnalysis(aname);
     }
     return *this;
   }
 
 
   bool AnalysisHandler::needCrossSection() const {
     bool rtn = false;
     for (const AnaHandle a : _analyses) {
       if (!rtn) rtn = a->needsCrossSection();
       if (rtn) break;
     }
     return rtn;
   }
 
 
   AnalysisHandler& AnalysisHandler::setCrossSection(double xs) {
     _xs = xs;
     return *this;
   }
 
 
   bool AnalysisHandler::hasCrossSection() const {
     return (!std::isnan(crossSection()));
   }
 
 
   AnalysisHandler& AnalysisHandler::addAnalysis(Analysis* analysis) {
     analysis->_analysishandler = this;
     _analyses.insert(AnaHandle(analysis));
     return *this;
   }
 
 
   PdgIdPair AnalysisHandler::beamIds() const {
     return Rivet::beamIds(beams());
   }
 
 
   double AnalysisHandler::sqrtS() const {
     return Rivet::sqrtS(beams());
   }
 
   void AnalysisHandler::setIgnoreBeams(bool ignore) {
     _ignoreBeams=ignore;
   }
 
 
 }
diff --git a/src/Core/Particle.cc b/src/Core/Particle.cc
--- a/src/Core/Particle.cc
+++ b/src/Core/Particle.cc
@@ -1,266 +1,263 @@
 #include "Rivet/Particle.hh"
 #include "Rivet/Tools/Cuts.hh"
 #include "Rivet/Tools/ParticleIdUtils.hh"
 
 namespace Rivet {
 
 
   Particle& Particle::transformBy(const LorentzTransform& lt) {
     _momentum = lt.transform(_momentum);
     return *this;
   }
 
 
   bool Particle::isVisible() const {
     // Charged particles are visible
     if ( PID::threeCharge(pid()) != 0 ) return true;
     // Neutral hadrons are visible
     if ( PID::isHadron(pid()) ) return true;
     // Photons are visible
     if ( pid() == PID::PHOTON ) return true;
     // Gluons are visible (for parton level analyses)
     if ( pid() == PID::GLUON ) return true;
     // Everything else is invisible
     return false;
   }
 
 
   bool Particle::isStable() const {
     return genParticle() != NULL &&
       genParticle()->status() == 1 &&
       genParticle()->end_vertex() == NULL;
   }
 
 
+  vector<Particle> Particle::ancestors(const Cut& c, bool physical_only) const {
+    vector<Particle> rtn;
+    /// @todo Remove this const mess crap when HepMC doesn't suck
+    GenVertexPtr gv = const_cast<GenVertexPtr>( genParticle()->production_vertex() );
+    if (gv == NULL) return rtn;
+    /// @todo Would like to do this, but the range objects are broken
+    // foreach (const GenParticlePtr gp, gv->particles(HepMC::children))
+    //   rtn += Particle(gp);
+    for (GenVertex::particle_iterator it = gv->particles_begin(HepMC::ancestors); it != gv->particles_end(HepMC::ancestors); ++it) {
+      if (physical_only && (*it)->status() != 1 && (*it)->status() != 2) continue;
+      const Particle p(*it);
+      if (c != Cuts::OPEN && !c->accept(p)) continue;
+      rtn += p;
+    }
+    return rtn;
+  }
+
+
   vector<Particle> Particle::parents(const Cut& c) const {
     vector<Particle> rtn;
     /// @todo Remove this const mess crap when HepMC doesn't suck
     GenVertexPtr gv = const_cast<GenVertexPtr>( genParticle()->production_vertex() );
     if (gv == NULL) return rtn;
     /// @todo Would like to do this, but the range objects are broken
     // foreach (const GenParticlePtr gp, gv->particles(HepMC::children))
     //   rtn += Particle(gp);
     for (GenVertex::particle_iterator it = gv->particles_begin(HepMC::parents); it != gv->particles_end(HepMC::parents); ++it) {
       const Particle p(*it);
       if (c != Cuts::OPEN && !c->accept(p)) continue;
       rtn += p;
     }
     return rtn;
   }
 
 
   vector<Particle> Particle::children(const Cut& c) const {
     vector<Particle> rtn;
     if (isStable()) return rtn;
     /// @todo Remove this const mess crap when HepMC doesn't suck
     GenVertexPtr gv = const_cast<GenVertexPtr>( genParticle()->end_vertex() );
     if (gv == NULL) return rtn;
     /// @todo Would like to do this, but the range objects are broken
     // foreach (const GenParticlePtr gp, gv->particles(HepMC::children))
     //   rtn += Particle(gp);
     for (GenVertex::particle_iterator it = gv->particles_begin(HepMC::children); it != gv->particles_end(HepMC::children); ++it) {
       const Particle p(*it);
       if (c != Cuts::OPEN && !c->accept(p)) continue;
       rtn += p;
     }
     return rtn;
   }
 
 
   /// @todo Insist that the current particle is post-hadronization, otherwise throw an exception?
   /// @todo Use recursion through replica-avoiding functions to avoid bookkeeping duplicates
   vector<Particle> Particle::allDescendants(const Cut& c, bool remove_duplicates) const {
     vector<Particle> rtn;
     if (isStable()) return rtn;
     /// @todo Remove this const mess crap when HepMC doesn't suck
     GenVertexPtr gv = const_cast<GenVertexPtr>( genParticle()->end_vertex() );
     if (gv == NULL) return rtn;
     /// @todo Would like to do this, but the range objects are broken
     // foreach (const GenParticlePtr gp, gv->particles(HepMC::descendants))
     for (GenVertex::particle_iterator it = gv->particles_begin(HepMC::descendants); it != gv->particles_end(HepMC::descendants); ++it) {
       const Particle p(*it);
       if (c != Cuts::OPEN && !c->accept(p)) continue;
       if (remove_duplicates && (*it)->end_vertex() != NULL) {
         // size_t n = 0; ///< @todo Only remove 1-to-1 duplicates?
         bool dup = false;
         /// @todo Yuck, HepMC
         for (GenVertex::particle_iterator it2 = (*it)->end_vertex()->particles_begin(HepMC::children); it2 != (*it)->end_vertex()->particles_end(HepMC::children); ++it2) {
           // n += 1; if (n > 1) break;
           if ((*it)->pdg_id() == (*it2)->pdg_id()) { dup = true; break; }
         }
         if (dup) continue;
       }
       rtn += p;
     }
     return rtn;
   }
 
 
   /// @todo Insist that the current particle is post-hadronization, otherwise throw an exception?
   vector<Particle> Particle::stableDescendants(const Cut& c) const {
     vector<Particle> rtn;
     if (isStable()) return rtn;
     /// @todo Remove this const mess crap when HepMC doesn't suck
     GenVertexPtr gv = const_cast<GenVertexPtr>( genParticle()->end_vertex() );
     if (gv == NULL) return rtn;
     /// @todo Would like to do this, but the range objects are broken
     // foreach (const GenParticlePtr gp, gv->particles(HepMC::descendants))
     for (GenVertex::particle_iterator it = gv->particles_begin(HepMC::descendants); it != gv->particles_end(HepMC::descendants); ++it) {
       // if ((*it)->status() != 1 || (*it)->end_vertex() != NULL) continue;
       const Particle p(*it);
       if (!p.isStable()) continue;
       if (c != Cuts::OPEN && !c->accept(p)) continue;
       rtn += p;
     }
     return rtn;
   }
 
 
   double Particle::flightLength() const {
     if (isStable()) return -1;
     if (genParticle() == NULL) return 0;
     if (genParticle()->production_vertex() == NULL) return 0;
     const HepMC::FourVector v1 = genParticle()->production_vertex()->position();
     const HepMC::FourVector v2 = genParticle()->end_vertex()->position();
     return sqrt(sqr(v2.x()-v1.x()) + sqr(v2.y()-v1.y()) + sqr(v2.z()-v1.z()));
   }
 
 
   bool Particle::hasParent(PdgId pid) const {
-    return _hasRelativeWith(HepMC::parents, hasPID(pid));
+    return hasParentWith(hasPID(pid));
   }
 
   bool Particle::hasParentWith(const Cut& c) const {
     return hasParentWith([&](const Particle& p){return c->accept(p);});
   }
 
 
-  bool Particle::hasAncestor(PdgId pid) const {
-    return _hasRelativeWith(HepMC::ancestors, hasPID(pid));
+  bool Particle::hasAncestor(PdgId pid, bool only_physical) const {
+    return hasAncestorWith(hasPID(pid), only_physical);
   }
 
-  bool Particle::hasAncestorWith(const Cut& c) const {
-    return hasAncestorWith([&](const Particle& p){return c->accept(p);});
+  bool Particle::hasAncestorWith(const Cut& c, bool only_physical) const {
+    return hasAncestorWith([&](const Particle& p){return c->accept(p);}, only_physical);
   }
 
 
+  bool Particle::hasChildWith(const Cut& c) const {
+    return hasChildWith([&](const Particle& p){return c->accept(p);});
+  }
+
+
+  bool Particle::hasDescendantWith(const Cut& c, bool remove_duplicates) const {
+    return hasDescendantWith([&](const Particle& p){return c->accept(p);}, remove_duplicates);
+  }
+
+  bool Particle::hasStableDescendantWith(const Cut& c) const {
+    return hasStableDescendantWith([&](const Particle& p){return c->accept(p);});
+  }
+
+
+
   bool Particle::fromBottom() const {
-    return _hasRelativeWith(HepMC::ancestors, [](const Particle& p){
+    return hasAncestorWith([](const Particle& p){
         return p.genParticle()->status() == 2 && p.isHadron() && p.hasBottom();
       });
-    // const GenVertexPtr prodVtx = genParticle()->production_vertex();
-    // if (prodVtx == NULL) return false;
-    // foreach (const GenParticlePtr ancestor, particles(prodVtx, HepMC::ancestors)) {
-    //   const PdgId pid = ancestor->pdg_id();
-    //   if (ancestor->status() == 2 && (PID::isHadron(pid) && PID::hasBottom(pid))) return true;
-    // }
-    // return false;
   }
 
-
   bool Particle::fromCharm() const {
-    return _hasRelativeWith(HepMC::ancestors, [](const Particle& p){
+    return hasAncestorWith([](const Particle& p){
         return p.genParticle()->status() == 2 && p.isHadron() && p.hasCharm();
       });
-    // const GenVertexPtr prodVtx = genParticle()->production_vertex();
-    // if (prodVtx == NULL) return false;
-    // foreach (const GenParticlePtr ancestor, particles(prodVtx, HepMC::ancestors)) {
-    //   const PdgId pid = ancestor->pdg_id();
-    //   if (ancestor->status() == 2 && (PID::isHadron(pid) && PID::hasCharm(pid) && !PID::hasBottom(pid))) return true;
-    // }
-    // return false;
   }
 
-
   bool Particle::fromHadron() const {
-    return _hasRelativeWith(HepMC::ancestors, [](const Particle& p){
+    return hasAncestorWith([](const Particle& p){
         return p.genParticle()->status() == 2 && p.isHadron();
       });
-    // const GenVertexPtr prodVtx = genParticle()->production_vertex();
-    // if (prodVtx == NULL) return false;
-    // foreach (const GenParticlePtr ancestor, particles(prodVtx, HepMC::ancestors)) {
-    //   const PdgId pid = ancestor->pdg_id();
-    //   if (ancestor->status() == 2 && PID::isHadron(pid)) return true;
-    // }
-    // return false;
   }
 
-
   bool Particle::fromTau(bool prompt_taus_only) const {
     if (prompt_taus_only && fromHadron()) return false;
-    return _hasRelativeWith(HepMC::ancestors, [](const Particle& p){
+    return hasAncestorWith([](const Particle& p){
         return p.genParticle()->status() == 2 && isTau(p);
       });
-    // const GenVertexPtr prodVtx = genParticle()->production_vertex();
-    // if (prodVtx == NULL) return false;
-    // foreach (const GenParticlePtr ancestor, particles(prodVtx, HepMC::ancestors)) {
-    //   const PdgId pid = ancestor->pdg_id();
-    //   if (ancestor->status() == 2 && abs(pid) == PID::TAU) return true;
-    // }
-    // return false;
   }
 
+  bool Particle::fromHadronicTau(bool prompt_taus_only) const {
+    return hasAncestorWith([&](const Particle& p){
+        return p.genParticle()->status() == 2 && isTau(p) && (!prompt_taus_only || p.isPrompt()) && hasHadronicDecay(p);
+      });
+  }
 
-  // bool Particle::fromDecay() const {
-  //   const GenVertexPtr prodVtx = genParticle()->production_vertex();
-  //   if (prodVtx == NULL) return false;
-  //   foreach (const GenParticlePtr ancestor, particles(prodVtx, HepMC::ancestors)) {
-  //     const PdgId pid = ancestor->pdg_id();
-  //     if (ancestor->status() == 2 && (PID::isHadron(pid) || abs(pid) == PID::TAU)) return true;
-  //   }
-  //   return false;
-  // }
 
-
-  bool Particle::isPrompt(bool allow_from_prompt_tau, bool allow_from_prompt_mu) const {
+  bool Particle::isDirect(bool allow_from_direct_tau, bool allow_from_direct_mu) const {
     if (genParticle() == NULL) return false; // no HepMC connection, give up! Throw UserError exception?
     const GenVertexPtr prodVtx = genParticle()->production_vertex();
     if (prodVtx == NULL) return false; // orphaned particle, has to be assume false
     const pair<GenParticlePtr, GenParticlePtr> beams = prodVtx->parent_event()->beam_particles();
 
     /// @todo Would be nicer to be able to write this recursively up the chain, exiting as soon as a parton or string/cluster is seen
     for (const GenParticlePtr ancestor : Rivet::particles(prodVtx, HepMC::ancestors)) {
       const PdgId pid = ancestor->pdg_id();
       if (ancestor->status() != 2) continue; // no non-standard statuses or beams to be used in decision making
       if (ancestor == beams.first || ancestor == beams.second) continue; // PYTHIA6 uses status 2 for beams, I think... (sigh)
       if (PID::isParton(pid)) continue; // PYTHIA6 also uses status 2 for some partons, I think... (sigh)
-      if (PID::isHadron(pid)) return false; // prompt particles can't be from hadron decays
-      if (abs(pid) == PID::TAU && abspid() != PID::TAU && !allow_from_prompt_tau) return false; // allow or ban particles from tau decays (permitting tau copies)
-      if (abs(pid) == PID::MUON && abspid() != PID::MUON && !allow_from_prompt_mu) return false; // allow or ban particles from muon decays (permitting muon copies)
+      if (PID::isHadron(pid)) return false; // direct particles can't be from hadron decays
+      if (abs(pid) == PID::TAU && abspid() != PID::TAU && !allow_from_direct_tau) return false; // allow or ban particles from tau decays (permitting tau copies)
+      if (abs(pid) == PID::MUON && abspid() != PID::MUON && !allow_from_direct_mu) return false; // allow or ban particles from muon decays (permitting muon copies)
     }
     return true;
   }
 
 
 
   ///////////////////////
 
 
 
   string to_str(const Particle& p) {
     string pname;
     try {
       pname = PID::toParticleName(p.pid());
     } catch (...) {
       pname = "PID=" + to_str(p.pid());
     }
     stringstream out;
     out << pname << " @ " << p.momentum() << " GeV";
     return out.str();
   }
 
 
   string to_str(const ParticlePair& pair) {
     stringstream out;
     out << "[" << pair.first << ", " << pair.second << "]";
     // out << "["
     //     << PID::toParticleName(pair.first.pid()) << " @ "
     //     << pair.first.momentum().E()/GeV << " GeV, "
     //     << PID::toParticleName(pair.second.pid()) << " @ "
     //     << pair.second.momentum().E()/GeV << " GeV]";
     return out.str();
   }
 
 
 
 }
diff --git a/src/Makefile.am b/src/Makefile.am
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,9 +1,16 @@
-SUBDIRS = Core Tools Projections
-SUBDIRS += Analyses
-ANA_LIBADD = Analyses/libRivetAnalysisTools.la
+SUBDIRS = Core Tools Projections AnalysisTools
 
 lib_LTLIBRARIES = libRivet.la
+
 libRivet_la_SOURCES =
+
 libRivet_la_LDFLAGS = -export-dynamic -avoid-version -L$(YODALIBPATH) -L$(HEPMCLIBPATH)
-libRivet_la_LIBADD = Core/libRivetCore.la Projections/libRivetProjections.la Tools/libRivetTools.la $(ANA_LIBADD) \
-  -lYODA -lHepMC -ldl -lm  $(FASTJETCONFIGLIBADD) $(GSL_LDFLAGS)
+
+libRivet_la_LIBADD = \
+Core/libRivetCore.la \
+Projections/libRivetProjections.la \
+Tools/libRivetTools.la \
+AnalysisTools/libRivetAnalysisTools.la \
+-lYODA -lHepMC -ldl -lm  \
+$(FASTJETCONFIGLIBADD) \
+$(GSL_LDFLAGS)
diff --git a/src/Projections/Beam.cc b/src/Projections/Beam.cc
--- a/src/Projections/Beam.cc
+++ b/src/Projections/Beam.cc
@@ -1,130 +1,143 @@
 // -*- C++ -*-
 #include "Rivet/Config/RivetCommon.hh"
 #include "Rivet/Tools/Logging.hh"
 #include "Rivet/Projections/Beam.hh"
 
 namespace Rivet {
 
 
   ParticlePair beams(const Event& e) {
     assert(e.genEvent()->particles_size() >= 2);
+
+    // First try the official way: ask the GenEvent for the beam pointers
     if (e.genEvent()->valid_beam_particles()) {
       pair<HepMC::GenParticle*, HepMC::GenParticle*> beams = e.genEvent()->beam_particles();
       assert(beams.first && beams.second);
       return ParticlePair{beams.first, beams.second};
-    } else if (e.genEvent()->barcode_to_particle(1) && e.genEvent()->barcode_to_particle(2)) {
+    }
+
+    // Ok, that failed: let's find the status = 4 particles by hand
+    const vector<Particle> pstat4s = e.allParticles([](const Particle& p){ return p.genParticle()->status() == 4; });
+    if (pstat4s.size() >= 2) {
+      return ParticlePair{pstat4s[0], pstat4s[1]};
+    }
+
+    // Hmm, this sucks. Last guess is that barcodes 1 and 2 are the beams
+    if (e.genEvent()->barcode_to_particle(1) && e.genEvent()->barcode_to_particle(2)) {
       return ParticlePair{e.genEvent()->barcode_to_particle(1), e.genEvent()->barcode_to_particle(2)};
     }
-    return ParticlePair{Particle(PID::ANY, FourMomentum()), Particle(PID::ANY, FourMomentum())};
+
+    // Give up: return null beams
+    return ParticlePair{Particle(), Particle()};
   }
 
 
   double sqrtS(const FourMomentum& pa, const FourMomentum& pb) {
     const double mom1 = pa.pz();
     const double e1 = pa.E();
     const double mom2 = pb.pz();
     const double e2 = pb.E();
     double sqrts = sqrt( sqr(e1+e2) - sqr(mom1+mom2) );
     return sqrts;
   }
 
 
   double asqrtS(const FourMomentum& pa, const FourMomentum& pb) {
     const static double MNUCLEON = 939*MeV; //< nominal nucleon mass
     return sqrtS(pa/(pa.mass()/MNUCLEON), pb/(pb.mass()/MNUCLEON));
   }
 
   double asqrtS(const ParticlePair& beams) {
     return sqrtS(beams.first.mom()/nuclA(beams.first), beams.second.mom()/nuclA(beams.second));
   }
 
 
   FourMomentum acmsBoostVec(const FourMomentum& pa, const FourMomentum& pb) {
     const static double MNUCLEON = 939*MeV; //< nominal nucleon mass
     const double na = pa.mass()/MNUCLEON, nb = pb.mass()/MNUCLEON;
     return cmsBoostVec(pa/na, pb/nb);
   }
 
   FourMomentum acmsBoostVec(const ParticlePair& beams) {
     return cmsBoostVec(beams.first.mom()/nuclA(beams.first), beams.second.mom()/nuclA(beams.second));
   }
 
 
   Vector3 cmsBetaVec(const FourMomentum& pa, const FourMomentum& pb) {
     // const Vector3 rtn = (pa.p3() + pb.p3()) / (pa.E() + pb.E());
     const Vector3 rtn = (pa + pb).betaVec();
     return rtn;
   }
 
   Vector3 acmsBetaVec(const FourMomentum& pa, const FourMomentum& pb) {
     const static double MNUCLEON = 939*MeV; //< nominal nucleon mass
     const Vector3 rtn = cmsBetaVec(pa/(pa.mass()/MNUCLEON), pb/(pb.mass()/MNUCLEON));
     return rtn;
   }
 
   Vector3 acmsBetaVec(const ParticlePair& beams) {
     const Vector3 rtn = cmsBetaVec(beams.first.mom()/nuclA(beams.first), beams.second.mom()/nuclA(beams.second));
     return rtn;
   }
 
 
   Vector3 cmsGammaVec(const FourMomentum& pa, const FourMomentum& pb) {
     // const Vector3 rtn = (pa + pb).gammaVec();
     const double gamma = (pa.E() + pb.E()) / sqrt( sqr(pa.mass()) + sqr(pb.mass()) + 2*(pa.E()*pb.E() - dot(pa.p3(), pb.p3())) );
     const Vector3 rtn = gamma * (pa.p3() + pb.p3()).unit();
     return rtn;
   }
 
   Vector3 acmsGammaVec(const FourMomentum& pa, const FourMomentum& pb) {
     const static double MNUCLEON = 939*MeV; //< nominal nucleon mass
     Vector3 rtn = cmsGammaVec(pa/(pa.mass()/MNUCLEON), pb/(pb.mass()/MNUCLEON));
     return rtn;
   }
 
   Vector3 acmsGammaVec(const ParticlePair& beams) {
     Vector3 rtn = cmsGammaVec(beams.first.mom()/nuclA(beams.first), beams.second.mom()/nuclA(beams.second));
     return rtn;
   }
 
 
   LorentzTransform cmsTransform(const FourMomentum& pa, const FourMomentum& pb) {
     /// @todo Automatically choose to construct from beta or gamma according to which is more precise?
     return LorentzTransform::mkFrameTransformFromGamma(cmsGammaVec(pa, pb));
   }
 
   LorentzTransform acmsTransform(const FourMomentum& pa, const FourMomentum& pb) {
     /// @todo Automatically choose to construct from beta or gamma according to which is more precise?
     return LorentzTransform::mkFrameTransformFromGamma(acmsGammaVec(pa, pb));
   }
 
   LorentzTransform acmsTransform(const ParticlePair& beams) {
     return LorentzTransform::mkFrameTransformFromGamma(acmsGammaVec(beams));
   }
 
 
 
   /////////////////////////////////////////////
 
 
 
   void Beam::project(const Event& e) {
     _theBeams = Rivet::beams(e);
     MSG_DEBUG("Beam particles = " << _theBeams << " => sqrt(s) = " << sqrtS()/GeV << " GeV");
   }
 
 
   FourVector Beam::pv() const {
     HepMC::FourVector v1, v2;
     const ParticlePair bpair = beams();
     if (bpair.first.genParticle() && bpair.first.genParticle()->end_vertex())
       v1 = bpair.first.genParticle()->end_vertex()->position();
     if (bpair.second.genParticle() && bpair.second.genParticle()->end_vertex())
       v2 = bpair.second.genParticle()->end_vertex()->position();
     const FourVector rtn = (v1 == v2) ? FourVector(v1.t(), v1.x(), v1.y(), v1.z()) : FourVector();
     MSG_DEBUG("Beam PV 4-position = " << rtn);
     return rtn;
   }
 
 
 
 }
diff --git a/src/Projections/DISFinalState.cc b/src/Projections/DISFinalState.cc
--- a/src/Projections/DISFinalState.cc
+++ b/src/Projections/DISFinalState.cc
@@ -1,28 +1,33 @@
 // -*- C++ -*-
 #include "Rivet/Projections/DISFinalState.hh"
 
 namespace Rivet {
 
 
   void DISFinalState::project(const Event& e) {
-    const DISKinematics& diskin = applyProjection<DISKinematics>(e, "Kinematics");
-    const LorentzTransform hcmboost = (_boosttype == HCM) ? diskin.boostHCM() : diskin.boostBreit();
-    const DISLepton& dislep = diskin.applyProjection<DISLepton>(e, "Lepton");
-    const FinalState& fs = dislep.applyProjection<FinalState>(e, "FS");
+    const DISKinematics& diskin = apply<DISKinematics>(e, "Kinematics");
+    LorentzTransform hcmboost; //< Null boost = LAB frame by default
+    if (_boosttype == HCM) hcmboost = diskin.boostHCM();
+    else if (_boosttype == BREIT) hcmboost = diskin.boostBreit();
+
+    const DISLepton& dislep = diskin.apply<DISLepton>(e, "Lepton");
+
+    const FinalState& fs = apply<FinalState>(e, "FS");
 
     // Fill the particle list with all particles _other_ than the DIS scattered
     // lepton, with momenta boosted into the appropriate frame.
     _theParticles.clear();
     _theParticles.reserve(fs.particles().size()-1);
     const GenParticle* dislepGP = dislep.out().genParticle();
-    foreach (const Particle& p, fs.particles()) {
-      if (p.genParticle() != dislepGP) { ///< Ensure that we skip the DIS lepton
-        Particle temp(p);
-        temp.setMomentum(hcmboost.transform(temp.momentum()));
-        _theParticles.push_back(temp);
-      }
+    // const GenParticle* dislepIN = dislep.in().genParticle();
+
+    for (const Particle& p : fs.particles()) { ///< Ensure that we skip the DIS lepton
+      Particle temp = p;
+      if (_boosttype != LAB) temp.setMomentum(hcmboost.transform(temp.momentum()));
+      if (p.genParticle() != dislepGP)  _theParticles.push_back(temp);
     }
+
   }
 
 
 }
diff --git a/src/Projections/DISLepton.cc b/src/Projections/DISLepton.cc
--- a/src/Projections/DISLepton.cc
+++ b/src/Projections/DISLepton.cc
@@ -1,50 +1,59 @@
 // -*- C++ -*-
 #include "Rivet/Projections/DISLepton.hh"
 
 namespace Rivet {
 
 
   int DISLepton::compare(const Projection& p) const {
     const DISLepton& other = pcast<DISLepton>(p);
     return mkNamedPCmp(other, "Beam") || mkNamedPCmp(other, "FS");
   }
 
 
   void DISLepton::project(const Event& e) {
     const ParticlePair& inc = applyProjection<Beam>(e, "Beam").beams();
 
-    Particle inLepton;
-
     bool firstIsLepton = PID::isLepton(inc.first.pid());
     bool secondIsLepton = PID::isLepton(inc.second.pid());
 
     if (firstIsLepton && !secondIsLepton) {
       _incoming = inc.first;
     } else if (!firstIsLepton && secondIsLepton) {
       _incoming = inc.second;
     } else {
       //eek!
-      throw	Error("DISLepton projector could not find the correct beam.");
+      throw Error("DISLepton projector could not find the correct beam.");
     }
-
-    _sign = (_incoming.momentum().pz() > 0.0)? 1.0: -1.0;
-    long id = _incoming.pid();
-
-    double pzMax = -1000000000.0;
-
-    const FinalState& fs = applyProjection<FinalState>(e, "FS");
-    foreach (const Particle& p, fs.particles()) {
-      double pz = _sign * p.momentum().pz();
-      if (p.pid() == id && pz > pzMax) {
-        _outgoing = p;
-        pzMax = pz;
+    const GenParticle* current_l=_incoming.genParticle();
+    bool found_next_vertex = true;
+    while (found_next_vertex) {
+        found_next_vertex = false;
+        if (!current_l->end_vertex()) break;
+        std::vector<const GenParticle*> out_n;
+        std::vector<const GenParticle*> out_c;
+        for (const GenParticle* pp : particles_out(current_l, HepMC::children)) {
+            if (current_l->pdg_id() == pp->pdg_id()) out_n.push_back(pp);
+            //+-1 should allow neutrino to electron and electron to neutrino
+            if (std::abs(std::abs(current_l->pdg_id()) - std::abs(pp->pdg_id())) == 1) out_c.push_back(pp);
+          }
+        if (out_n.empty() && out_c.empty()) {
+          MSG_WARNING("DISLepton projector: no electron/lepton in the new vertex.");
+          break;
+        }
+        if (out_c.size() + out_n.size() > 1) {
+          MSG_WARNING("DISLepton projector: more than one electron/lepton in the new vertex.");
+          break;
+        }
+        if (out_c.size() == 1) current_l = out_c.front();
+        if (out_n.size() == 1) current_l = out_n.front();
+        found_next_vertex = true;
       }
-    }
-
-    if (_outgoing.genParticle() == NULL) {
+    if (current_l == NULL)
       throw Error("DISLepton projector could not find the scattered lepton.");
-    }
+    _outgoing = Particle(current_l);
+    if (_outgoing.charge() == _incoming.charge()) _charged=0;
+    else _charged = 0; // We consider only electric charge
   }
 
 
 }
diff --git a/src/Projections/DressedLeptons.cc b/src/Projections/DressedLeptons.cc
--- a/src/Projections/DressedLeptons.cc
+++ b/src/Projections/DressedLeptons.cc
@@ -1,89 +1,99 @@
 // -*- C++ -*-
 #include "Rivet/Projections/DressedLeptons.hh"
 
 namespace Rivet {
 
 
+  // Separate-FS version
   DressedLeptons::DressedLeptons(const FinalState& photons, const FinalState& bareleptons,
                                  double dRmax, const Cut& cut, bool cluster, bool useDecayPhotons)
     : FinalState(cut),
       _dRmax(dRmax), _cluster(cluster), _fromDecay(useDecayPhotons)
   {
     setName("DressedLeptons");
 
     IdentifiedFinalState photonfs(photons, PID::PHOTON);
     addProjection(photonfs, "Photons");
 
     IdentifiedFinalState leptonfs(bareleptons);
     leptonfs.acceptIdPairs({PID::ELECTRON, PID::MUON, PID::TAU});
     addProjection(leptonfs, "Leptons");
   }
 
 
+  // Single-FS version
+  DressedLeptons::DressedLeptons(const FinalState& barefs,
+                                 double dRmax, const Cut& cut, bool cluster, bool useDecayPhotons)
+    : DressedLeptons(barefs, barefs, dRmax, cut, cluster, useDecayPhotons)
+  {     }
+
+
+
+
   int DressedLeptons::compare(const Projection& p) const {
     // Compare the two as final states (for pT and eta cuts)
     const DressedLeptons& other = dynamic_cast<const DressedLeptons&>(p);
     int fscmp = FinalState::compare(other);
     if (fscmp != EQUIVALENT) return fscmp;
 
     const PCmp phcmp = mkNamedPCmp(p, "Photons");
     if (phcmp != EQUIVALENT) return phcmp;
 
     const PCmp sigcmp = mkNamedPCmp(p, "Leptons");
     if (sigcmp != EQUIVALENT) return sigcmp;
 
     return (cmp(_dRmax, other._dRmax) ||
             cmp(_cluster, other._cluster) ||
             cmp(_fromDecay, other._fromDecay));
   }
 
 
   void DressedLeptons::project(const Event& e) {
     _theParticles.clear();
     _clusteredLeptons.clear();
 
     const FinalState& signal = applyProjection<FinalState>(e, "Leptons");
     Particles bareleptons = signal.particles();
     if (bareleptons.empty()) return;
 
     vector<DressedLepton> allClusteredLeptons;
     for (size_t i = 0; i < bareleptons.size(); ++i) {
       allClusteredLeptons.push_back(DressedLepton(bareleptons[i]));
     }
 
     // Match each photon to its closest charged lepton within the dR cone
     const FinalState& photons = applyProjection<FinalState>(e, "Photons");
     for (const Particle& photon : photons.particles()) {
       // Ignore photon if it's from a hadron/tau decay and we're avoiding those
       if (!_fromDecay && photon.fromDecay()) continue;
       const FourMomentum& p_P = photon.momentum();
       double dRmin = _dRmax;
       int idx = -1;
       for (size_t i = 0; i < bareleptons.size(); ++i) {
         // Only cluster photons around *charged* signal particles
         if (bareleptons[i].charge3() == 0) continue;
         // Find the closest lepton
         const FourMomentum& p_l = bareleptons[i].momentum();
         double dR = deltaR(p_l, p_P);
         if (dR < dRmin) {
           dRmin = dR;
           idx = i;
         }
       }
       if (idx > -1) {
         if (_cluster) allClusteredLeptons[idx].addPhoton(photon, _cluster);
       }
     }
 
     for (const DressedLepton& lepton : allClusteredLeptons) {
       if (accept(lepton)) {
         _clusteredLeptons.push_back(lepton);
         _theParticles.push_back(lepton.constituentLepton());
         _theParticles += lepton.constituentPhotons();
       }
     }
 
   }
 
 
 }
diff --git a/src/Projections/FastJets.cc b/src/Projections/FastJets.cc
--- a/src/Projections/FastJets.cc
+++ b/src/Projections/FastJets.cc
@@ -1,231 +1,214 @@
 // -*- C++ -*-
 #include "Rivet/Config/RivetCommon.hh"
 #include "Rivet/Tools/Logging.hh"
 #include "Rivet/Projections/FastJets.hh"
 #include "Rivet/Projections/HeavyHadrons.hh"
 #include "Rivet/Projections/TauFinder.hh"
 
 namespace Rivet {
 
 
   void FastJets::_initBase() {
     setName("FastJets");
     addProjection(HeavyHadrons(), "HFHadrons");
     addProjection(TauFinder(TauFinder::HADRONIC), "Taus");
   }
 
 
-  // void FastJets::_init1(JetAlgName alg, double rparameter, double seed_threshold) {
-  //   _initBase();
-
-
   void FastJets::_initJdef(JetAlgName alg, double rparameter, double seed_threshold) {
     MSG_DEBUG("JetAlg = " << alg);
     MSG_DEBUG("R parameter = " << rparameter);
     MSG_DEBUG("Seed threshold = " << seed_threshold);
     if (alg == KT) {
       _jdef = fastjet::JetDefinition(fastjet::kt_algorithm, rparameter, fastjet::E_scheme);
     } else if (alg == CAM) {
       _jdef = fastjet::JetDefinition(fastjet::cambridge_algorithm, rparameter, fastjet::E_scheme);
     } else if (alg == ANTIKT) {
       _jdef = fastjet::JetDefinition(fastjet::antikt_algorithm, rparameter, fastjet::E_scheme);
     } else if (alg == DURHAM) {
       _jdef = fastjet::JetDefinition(fastjet::ee_kt_algorithm, fastjet::E_scheme);
     } else if (alg == GENKTEE) {
-      _jdef = fastjet::JetDefinition(fastjet::ee_genkt_algorithm, rparameter, 1.);
+      _jdef = fastjet::JetDefinition(fastjet::ee_genkt_algorithm, rparameter, -1);
     } else {
       // Plugins:
       if (alg == SISCONE) {
         const double OVERLAP_THRESHOLD = 0.75;
         _plugin.reset(new fastjet::SISConePlugin(rparameter, OVERLAP_THRESHOLD));
       // } else if (alg == PXCONE) {
       //   string msg = "PxCone currently not supported, since FastJet doesn't install it by default. ";
       //   msg += "Please notify the Rivet authors if this behaviour should be changed.";
       //   throw Error(msg);
       //  _plugin.reset(new fastjet::PxConePlugin(rparameter));
       } else if (alg == ATLASCONE) {
         const double OVERLAP_THRESHOLD = 0.5;
         _plugin.reset(new fastjet::ATLASConePlugin(rparameter, seed_threshold, OVERLAP_THRESHOLD));
       } else if (alg == CMSCONE) {
         _plugin.reset(new fastjet::CMSIterativeConePlugin(rparameter, seed_threshold));
       } else if (alg == CDFJETCLU) {
         const double OVERLAP_THRESHOLD = 0.75;
         _plugin.reset(new fastjet::CDFJetCluPlugin(rparameter, OVERLAP_THRESHOLD, seed_threshold));
       } else if (alg == CDFMIDPOINT) {
         const double OVERLAP_THRESHOLD = 0.5;
         _plugin.reset(new fastjet::CDFMidPointPlugin(rparameter, OVERLAP_THRESHOLD, seed_threshold));
       } else if (alg == D0ILCONE) {
         const double min_jet_Et = 6.0;
         _plugin.reset(new fastjet::D0RunIIConePlugin(rparameter, min_jet_Et));
       } else if (alg == JADE) {
         _plugin.reset(new fastjet::JadePlugin());
       } else if (alg == TRACKJET) {
         _plugin.reset(new fastjet::TrackJetPlugin(rparameter));
       }
       _jdef = fastjet::JetDefinition(_plugin.get());
     }
   }
 
 
-  // void FastJets::_init2(fastjet::JetAlgorithm type,
-  //                       fastjet::RecombinationScheme recom, double rparameter)
-  //   : FastJets
-  // {
-
-  //   _initBase();
-  //   _jdef = fastjet::JetDefinition(type, rparameter, recom);
-  // }
-
-
-  // void FastJets::_init3(const fastjet::JetDefinition& jdef) {
-  //   _initBase();
-  //   _jdef = jdef;
-  // }
-
-
-  // void FastJets::_init4(fastjet::JetDefinition::Plugin* plugin) {
-  //   _initBase();
-  //   _plugin.reset(plugin);
-  //   _jdef = fastjet::JetDefinition(_plugin.get());
-  // }
-
-
-
   int FastJets::compare(const Projection& p) const {
     const FastJets& other = dynamic_cast<const FastJets&>(p);
     return \
       cmp(_useMuons, other._useMuons) ||
       cmp(_useInvisibles, other._useInvisibles) ||
       mkNamedPCmp(other, "FS") ||
       cmp(_jdef.jet_algorithm(), other._jdef.jet_algorithm()) ||
       cmp(_jdef.recombination_scheme(), other._jdef.recombination_scheme()) ||
       cmp(_jdef.plugin(), other._jdef.plugin()) ||
       cmp(_jdef.R(), other._jdef.R()) ||
       cmp(_adef, other._adef);
   }
 
 
-  namespace {
-    /// @todo Replace with C++11 lambdas
-    bool isPromptInvisible(const Particle& p) { return !(p.isVisible() || p.fromDecay()); }
-    // bool isMuon(const Particle& p) { return p.abspid() == PID::MUON; }
-    bool isPromptMuon(const Particle& p) { return isMuon(p) && !p.fromDecay(); }
+  // STATIC
+  PseudoJets FastJets::mkClusterInputs(const Particles& fsparticles, const Particles& tagparticles) {
+    vector<fastjet::PseudoJet> pjs;
+    /// @todo Use FastJet3's UserInfo system to store Particle pointers directly?
+
+    // Store 4 vector data about each particle into FastJet's PseudoJets
+    for (size_t i = 0; i < fsparticles.size(); ++i) {
+      fastjet::PseudoJet pj = fsparticles[i];
+      pj.set_user_index(i+1);
+      pjs.push_back(pj);
+    }
+    // And the same for ghost tagging particles (with negative user indices)
+    for (size_t i = 0; i < tagparticles.size(); ++i) {
+      fastjet::PseudoJet pj = tagparticles[i];
+      pj *= 1e-20; ///< Ghostify the momentum
+      pj.set_user_index(-i-1);
+      pjs.push_back(pj);
+    }
+
+    return pjs;
+  }
+
+
+  // STATIC
+  Jet FastJets::mkJet(const PseudoJet& pj, const Particles& fsparticles, const Particles& tagparticles) {
+    const PseudoJets pjconstituents = pj.constituents();
+
+    vector<Particle> constituents, tags;
+    constituents.reserve(pjconstituents.size());
+
+    for (const fastjet::PseudoJet& pjc : pjconstituents) {
+      // Pure ghosts don't have corresponding particles
+      if (pjc.has_area() && pjc.is_pure_ghost()) continue;
+      // Default user index = 0 doesn't give valid particle lookup
+      if (pjc.user_index() == 0) continue;
+      // Split by index sign into constituent & tag lookup
+      if (pjc.user_index() > 0) {
+        // Find constituents if index > 0
+        const size_t i = pjc.user_index() - 1;
+        if (i >= fsparticles.size()) throw RangeError("FS particle lookup failed in jet construction");
+        constituents.push_back(fsparticles.at(i));
+      } else if (!tagparticles.empty()) {
+        // Find tags if index < 0
+        const size_t i = abs(pjc.user_index()) - 1;
+        if (i >= tagparticles.size()) throw RangeError("Tag particle lookup failed in jet construction");
+        tags.push_back(tagparticles.at(i));
+      }
+    }
+
+    return Jet(pj, constituents, tags);
+  }
+
+
+  // STATIC
+  Jets FastJets::mkJets(const PseudoJets& pjs, const Particles& fsparticles, const Particles& tagparticles) {
+    Jets rtn; rtn.reserve(pjs.size());
+    for (const PseudoJet pj : pjs) {
+      rtn.push_back(FastJets::mkJet(pj, fsparticles, tagparticles));
+    }
+    return rtn;
   }
 
 
   void FastJets::project(const Event& e) {
     // Assemble final state particles
     const string fskey = (_useInvisibles == JetAlg::NO_INVISIBLES) ? "VFS" : "FS";
     Particles fsparticles = applyProjection<FinalState>(e, fskey).particles();
     // Remove prompt invisibles if needed (already done by VFS if using NO_INVISIBLES)
-    if (_useInvisibles == JetAlg::DECAY_INVISIBLES)
-      fsparticles.erase( std::remove_if(fsparticles.begin(), fsparticles.end(), isPromptInvisible), fsparticles.end() );
+    if (_useInvisibles == JetAlg::DECAY_INVISIBLES) {
+      ifilter_discard(fsparticles, [](const Particle& p) { return !(p.isVisible() || p.fromDecay()); });
+    }
     // Remove prompt/all muons if needed
-    if (_useMuons == JetAlg::DECAY_MUONS)
-      fsparticles.erase( std::remove_if(fsparticles.begin(), fsparticles.end(), isPromptMuon), fsparticles.end() );
-    else if (_useMuons == JetAlg::NO_MUONS)
-      fsparticles.erase( std::remove_if(fsparticles.begin(), fsparticles.end(), isMuon), fsparticles.end() );
+    if (_useMuons == JetAlg::DECAY_MUONS) {
+      ifilter_discard(fsparticles, [](const Particle& p) { return isMuon(p) && !p.fromDecay(); });
+    } else if (_useMuons == JetAlg::NO_MUONS) {
+      ifilter_discard(fsparticles, isMuon);
+    }
 
     // Tagging particles
-    /// @todo Allow the user to specify tag particle kinematic thresholds
     const Particles chadrons = applyProjection<HeavyHadrons>(e, "HFHadrons").cHadrons();
     const Particles bhadrons = applyProjection<HeavyHadrons>(e, "HFHadrons").bHadrons();
     const Particles taus = applyProjection<FinalState>(e, "Taus").particles();
     calc(fsparticles, chadrons+bhadrons+taus);
   }
 
 
   void FastJets::calc(const Particles& fsparticles, const Particles& tagparticles) {
-    _particles.clear();
-    vector<fastjet::PseudoJet> pjs;
+    MSG_DEBUG("Finding jets from " << fsparticles.size() << " input particles + " << tagparticles.size() << " tagging particles");
+    _fsparticles = fsparticles;
+    _tagparticles = tagparticles;
 
-    MSG_DEBUG("Finding jets from " << fsparticles.size() << " input particles");
+    // Make pseudojets, with mapping info to Rivet FS and tag particles
+    PseudoJets pjs = mkClusterInputs(_fsparticles, _tagparticles);
 
-    /// @todo Use FastJet3's UserInfo system
-
-    // Store 4 vector data about each particle into FastJet's PseudoJets
-    int counter = 1;
-    for (const Particle& p : fsparticles) {
-      fastjet::PseudoJet pj = p;
-      pj.set_user_index(counter);
-      pjs.push_back(pj);
-      _particles[counter] = p;
-      counter += 1;
-    }
-    // And the same for ghost tagging particles (with negative user indices)
-    counter = 1;
-    for (const Particle& p : tagparticles) {
-      fastjet::PseudoJet pj = p;
-      pj *= 1e-20; ///< Ghostify the momentum
-      pj.set_user_index(-counter);
-      pjs.push_back(pj);
-      _particles[-counter] = p;
-      counter += 1;
-    }
-
-    // Choose cseq as basic or area-calculating
+    // Run either basic or area-calculating cluster sequence as reqd.
     if (_adef) {
       _cseq.reset(new fastjet::ClusterSequenceArea(pjs, _jdef, *_adef));
     } else {
       _cseq.reset(new fastjet::ClusterSequence(pjs, _jdef));
     }
-    MSG_DEBUG("FastJet ClusterSequence constructed; Njets_tot = "
-              << _cseq->inclusive_jets().size() << ", Njets_10 = "
-              << _cseq->inclusive_jets(10*GeV).size()); //< only inefficient in debug mode
+
+    MSG_DEBUG("ClusterSequence constructed; Njets_tot = "
+              << _cseq->inclusive_jets().size() << ", Njets(pT > 10 GeV) = "
+              << _cseq->inclusive_jets(10*GeV).size());
   }
 
 
   void FastJets::reset() {
     _yscales.clear();
-    _particles.clear();
+    _fsparticles.clear();
+    _tagparticles.clear();
     /// @todo _cseq = fastjet::ClusterSequence();
   }
 
 
   Jets FastJets::_jets() const {
-    Jets rtn; rtn.reserve(pseudojets().size());
-    foreach (const fastjet::PseudoJet& pj, pseudojets()) {
-      rtn.push_back(_mkJet(pj));
-    }
     /// @todo Cache?
-    return rtn;
+    return mkJets(pseudojets(), _fsparticles, _tagparticles);
   }
 
 
-  Jet FastJets::trimJet(const Jet &input, const fastjet::Filter &trimmer)const{
-    assert(input.pseudojet().associated_cluster_sequence() == clusterSeq().get());
+  Jet FastJets::trimJet(const Jet& input, const fastjet::Filter& trimmer) const {
+    if (input.pseudojet().associated_cluster_sequence() != clusterSeq().get())
+      throw Error("To trim a Rivet::Jet, its associated PseudoJet must have come from this FastJets' ClusterSequence");
     PseudoJet pj = trimmer(input);
-    return _mkJet(pj);
+    return mkJet(pj, _fsparticles, _tagparticles);
   }
 
 
   PseudoJets FastJets::pseudoJets(double ptmin) const {
     return clusterSeq() ? clusterSeq()->inclusive_jets(ptmin) : PseudoJets();
   }
 
 
-  Jet FastJets::_mkJet(const PseudoJet &pj)const{
-    assert(clusterSeq());
-
-    // Take the constituents from the cluster sequence, unless the jet was not
-    // associated with the cluster sequence (could be the case for trimmed jets)
-    const PseudoJets parts = (pj.associated_cluster_sequence() == clusterSeq().get())
-      ? clusterSeq()->constituents(pj) : pj.constituents();
-
-    vector<Particle> constituents, tags;
-    constituents.reserve(parts.size());
-    for (const fastjet::PseudoJet& p : parts) {
-      map<int, Particle>::const_iterator found = _particles.find(p.user_index());
-      // assert(found != _particles.end());
-      if (found == _particles.end() && p.is_pure_ghost()) continue; //< Pure FJ ghosts are ok
-      assert(found != _particles.end()); //< Anything else must be known
-      assert(found->first != 0); //< All mapping IDs are pos-def (particles) or neg-def (tags)
-      if (found->first > 0) constituents.push_back(found->second);
-      else if (found->first < 0) tags.push_back(found->second);
-    }
-
-    return Jet(pj, constituents, tags);
-  }
-
-
 }
diff --git a/src/Projections/MissingMomentum.cc b/src/Projections/MissingMomentum.cc
--- a/src/Projections/MissingMomentum.cc
+++ b/src/Projections/MissingMomentum.cc
@@ -1,46 +1,48 @@
 // -*- C++ -*-
 #include "Rivet/Projections/MissingMomentum.hh"
 
 namespace Rivet {
 
 
   int MissingMomentum::compare(const Projection& p) const {
     return mkNamedPCmp(p, "VisibleFS");
   }
 
 
   void MissingMomentum::clear() {
     _momentum = FourMomentum();
     _set = 0.0;
+    _spt = 0.0;
     _vet = Vector3();
+    _vpt = Vector3();
   }
 
 
   void MissingMomentum::project(const Event& e) {
     clear();
 
     // Project into final state
     const FinalState& vfs = applyProjection<FinalState>(e, "VisibleFS");
     for (const Particle& p : vfs.particles()) {
       const FourMomentum& mom = p.momentum();
       const Vector3 ptunit = mom.vector3().setZ(0.0).unit();
       _momentum += mom;
       _set += mom.Et();
       _spt += mom.pT();
       _vet += mom.Et() * ptunit;
       _vpt += mom.pT() * ptunit;
     }
   }
 
 
   const FourMomentum MissingMomentum::visibleMomentum(double mass) const {
     /// @todo Couldn't we just reset the internal _momentum's mass and return by value? Would require mutable, though
     FourMomentum p4 = _momentum;
     const double pmod2 = p4.p3().mod2();
     const double new_energy = sqrt(pmod2 + sqr(mass));
     p4.setE(new_energy);
     return p4;
   }
 
 
 }
diff --git a/src/Tools/BinnedHistogram.cc b/src/Tools/BinnedHistogram.cc
--- a/src/Tools/BinnedHistogram.cc
+++ b/src/Tools/BinnedHistogram.cc
@@ -1,87 +1,85 @@
 // -*- C++ -*-
 #include "Rivet/Tools/BinnedHistogram.hh"
 #include "Rivet/Tools/RivetYODA.hh"
 #include "Rivet/Analysis.hh"
 
 namespace Rivet {
 
 
   template<typename T>
-  const BinnedHistogram<T>& BinnedHistogram<T>::addHistogram(const T& binMin,
-                                                             const T& binMax,
-                                                             Histo1DPtr histo){
-    if (binMin > binMax) {
-      throw Error
-        ("Cannot add a binned histogram where the lower bin edge is above the upper edge");
-    }
+  const BinnedHistogram<T>& BinnedHistogram<T>::add(const T& binMin, const T& binMax, Histo1DPtr histo) {
+    if (binMin > binMax) throw RangeError("Cannot add a binned histogram where the lower bin edge is above the upper edge");
     _histosByUpperBound[binMax] = histo;
     _histosByLowerBound[binMin] = histo;
     bool found = false;
-    foreach (Histo1DPtr hist, _histos) {
+    for (Histo1DPtr hist : _histos) {
       if (hist == histo) {
         found = true;
         break;
       }
     }
 
     if (!found){
       _histos.push_back(histo);
-      _binWidths[histo]=binMax-binMin;
+      _binWidths[histo] = binMax-binMin;
     }
 
     return *this;
   }
 
 
+  template<typename T>
+  const Histo1DPtr BinnedHistogram<T>::histo(const T& binval) const {
+    // Check that the bin is not out of range
+    auto histIt1 = _histosByUpperBound.upper_bound(binval);
+    if (histIt1 == _histosByUpperBound.end()) throw RangeError("BinnedHistogram: no bin found");
 
-  template<typename T>
-  Histo1DPtr BinnedHistogram<T>::fill(const T& bin,
-                                                     const T& val,
-                                                     double weight) {
-
-    typename map<T, Histo1DPtr>::iterator histIt =
-      _histosByUpperBound.upper_bound(bin);
-    //check that the bin is not out of range
-    if (histIt == _histosByUpperBound.end()) {
-      return Histo1DPtr();
-    }
-
-    Histo1DPtr histo = histIt->second;
-    histIt = _histosByLowerBound.lower_bound(bin);
+    Histo1DPtr histo = histIt1->second;
 
     // No need to check going beyond the upper bound if we already passed above
     // (given that upper bound > lower bound is checked)
     // Check it is not before the start of the map
-    if (histIt == _histosByLowerBound.begin()) {
-      return Histo1DPtr();
-    }
+    auto histIt2 = _histosByLowerBound.lower_bound(binval);
+    if (histIt2 == _histosByLowerBound.begin()) throw RangeError("BinnedHistogram: no bin found");
+
     // By-lower-bound actually gives us the iterator one above the nearest element,
     // so decrement it. This is safe because we already checked we're not at the start!
-    --histIt;
-
-    if (histo != histIt->second) {
-      return Histo1DPtr();
-    }
-
-    histo->fill(val, weight);
+    --histIt2;
+    if (histo != histIt2->second) throw RangeError("BinnedHistogram: no bin found");
 
     return histo;
   }
 
 
   template<typename T>
+  Histo1DPtr BinnedHistogram<T>::histo(const T& binval) {
+    return static_cast<const BinnedHistogram&>(*this).histo(binval); //< trick to avoid duplication
+  }
+
+
+  template<typename T>
+  void BinnedHistogram<T>::fill(const T& binval, double val, double weight) {
+    try {
+      Histo1DPtr h = histo(binval);
+      h->fill(val, weight);
+      //return h;
+    } catch (RangeError& e) {} //< no bin found: do nothing
+  }
+
+
+  template<typename T>
   void BinnedHistogram<T>::scale(const T& scale, Analysis* ana) {
-    foreach (Histo1DPtr hist, getHistograms()) {
+    for (Histo1DPtr hist : histos()) {
       ana->scale(hist, scale/_binWidths[hist]);
     }
   }
 
 
 
-  // Template declarations for the compiler.
+  // Template declarations for the compiler
   template class BinnedHistogram<double>;
   template class BinnedHistogram<int>;
   template class BinnedHistogram<float>;
 
 
 }
diff --git a/src/Tools/Makefile.am b/src/Tools/Makefile.am
--- a/src/Tools/Makefile.am
+++ b/src/Tools/Makefile.am
@@ -1,19 +1,20 @@
 noinst_LTLIBRARIES = libRivetTools.la
 
 libRivetTools_la_SOURCES = \
   BinnedHistogram.cc \
   Cuts.cc \
   JetUtils.cc \
+  Random.cc \
   Logging.cc \
   ParticleUtils.cc \
   ParticleName.cc \
   RivetYODA.cc \
   RivetMT2.cc \
   RivetPaths.cc \
   Utils.cc \
   binreloc.c \
   mt2_bisect.cc
 
 dist_noinst_HEADERS = binreloc.h mt2_bisect.hh
 
 libRivetTools_la_CPPFLAGS = $(AM_CPPFLAGS) -DENABLE_BINRELOC -DDEFAULTDATADIR=\"$(datadir)\" -DDEFAULTLIBDIR=\"$(libdir)\"
diff --git a/src/Tools/Random.cc b/src/Tools/Random.cc
new file mode 100644
--- /dev/null
+++ b/src/Tools/Random.cc
@@ -0,0 +1,52 @@
+// -*- C++ -*-
+#include "Rivet/Config/RivetCommon.hh"
+#include <random>
+#if defined(_OPENMP)
+#include "omp.h"
+#endif
+
+namespace Rivet {
+
+
+  // Return a thread-safe random number generator
+  mt19937& rng() {
+    #if defined(_OPENMP)
+    static map<int,mt19937> gens;
+    const int nthread = omp_get_thread_num();
+    if (gens.find(nthread) == gens.end()) {
+      seed_seq seq{1,2,3,4,5};
+      vector<uint32_t> seeds(nthread+1);
+      seq.generate(seeds.begin(), seeds.end());
+      gens[nthread] = mt19937(seeds[nthread]);
+      // cout << "Thread " << nthread+1 << ", seed=" << seeds[nthread] << " (" << gens.size() << " RNGs)" << endl;
+    }
+    mt19937& g = gens[nthread];
+    #else
+    static mt19937 g(12345);
+    #endif
+    return g;
+  }
+
+
+  // Return a uniformly sampled random number between 0 and 1
+  double rand01() {
+    // return rand() / (double)RAND_MAX;
+    return generate_canonical<double, 10>(rng());
+  }
+
+
+  // Return a Gaussian/normal sampled random number with the given mean and width
+  double randnorm(double loc, double scale) {
+    normal_distribution<> d(loc, scale);
+    return d(rng());
+  }
+
+
+  // Return a log-normal sampled random number
+  double randlognorm(double loc, double scale) {
+    lognormal_distribution<> d(loc, scale);
+    return d(rng());
+  }
+
+
+}
diff --git a/src/Tools/RivetPaths.cc b/src/Tools/RivetPaths.cc
--- a/src/Tools/RivetPaths.cc
+++ b/src/Tools/RivetPaths.cc
@@ -1,158 +1,158 @@
 #include "Rivet/Config/RivetCommon.hh"
 #include "Rivet/Tools/RivetPaths.hh"
 #include "Rivet/Tools/Utils.hh"
 #include "binreloc.h"
 #include <cstring>
 
 namespace Rivet {
 
 
   inline string _findFile(const string& filename, const vector<string>& paths) {
     for (const string& dir : paths) {
       const string path = dir + "/" + filename;
       if (fileexists(path)) return path;
     }
     return "";
   }
 
 
   string getLibPath() {
     BrInitError error;
     br_init_lib(&error);
     char* temp = br_find_lib_dir(DEFAULTLIBDIR);
     const string libdir(temp);
-    free (temp);
+    free(temp);
     return libdir;
   }
 
   string getDataPath() {
     BrInitError error;
     br_init_lib(&error);
     char* temp = br_find_data_dir(DEFAULTDATADIR);
     const string sharedir(temp);
-    free (temp);
+    free(temp);
     return sharedir;
   }
 
   string getRivetDataPath() {
     return getDataPath() + "/Rivet";
   }
 
 
 
   void setAnalysisLibPaths(const vector<string>& paths) {
     const string pathstr = pathjoin(paths);
     setenv("RIVET_ANALYSIS_PATH", pathstr.c_str(), 1);
   }
 
   void addAnalysisLibPath(const string& extrapath) {
     vector<string> paths = getAnalysisLibPaths();
     paths.push_back(extrapath);
     setAnalysisLibPaths(paths);
   }
 
   vector<string> getAnalysisLibPaths() {
     vector<string> dirs;
     // Use the Rivet analysis path variable if set...
     const char* env = getenv("RIVET_ANALYSIS_PATH");
     if (env) dirs += pathsplit(env);
     // ... otherwise fall back to the Rivet library install path unless the path ends in ::
     if (!env || strlen(env) < 2 || string(env).substr(strlen(env)-2) != "::")
       dirs += getLibPath();
     return dirs;
   }
 
   string findAnalysisLibFile(const string& filename) {
     return _findFile(filename, getAnalysisLibPaths());
   }
 
 
 
   void setAnalysisDataPaths(const vector<string>& paths) {
     const string pathstr = pathjoin(paths);
     setenv("RIVET_DATA_PATH", pathstr.c_str(), 1);
   }
 
   void addAnalysisDataPath(const string& extrapath) {
     vector<string> paths = getAnalysisDataPaths();
     paths.push_back(extrapath);
     setAnalysisDataPaths(paths);
   }
 
   vector<string> getAnalysisDataPaths() {
     vector<string> dirs;
     // Use the Rivet data path variable if set...
     const char* env = getenv("RIVET_DATA_PATH");
     if (env) dirs += pathsplit(env);
     // ... then, unless the path ends in :: ...
     if (!env || strlen(env) < 2 || string(env).substr(strlen(env)-2) != "::") {
       // ... fall back to the Rivet data install path...
       dirs += getRivetDataPath();
       // ... and also add any analysis plugin search dirs for convenience
       dirs += getAnalysisLibPaths();
     }
     return dirs;
   }
 
   string findAnalysisDataFile(const string& filename,
                               const vector<string>& pathprepend, const vector<string>& pathappend) {
     const vector<string> paths = pathprepend + getAnalysisDataPaths() + pathappend;
     return _findFile(filename, paths);
   }
 
 
   vector<string> getAnalysisRefPaths() {
     vector<string> dirs;
     // Use the Rivet ref path variable if set...
     const char* env = getenv("RIVET_REF_PATH");
     if (env) dirs += pathsplit(env);
     // ... and append the universal Rivet data paths, unless the env path ends in ::
     if (!env || strlen(env) < 2 || string(env).substr(strlen(env)-2) != "::")
       dirs += getAnalysisDataPaths();
     return dirs;
   }
 
   string findAnalysisRefFile(const string& filename,
                              const vector<string>& pathprepend, const vector<string>& pathappend) {
     const vector<string> paths = pathprepend + getAnalysisRefPaths() + pathappend;
     return _findFile(filename, paths);
   }
 
 
   vector<string> getAnalysisInfoPaths() {
     vector<string> dirs;
     // Use the Rivet info path variable if set...
     const char* env = getenv("RIVET_INFO_PATH");
     if (env) dirs += pathsplit(env);
     // ... and append the universal Rivet data paths, unless the env path ends in ::
     if (!env || strlen(env) < 2 || string(env).substr(strlen(env)-2) != "::")
       dirs += getAnalysisDataPaths();
     return dirs;
   }
 
   string findAnalysisInfoFile(const string& filename,
                               const vector<string>& pathprepend, const vector<string>& pathappend) {
     const vector<string> paths = pathprepend + getAnalysisInfoPaths() + pathappend;
     return _findFile(filename, paths);
   }
 
 
   vector<string> getAnalysisPlotPaths() {
     vector<string> dirs;
     // Use the Rivet plot path variable if set...
     const char* env = getenv("RIVET_PLOT_PATH");
     if (env) dirs += pathsplit(env);
     // ... and append the universal Rivet data paths, unless the env path ends in ::
     if (!env || strlen(env) < 2 || string(env).substr(strlen(env)-2) != "::")
       dirs += getAnalysisDataPaths();
     return dirs;
   }
 
   string findAnalysisPlotFile(const string& filename,
                               const vector<string>& pathprepend, const vector<string>& pathappend) {
     const vector<string> paths = pathprepend + getAnalysisPlotPaths() + pathappend;
     return _findFile(filename, paths);
   }
 
 
 }
diff --git a/src/Tools/RivetYODA.cc b/src/Tools/RivetYODA.cc
--- a/src/Tools/RivetYODA.cc
+++ b/src/Tools/RivetYODA.cc
@@ -1,48 +1,48 @@
 #include "Rivet/Config/RivetCommon.hh"
 #include "Rivet/Tools/RivetYODA.hh"
 #include "Rivet/Tools/RivetPaths.hh"
 #include "YODA/ReaderYODA.h"
 #include "YODA/ReaderAIDA.h"
 
 using namespace std;
 
 namespace Rivet {
 
 
   string getDatafilePath(const string& papername) {
     /// Try to find YODA otherwise fall back to try AIDA
     const string path1 = findAnalysisRefFile(papername + ".yoda");
     if (!path1.empty()) return path1;
     const string path2 = findAnalysisRefFile(papername + ".aida");
     if (!path2.empty()) return path2;
-    throw Rivet::Error("Couldn't find ref data file '" + papername + ".yoda/aida" +
-                       " in $RIVET_REF_PATH, '" + getRivetDataPath() + "', or '.'");
+    throw Rivet::Error("Couldn't find ref data file '" + papername + ".yoda" +
+                       " in data path, '" + getRivetDataPath() + "', or '.'");
   }
 
 
   map<string, AnalysisObjectPtr> getRefData(const string& papername) {
     const string datafile = getDatafilePath(papername);
 
     // Make an appropriate data file reader and read the data objects
     /// @todo Remove AIDA support some day...
     YODA::Reader& reader = (datafile.find(".yoda") != string::npos) ?   \
       YODA::ReaderYODA::create() : YODA::ReaderAIDA::create();
     vector<YODA::AnalysisObject *> aovec;
     reader.read(datafile, aovec);
 
     // Return value, to be populated
     map<string, AnalysisObjectPtr> rtn;
     foreach ( YODA::AnalysisObject* ao, aovec ) {
       AnalysisObjectPtr refdata(ao);
       if (!refdata) continue;
       const string plotpath = refdata->path();
       // Split path at "/" and only return the last field, i.e. the histogram ID
       const size_t slashpos = plotpath.rfind("/");
       const string plotname = (slashpos+1 < plotpath.size()) ? plotpath.substr(slashpos+1) : "";
       rtn[plotname] = refdata;
     }
     return rtn;
   }
 
 
 }
diff --git a/test/Makefile.am b/test/Makefile.am
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1,38 +1,39 @@
 check_PROGRAMS = testMath testMatVec testCmp testApi testNaN testBeams
 
 AM_LDFLAGS = -L$(top_srcdir)/src -L$(prefix)/lib $(YAMLCPP_LDFLAGS) -L$(YODALIBPATH)
 LIBS = -lm $(GSL_LDFLAGS) -lYODA
 
 TEST_LDADD = $(top_builddir)/src/libRivet.la $(HEPMCLDFLAGS) $(YODALDFLAGS) $(HEPMCLDLIBS) $(YODALDLIBS)
 
 testMath_SOURCES = testMath.cc
 testMath_LDADD = $(TEST_LDADD)
 testMatVec_SOURCES = testMatVec.cc
 testMatVec_LDADD = $(TEST_LDADD)
 testCmp_SOURCES = testCmp.cc
 testCmp_LDADD = $(TEST_LDADD)
 testApi_SOURCES = testApi.cc
 testApi_LDADD = $(TEST_LDADD)
 testNaN_SOURCES = testNaN.cc
 testNaN_LDADD = $(TEST_LDADD)
 testBeams_SOURCES = testBeams.cc
 testBeams_LDADD = $(TEST_LDADD)
 
 TESTS_ENVIRONMENT = \
-  RIVET_REF_PATH=$(top_srcdir)/data/refdata \
-  RIVET_INFO_PATH=$(top_srcdir)/data/anainfo \
-  RIVET_ANALYSIS_PATH=$(top_builddir)/src/Analyses/.libs \
+  RIVET_ANALYSIS_PATH=$(top_builddir)/analyses \
+  RIVET_DATA_PATH=$(top_srcdir)/analyses/data \
+  RIVET_INFO_PATH=$(top_srcdir)/analyses/data \
+  RIVET_REF_PATH=$(top_srcdir)/analyses/data \
   LD_LIBRARY_PATH=$(top_builddir)/src:$(top_builddir)/src/.libs:$(HEPMCLIBPATH):$(YODALIBPATH):$(FASTJETLIBPATH):$(YAML_CPPLIBPATH):$(LD_LIBRARY_PATH) \
   DYLD_LIBRARY_PATH=$(top_builddir)/src:$(top_builddir)/src/.libs:$(HEPMCLIBPATH):$(YODALIBPATH):$(FASTJETLIBPATH):$(YAML_CPPLIBPATH):$(DYLD_LIBRARY_PATH) \
   PYTHON_BUILD_DIR=$(top_builddir)/pyext/build \
   PATH=$(top_builddir)/bin:$(top_srcdir)/bin:$(PATH) \
   RIVET_TESTS_SRC=$(srcdir)
 
 TESTS = testMath testMatVec testCmp testApi testNaN testBeams
 if ENABLE_ANALYSES
 TESTS += testCmdLine.sh
 endif
 
 EXTRA_DIST = testApi.hepmc testCmdLine.sh
 
-CLEANFILES = out.aida log a.out fifo.hepmc file2.hepmc out.yoda NaN.aida Rivet.yoda
+CLEANFILES = log a.out fifo.hepmc file2.hepmc out.yoda NaN.aida Rivet.yoda
diff --git a/test/testCmdLine.sh b/test/testCmdLine.sh
--- a/test/testCmdLine.sh
+++ b/test/testCmdLine.sh
@@ -1,56 +1,61 @@
 #! /usr/bin/env bash
 
-set -x
+#set -x
 
 if [[ -z "$PYTHON_BUILD_DIR" ]]; then
     echo "\$PYTHON_BUILD_DIR must be defined" 1>&2
     exit 1
 fi
 export PYTHONPATH=$(ls -d $PYTHON_BUILD_DIR/lib.*):$PYTHONPATH
 
-#echo PYTHONPATH=$PYTHONPATH \
-#    PYTHON_BUILD_DIR=$PYTHON_BUILD_DIR \
-#    LD_LIBRARY_PATH=$LD_LIBRARY_PATH \
-#    PATH=$PATH \
-#    RIVET_REF_PATH=$RIVET_REF_PATH \
-#    RIVET_INFO_PATH=$RIVET_INFO_PATH \
-#    RIVET_ANALYSIS_PATH=$RIVET_ANALYSIS_PATH
-
+echo PYTHONPATH=$PYTHONPATH
+echo PYTHON_BUILD_DIR=$PYTHON_BUILD_DIR
+echo LD_LIBRARY_PATH=$LD_LIBRARY_PATH
+echo PATH=$PATH
+echo
+echo RIVET_ANALYSIS_PATH=$RIVET_ANALYSIS_PATH
+echo RIVET_DATA_PATH=$RIVET_DATA_PATH
+echo RIVET_REF_PATH=$RIVET_REF_PATH
+echo RIVET_INFO_PATH=$RIVET_INFO_PATH
 
 function _clean() {
     rm -f fifo.hepmc
     rm -f file2.hepmc
 }
 
 function _setup() {
     _clean
     cp ${RIVET_TESTS_SRC}/testApi.hepmc file2.hepmc
     mkfifo fifo.hepmc
 }
 
 function _check() {
     CODE=$?
     if [[ $CODE -ne 0 ]]; then
         _clean
         _exit $CODE
     fi
 }
 
 
 _setup
 
+echo
 rivet --list-analyses > log || exit $?
 
+echo
 rivet -a D0_2008_S7554427 ${RIVET_TESTS_SRC}/testApi.hepmc file2.hepmc > log || exit $?
 grep -q "20 events" log
 _check
 
+echo
 cat ${RIVET_TESTS_SRC}/testApi.hepmc | rivet -a D0_2008_S7554427 > log || exit $?
 grep -q "10 events" log
 _check
 
+echo
 cat ${RIVET_TESTS_SRC}/testApi.hepmc > fifo.hepmc &
 rivet -a D0_2008_S7554427 fifo.hepmc > log || exit $?
 grep -q "10 events" log
 _check
 _clean
diff --git a/test/testMatVec.cc b/test/testMatVec.cc
--- a/test/testMatVec.cc
+++ b/test/testMatVec.cc
@@ -1,155 +1,155 @@
 #include "Rivet/Math/MathUtils.hh"
 #include "Rivet/Math/Vectors.hh"
 #include "Rivet/Math/Matrices.hh"
-#include "Rivet/Math/MatrixDiag.hh"
+// #include "Rivet/Math/MatrixDiag.hh"
 using namespace Rivet;
 
 #include <iostream>
 #include <limits>
 #include <cassert>
 using namespace std;
 
 int main() {
 
   FourVector a(1,0,0,0);
   cout << a << ": interval = " << a.invariant() << endl;
   assert(fuzzyEquals(a.invariant(), 1));
   a.setZ(1);
   assert(isZero(a.invariant()));
   cout << a << ": interval = " << a.invariant() << endl;
   a.setY(2).setZ(3);
   cout << a << ": interval = " << a.invariant() << endl;
   assert(fuzzyEquals(a.invariant(), -12));
   cout << a << ": vector = " << a.vector3() << endl << endl;
 
   FourMomentum b(1,0,0,0);
   cout << b << ": mass = " << b.mass() << endl;
   assert(fuzzyEquals(b.mass2(), 1));
   b.setPz(1);
   cout << b << ": mass = " << b.mass() << endl;
   assert(isZero(b.mass2()));
   b.setPy(2).setPz(3).setE(6);
   cout << b << ": mass = " << b.mass2() << endl;
   assert(fuzzyEquals(b.mass2(), 23));
   cout << b << ": vector = " << b.vector3() << endl << endl;
 
   Matrix3 m;
   m.set(0, 0, 7/4.0);
   m.set(0, 1, 3 * sqrt(3)/4.0);
   m.set(1, 0, 3 * sqrt(3)/4.0);
   m.set(1, 1, 13/4.0);
   m.set(2, 2, 9);
   cout << m << endl << endl;
-  EigenSystem<3> es = diagonalize(m);
+//  EigenSystem<3> es = diagonalize(m);
 
   cout << "Matrices:" << endl;
   cout << Matrix3() << endl;
   cout << Matrix3::mkIdentity() << endl;
   const Matrix3 I3 = Matrix3::mkIdentity();
   cout << Matrix3::mkIdentity() * m * I3 << endl;
   cout << "tr(0) & det(0): " << Matrix3().trace() << ", " << Matrix3().det() << endl;
   cout << "tr(I3) & det(I3): " << I3.trace() << ", " << I3.det() << endl;
   Matrix3 m1 = Matrix3::mkIdentity();
   Matrix3 m2 = m1;
   m1.setRow(1, Vector3(1,2,3));
   m2.setColumn(1, Vector3(3,2,1));
   Matrix3 m3 = Matrix3::mkZero();
   cout << m1 << " + " << m2 << " = " << m1 + m2 << endl;
   m3.setRow(0, Vector3(2,3,0)).setRow(1, Vector3(1,4,3)).setRow(2, Vector3(0,1,2));
   cout << m1+m2 << " == " << m3 << ": " << (m1+m2 == m3 ? "true" : "false") << endl;
   cout << endl;
 
 
   Vector3 v3(1,2,3);
   cout << "Vector: " << v3 << endl;
   cout << "Invert: " << v3 << " --> " << -v3 << endl;
   const Matrix3 rot90(Vector3(0,0,1), PI/2.0);
   const Matrix3 rot90m(Vector3(0,0,1), -PI/2.0);
   const Matrix3 rot180(Vector3(0,0,1), PI);
   const Matrix3 rot180m(Vector3(0,0,1), -PI);
   const Vector3 v3_90 = rot90*v3;
   cout << "Rot 90: " << v3 << " ---> " << v3_90 << endl;
   const Vector3 v3_90m = rot90m*v3;
   cout << "Rot -90: " << v3 << " ---> " << v3_90m << endl;
   const Vector3 v3_180 = rot180*v3;
   cout << "Rot 180: " << v3 << " ---> " << v3_180 << endl;
   const Vector3 v3_180m = rot180m*v3;
   cout << "Rot -180: " << v3 << " ---> " << v3_180m << endl;
   assert(fuzzyEquals(v3_180, v3_180m));
 
   const Vector3 v3_9090 = rot90*rot90*v3;
   cout << "Rot 2 x 90: " << v3 << " ---> " << v3_9090 << endl;
   assert(fuzzyEquals(v3_180, v3_9090));
 
   const Vector3 v3_90m90m = rot90m*rot90m*v3;
   cout << "Rot 2 x -90: " << v3 << " ---> " << v3_90m90m << endl;
   assert(fuzzyEquals(v3_180, v3_90m90m));
 
   const Vector3 v3_9090m = rot90*rot90m*v3;
   const Vector3 v3_90m90 = rot90m*rot90*v3;
   cout << "Rot 90*-90: "<< v3 << " ---> " << v3_9090m << endl;
   cout << "Rot -90*90: "<< v3 << " ---> " << v3_90m90 << endl;
   assert(fuzzyEquals(v3, v3_9090m));
   assert(fuzzyEquals(v3, v3_90m90));
 
   const Vector3 v3_90i = rot90.inverse()*v3;
   cout << "Rot (90)^-1: "<< v3 << " ---> " << v3_90i << endl;
   assert(fuzzyEquals(v3_90i, v3_90m));
 
   const Vector3 v3_9090i = rot90*rot90.inverse()*v3;
   const Vector3 v3_90i90 = rot90.inverse()*rot90*v3;
   cout << "Rot 90*(90)^-1: "<< v3 << " ---> " << v3_9090i << endl;
   cout << "Rot (90)^-1*90: "<< v3 << " ---> " << v3_90i90 << endl;
   assert(fuzzyEquals(v3, v3_9090i));
   assert(fuzzyEquals(v3, v3_90i90));
 
   const Matrix3 rot1(Vector3(0,1,0), PI/180.0);
   cout << "Rot 0 x 45 x 1: " << v3 << endl;
   for (size_t i = 0; i < 8; ++i) {
     for (size_t j = 0; j < 45; ++j) {
       v3 = rot1*v3;
     }
     cout << "Rot " << i+1 << " x 45 x 1: " << v3 << endl;
   }
   assert(fuzzyEquals(v3, Vector3(1,2,3)));
   cout << endl;
 
   cout << "Boosts:" << endl;
   LorentzTransform ltX = LorentzTransform::mkObjTransformFromBeta(Vector3(0.5, 0, 0));
   cout << "LTx: " << ltX << endl;
   cout << "I on LTx: " << ltX.rotate(Matrix3::mkIdentity()) << endl;
   cout << "Rot90 on LTx: " << ltX.rotate(rot90) << endl;
   cout << endl;
 
   cout << "X-boosts:" << endl;
   const FourMomentum p1 = FourMomentum(10, 0, 0, 1);
   const FourMomentum p2 = ltX.transform(p1);
   cout << p1 << " -> " << p2 << endl;
   cout << p2 << " -> " << ltX.inverse().transform(p2) << endl;
   //cout << p1.boostVector() << endl;
   const FourMomentum p3 = LorentzTransform::mkFrameTransformFromBeta(p1.boostVector()).transform(p1);
   cout << p1 << " -> " << p3 << endl;
   cout << endl;
 
   LorentzTransform ltY = LorentzTransform::mkObjTransformFromGamma(Vector3(0, 1.2, 0));
   cout << FourMomentum(1,0,0,1) << " -> " //<< "\n  "
        << (ltX * ltY).transform(FourMomentum(1,0,0,1)) << endl;
   cout << FourMomentum(1,0,0,1) << " -> " //<< "\n  "
        << (ltY * ltX).transform(FourMomentum(1,0,0,1)) << endl;
   cout << (ltX * ltY).betaVec() << endl;
   cout << (ltY * ltX).betaVec() << endl;
   cout << (ltX * ltX.inverse()).betaVec() << endl;
 
   // If we are already in the rest frame and there is no boost, then LT is trivial/identity
   LorentzTransform noBoost;
   cout << "Element  0,0 should be 1 and is " << noBoost.toMatrix().get(0,0) << endl;
   assert(noBoost.toMatrix().get(0,0)==1);
   cout << "Element  0,1 should be 0 and is " << noBoost.toMatrix().get(0,1) << endl;
   assert(noBoost.toMatrix().get(0,1)==0);
   cout << "Element  1,0 should be 0 and is " << noBoost.toMatrix().get(1,0) << endl;
   assert(noBoost.toMatrix().get(1,0)==0);
   cout << "Element  1,1 should be 1 and is " << noBoost.toMatrix().get(1,1) << endl;
   assert(noBoost.toMatrix().get(1,1)==1);
 
   return EXIT_SUCCESS;
 }