[Rivet] Bug in Rivet?

Andy Buckley andy.buckley at cern.ch
Tue Apr 12 20:07:54 BST 2016


On 12/04/16 17:26, Dag Gillberg wrote:
> Thanks Andy!
>
> I will ask the HXSWG ppl about what they had in mind regarding the
> "dodgy physics" stuff.

Ok! Make sure not to quote me as as expert on this ;-) I'm interested to 
know if there is some unambiguous (or at least very good approximation) 
way to do this at arbitrary perturbative order.

> Regarding the B-mesons - I meant B-baryons ... and D-baryons apparently.
> I'll put a few print-outs below.
> This is for 13 TeV gg→H MC, disabling warnings for Lambda particles
> which are much more frequent than B baryons in this sample (there are no
> b-quarks at tree level).
>
> So 5232, 4232, 5122 ...

I tested these with the fixed definitions and they work fine. So I 
expect the patch and upcoming 2.4.2 release will also work fine for you. 
Let me know if you have trouble with the patch before I push out a 
release that doesn't actually fix the problem!

Andy


> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (2.2,-1.3,4.8,0), ID = -11
>    - partent -5232
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (1.7,-1.1,4.3,0), ID = 12
>    - partent -5232
> SimplifiedXSec::execute() INFO    Processed 0.3k events
>
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (1.2,-1.4,6.1,-0), ID = -16
>    - partent -15
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (0.3,-2.2,0.0,0), ID = 16
>    - partent -5232
> SimplifiedXSec::execute() INFO    Processed 0.4k events
>
> SimplifiedXSec::execute() INFO    Processed 0.5k events
>
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (0.3,-3.8,4.0,0), ID = -11
>    - partent 4232
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (0.1,-7.6,5.3,0), ID = 12
>    - partent 4232
> SimplifiedXSec::execute() INFO    Processed 0.6k events
>
> SimplifiedXSec::execute() INFO    Processed 0.7k events
>
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (0.2,-0.3,5.1,0), ID = 11
>    - partent -4232
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (1.7,0.1,3.0,0), ID = -12
>    - partent -4232
> SimplifiedXSec::execute() INFO    Processed 0.8k events
>
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (1.0,-0.9,5.8,0), ID = -11
>    - partent -5122
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (1.9,0.6,5.9,-0), ID = 12
>    - partent -5122
> SimplifiedXSec::execute() INFO    Processed 0.9k events
>
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (0.3,-1.9,5.9,0), ID = -13
>    - partent -5132
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (0.4,1.4,4.6,-0), ID = 14
>    - partent -5132
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (2.8,3.8,3.5,0), ID = 11
>    - partent 5122
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (0.8,3.3,2.3,0), ID = -12
>    - partent 5122
> SimplifiedXSec::execute() INFO    Processed 1.0k events
>
> SimplifiedXSec::execute() INFO    Processed 1.1k events
>
> SimplifiedXSec::execute() INFO    Processed 1.2k events
>
> SimplifiedXSec::execute() INFO    Processed 1.3k events
>
> SimplifiedXSec::execute() INFO    Processed 1.4k events
>
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (0.6,0.9,4.6,0), ID = 13
>    - partent 5122
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (2.1,1.5,5.8,-0), ID = -14
>    - partent 5122
> SimplifiedXSec::execute() INFO    Processed 1.5k events
>
> SimplifiedXSec::execute() INFO    Processed 1.6k events
>
> SimplifiedXSec::execute() INFO    Processed 1.7k events
>
> SimplifiedXSec::execute() INFO    Processed 1.8k events
>
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (1.2,3.4,4.8,0), ID = 11
>    - partent 11
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (1.6,3.5,5.0,0), ID = -11
>    - partent -11
> SimplifiedXSec::execute() INFO    Processed 1.9k events
>
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (0.7,3.3,6.2,0), ID = -13
>    - partent 4122
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (0.4,3.2,2.5,0), ID = 14
>    - partent 4122
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (0.6,-1.1,0.8,0), ID = 11
>    - partent -4232
> Warning: found unexpected particle!
>    (pT,eta,phi,m) = (0.3,-1.6,0.2,0), ID = -12
>    - partent -4232
>
>
>
>
>
> On Tue, Apr 12, 2016 at 11:52 AM, Andy Buckley <andy.buckley at cern.ch
> <mailto:andy.buckley at cern.ch>> wrote:
>
>     On 12/04/16 14:51, Dag Gillberg wrote:
>
>         Hi Andy,
>
>         Thanks!
>         I saw in some more tests that not only Lambda particles are
>         affected,
>         but also the B-mesons.
>         This can actually slightly have affected our old Rivet routine
>         (for the
>         Higgs differential combination) since we might claissify
>         electrons from
>         a semileptonic heavy flavor hadron decay as a non-hadronic..
>
>
>     Which b-mesons are causing trouble? I think my error was only for
>     baryons, and the digit ordering should be absolute for mesons.
>
>     I checked with an equivalent set of functions, and at least 511,
>     521, and their excited states do seem to work fine now, but I'm not
>     aware of having made any directly relevant change in the patch.
>
>     (BTW, in the replacement file I've completely removed the check for
>     baryons rather than enforce the exceptional conditions, since the
>     particle listing that I had handy in ASCII form includes some baryon
>     IDs which don't seem to fit into the published scheme at all.)
>
>         I'm currently using Jim's setup, to run Rivet within
>         AnalysisBase (i.e.
>         RootCore).
>         Hmm.. not sure how this works, but I see:
>
>         url = $ROOTCOREBIN/../HEPSoftware/Rivet-2.4.1.tar.gz
>
>         So I guess this is being downloaded and compiled somehow.
>
>
>     Sounds like you can make do for now, but I'd better get a new
>     version ready for validation and patch release.
>
>         Now, regarding the code.
>         We have two open questions, where we perhaps can pick your brain :)
>
>         First, note that this is not a pure fiducial/differential
>         measurement.
>         We are using kinematic information, but are allowed to "cheat"
>         and use
>         quarks etc.
>
>         1. We are supposed to classify
>             gg → ZH
>         vs
>             qq → ZH
>         Which, at NLO, I don't think is possible...
>
>         gu → ZHu
>
>         could be either of the above. Any ideas here?
>         Is this split simply impossible with NLO MC?
>
>
>     I think the split is physically quite dodgy in general! There's no
>     physical separation between gluon emissions and splittings that take
>     place in the initial state shower and which take place in the matrix
>     element... so at NLO where the ME can contain (sums of) such
>     splittings on the incoming legs without any "external" indication,
>     the distinction is false. The physical way would be to do
>     "approximate" subprocess classification by using kinematic info to
>     choose gg or qq (or whatever) enhanced regions... if there is a
>     kinematic distinction.
>
>     This is vague, armchair-physicist stuff from me, though, and
>     sometimes there are "loopholes" (like in single top where there
>     really is no interference between s- and t-channels because the
>     final states are sufficiently distinct).
>
>         2. Regarding the jets:
>         We want to take all stable particles, remove anything from the Higgs
>         (very easy with Rivet!).
>
>
>     As long as there's a Higgs in the event!
>
>         Also ignore particles from leptonic Z and W decays (leptons, e,
>         µ, and
>         FSR γ)
>
>         Is there a standard way to do this?
>
>
>     Well, this is pretty well-aligned with isPrompt(p). That will return
>     false if there are any hadrons in the ancestor chain, otherwise
>     true. This includes W and Z production, without accidentally
>     tripping up on the off-shell W's that Herwig++ sometimes likes to
>     insert into semileptonic hadron decays. But it will also (IIRC)
>     classify FSR photons from quarks as prompt -- and you probably don't
>     want to exclude those. The more explicit way would be to configure
>     WFinder and ZFinder instances and exclude particles which appear in
>     their particles() lists. We don't currently have any built-in
>     handling for Z and W decays via taus, though...
>
>     Let us know what works for you, and if there's any machinery we
>     could usefully add (or receive as a patch :-P )
>
>         I suppose we can just do exaclty what we did for the Higgs routine:
>
>         https://svnweb.cern.ch/trac/atlasoff/browser/PhysicsAnalysis/HiggsPhys/HSG1/Analysis/trunk/GeneralTools/HggUnfoldingPaper2013/Rivet/Combination/HiggsDiffXSecCombination.cc#L110
>
>         which btw use the projections :)
>
>
>     :-)
>
>     Actually, I think I cleaned this one a bit recently, for our
>     forthcoming C++11-enabled 2.5.0 release:
>     https://rivet.hepforge.org/hg/rivet/file/66e20000b87f/src/Analyses/ATLAS_2015_I1364361.cc
>
>     Andy
>
>
>         On Tue, Apr 12, 2016 at 4:04 AM, Andy Buckley
>         <andy.buckley at cern.ch <mailto:andy.buckley at cern.ch>
>         <mailto:andy.buckley at cern.ch <mailto:andy.buckley at cern.ch>>> wrote:
>
>              On 12/04/16 03:20, Dag Gillberg wrote:
>
>                  Hi Andy,
>
>                  I'm writing Rivet code (yay! fun!).
>                  And I want to build jets out of stable particles that
>         are hadrons or
>                  from hadron decay.
>                  So I do:
>                        if ( PID::isHadron(p.pdgId()) || p.fromHadron() )
>
>                  Now, as a cross check, I printed out particles that
>         failed this,
>                  and I
>                  see a ton of strange baryons fail:
>                  Warning: found unexpected particle!
>                      (pT,eta,phi,m) = (0.9,-2.0,2.0,1), ID = 3122
>                  Warning: found unexpected particle!
>                      (pT,eta,phi,m) = (0.5,-4.3,1.9,1), ID = -3122
>                  Warning: found unexpected particle!
>                      (pT,eta,phi,m) = (0.9,-2.2,3.9,1), ID = 3122
>
>                  These are Lambda particles.
>                  They all fail this line in isBaryon:
>
>                  if (_digit(nq2,pid) < _digit(nq3,pid)) return false;
>
>                  since the second digit (1) is smaller than the third (2)
>                  ( not sure what this condition is based on though..)
>                  But a Lambda is certainly a Baryon..
>                  So this must be a bug, right?
>
>
>
>              Hi Dag,
>
>              Yes, you're right: I had tried to tighten up my
>         implementation of
>              PID checks in the MCUtils package, following the PDG scheme
>              definition, but missed that for baryons there are
>         exceptions to the
>              ordering.
>
>              I fixed this a while ago in MCUtils but had forgotten to
>         sync the
>              fixes into Rivet. I'm not sure how it managed to not show
>         up in our
>              release validation -- we should look into that.
>
>              Anyway I've done the sync now, and the fixed header file (from
>              include/Rivet/Tools) is attached -- are you able to patch,
>         or do you
>              rely on a pre-built copy of Rivet? Since it's a bug with real
>              physics implications, I'm tempted to get a patch release
>         out asap.
>
>              Thanks for the report!
>
>              Now a couple of unrelated comments on your code snippet ;-)
>
>                          Particles hadrons_notFromHiggs;
>                          FourMomentum sum(0,0,0,0);
>                          for ( const GenParticle *ptcl :
>                  Rivet::particles(event.genEvent()) ) {
>                            Particle p(ptcl);
>                            if (!p.isStable()) continue;
>
>
>              Since you only want stable particles, rather than loop over
>         HepMC
>              GenParticles, convert them to Rivet Particles, and ignore the
>              non-stable ones the "Rivet way" is to set up a FinalState
>         projection:
>
>              // In init()
>              addProjection(FinalState(), "FS")
>
>              // In apply()
>              const Particles& particles = applyProjection<FinalState>(event,
>              "FS").particles();
>              for (const Particle& p : particles) {
>                 ...
>
>              I am trying to move some core intelligence out of the
>         projections
>              and into standalone functions (or maybe Event methods) to
>         make it
>              easier to do many things without projections if wanted,
>         though --
>              the main benefit of projections is automatic caching, but
>         that's not
>              always the most important thing.
>
>              Cheers,
>              Andy
>
>              --
>              Dr Andy Buckley, Lecturer / Royal Society University
>         Research Fellow
>              Particle Physics Expt Group, University of Glasgow
>
>
>
>
>     --
>     Dr Andy Buckley, Lecturer / Royal Society University Research Fellow
>     Particle Physics Expt Group, University of Glasgow
>
>


-- 
Dr Andy Buckley, Lecturer / Royal Society University Research Fellow
Particle Physics Expt Group, University of Glasgow


More information about the Rivet mailing list